Поддерживаю ivagor-a, но по себе знаю, что если не делать путевых заметок, потом бывает уже ничего не вспомнить да и не очень хочется.
Вид для печати
Поддерживаю ivagor-a, но по себе знаю, что если не делать путевых заметок, потом бывает уже ничего не вспомнить да и не очень хочется.
Пытаюсь сделать настраиваюмую громкость музыки на AY чипе. Выключил звук во всех каналах задав гротмкость каналам 0 (8, 9, 10), но оставил включенной битик для огибающей. Думал что звука не будет, но звук остался. Играем огибающая. То есть громкость огибащей нельзя настроить, только можно выключить? Подскажите пожалуйста.
апдейт. добавлены звуки. пока только для атаки вимпира и хит героя. добвлены предметы которые можно разрушать, бочки, коробки. Добавлены уникальные предметы такие как ключи. Добавлены двери, юзая ключи, можно их открывать. Добавлены ресурсы такие как монетки, бутылки. В процессе добавления непроходимые предметы такие как сундуки. Некоторые рантайм буфферы перенесены в конец памяти и динамически создаются чтобы уменьшить размер рома. Буферы выровнены в памяти чтобы был быстрее доступ. Добавлено много обработчиков для обработки подберания, использования всех этих предметов. оптимизированны и уницифированны процедуры для коллизии и обработки данных тайлов. Это позволило отказаться от 8К буфера для данных тайлов на квазидиске. Плюс в копилку памяти. ram-disk data layout пока показываеь эту память как занятую.
Табличка распределения памяти на квазидиске:
https://youtu.be/oVTMN_sKn0cКод:; ram-disk data layout
; bank0 addr0 [ 1054 free] description:
; hero_r_sprites [14466], skeleton_sprites [10140], scythe_sprites [1626], hero_sword_sprites [5226],
; bank0 addr8000 [28253 free] description:
; level01_data [789], backs_sprites [496], decals_sprites [3230],
; bank1 addr0 [ 5554 free] description:
; knight_sprites [16398], burner_sprites [9600], bomb_sprites [960],
; bank1 addr8000 [ 0 free] description: $8000-$9FFF tiledata buffer (collision, copyToScr, etc), $A000-$FFFF back buffer2 (to restore a background in the back buffer)
; bank2 addr0 [10162 free] description:
; hero_l_sprites [14466], vampire_sprites [7884],
; bank2 addr8000 [19521 free] description: Music player and songs
; song01 [12542], sound_rd [705],
; bank3 addr0 [25880 free] description:
; level01_gfx [6632],
; bank3 addr8000 [ 5996 free] description: $8000-$9FFF code library. $A000-$FFFF back buffer
; sprite_rd [173], draw_sprite_rd [340], draw_sprite_hit_rd [318], draw_sprite_invis_rd [26], utils_rd [87], sprite_preshift_rd [1538],
; [96420 total free]
- - - Добавлено - - -
А еще допилил напильником подсветку ASM синтаксиса в VS Code. Стало совсем хорошо :)
https://i.ibb.co/bJg5mks/asm-syntax-highlighting.jpg
По видео кажется, что ну просто невозможно подкрасться к монстру без потери HP -- ты все время сначала на него наступаешь, потом только уже машешь мечом. Это ты еще не научился играть, или какие-то детали механики игровой пока недоделаны?
Согласен, очень некомфортно играть. Промахиваюсь и постоянно попадаю под раздачу. Хочется увеличить радиус атаки и сделать ее побыстрее.
понял, спасибо. Удивительно как народ с помощью такой ограниченной технологии делал и делает отличные чиптюн треки.
А вот кто в курсе, я заметил что на NES звук как-то побогаче чтоли, нет такого популярной бульшающей гармоники как любят использовать в AY. В чем принцыпиальная разница между звуковым чипом на NES и AY-3-8910? Можно ли как-то перенести/адаптировать композиции?
Возможно, это не то, вопрос про AY. Я для роботов сделал SFX на 8253, AY оставил для музыки.
К Вектору можно на самом деле подключить Sound Tracker и R-Sound, но, думаю это редкий случай в RL. Хотя мне сдаётся, ivagor по-моему такое делал для меня на DE1.
На таймере всего либо 3 уровня громкости, либо 3 канала. Просто набил сэмплы используя макро-средства m80. Получился некий ad-hoc язык.
Каждый сэмпл имеет заголовок,
Пример сэмпла №32 из роботов: запуск лифта
Отдельные ноты тоже можно вставлять. Скажем, открывание двери выглядит так (тут 3 канала):Код:; Elevator start
IFNDEF _PATLIB
ASEG
.PHASE 0
INCLUDE A:HDRSFX.INC
INCLUDE B:SFX.INC
EndIF
PATHDR <CH32_0,CH32_1>
CH32_0: DB 0
Attack 20,15000,1,-30
Vibrato 15,14000,15000,1,1,-600,-40
Vibrato 30,4000,4000,1,1,-70,-25
Vibrato 30,1300,3000,1,1,20,100
Vibrato 25,2400,5000,1,1,200,180
EndCh
CH32_1: DB 1
Vibrato 10,15000,14500,1,1,-100,-50
Pause 144
Vibrato 25,2400,5000,1,1,200,60
EndCh
Код:; Door 3 open SFX
IFNDEF _PATLIB
ASEG
.PHASE 0
INCLUDE A:HDRSFX.INC
INCLUDE B:SFX.INC
EndIF
PATHDR <CH13_0,CH13_1,CH13_2>
CH13_0: DB 0
Vibrato 8,Hz050,Hz100,2,1,1500
Vibrato 14,Hz050,Hz100,2,3,-1500,1000
EndCh
CH13_1: DB 1
pause 2
Vibrato 50,80,3500,1,1,20,500
EndCh
CH13_2: DB 2
pause 6
note 3219,2
note 6438,2
pause 7
note 4551,5
pause 8
note 3219,1
note 1609,1
note 3219,1
pause 8
note 5734,6
pause 10
note 6438,3
pause 3
note 4551,3
pause 11
Vibrato 4,9102,4551,1,1
EndCh
PATHDR вначале описывает, сколько сэмплу нужно каналов. Драйвер использует каналы динамически. Сколько есть свободных (если предыдущий patch играет), столько и запустит на проигрывание. Отдельный сэмпл можно скомпилить и проиграть утилитой playsfx (в аттаче).
Все сэмплы компилятся в файл sfxlib (sfxlib.mac в аттаче) и кидаются в один из банков квазидиска. При загрузке файла, роботы настраивают слинкованные смещения начала сэмплов в sfxlib добавляя смещения по которым лежат сэмплы. Драйверу просто асинхронно говорится по прерыванию типа играй сэмпл 32, и он играет на свободных каналах тем же кодом что playsfx.
Это-упрощённо. Там есть свои гитики. И это-не AY.
мне нравится идея использовать AY и ВИ53 вместе. По-моему они могут прекрасно друг друга дополнять.