Осталось 100499 предметов..
Осталось добавить 100499 предметов, описать взаимодействия между ними и игра будет готова! Хорошо что макросы позволили группировать однотипные ячейки в один файл, так например всю растительность - в grass.asm. Открытые-закрытые двери наверное тоже получится сгруппировать в один файл, а то как-то нехорошо - каждый предмет в своем asm-файле, подключать нудновато.
На данный момент ячейка карты описывается двумя параметрами - указателями на название и скрипт обработки взаимодействия.
STRUCT CellType
name_ptr dw 00;
script_ptr dw 00;
ENDS
Для облегчения описания ячейки был создан макрос SETUP_CELL_TYPE
MACRO SETUP_CELL_TYPE _name, _script
._temp equ $
ORG CELL_TYPES+spr*CellType
CellType _name, _script
ORG ._temp
ENDM
Данный макрос запоминает текущий адрес компиляции в переменной ._temp, подсчитывает по номеру спрайта (spr) сдвиг относительно начала массива описания ячеек (CELL_TYPES) и “впечатывает” по найденному адресу структуру описания ячейки CellType с указателями _name и _script, после чего восстанавливает текущий адрес компиляции из переменной ._temp
В итоге описание ячейки карты выглядит например так:
Floor.spr: equ #03
MODULE Floor
SETUP_CELL_TYPE Floor_cell_name, floor_script
floor_script:
...
defb _endByte
ENDMODULE
Это работает как-то так:
- вначале указываем для модуля номер спрайта (Floor.spr), имя Floor.spr теперь можно использовать в скриптах вместо номера #03
- начинаем модуль
- отрабатывает макрос SETUP_CELL_TYPE вставляя указатели Floor_cell_name и floor_script по нужному адресу, вычесленному на основе Floor.spr
- можем описывать логику взаимодействия с ячейкой через floor_script
- заканчиваем модуль
Плитка другого цвета будет определена так:
FloorWhite.spr: equ #36
MODULE FloorWhite
SETUP_CELL_TYPE_N Floor_cell_name, Floor.floor_script
ENDMODULE
Обработчик взаимодействия указывает на скрипт в модуле Floor, так как плитка практически такая же, только иного цвета.
Текущие объемы сборки:
SjASMPlus Z80 Cross-Assembler v.20170908+dev 25504 size, 7264 free
—– code start: 0x6000 engine size: 2841, code end: 0x6B19 static data size: 21012, static end: 0x6B19 font addr: 0xAB00, pre-font unused size: 155 dynamic data size: 1651, dynamic end: 0xC3A0 —– all end: 0xC3A0
cell3326
]