Осталось 100499 предметов..

Осталось добавить 100499 предметов, описать взаимодействия между ними и игра будет готова! Хорошо что макросы позволили группировать однотипные ячейки в один файл, так например всю растительность - в grass.asm. Открытые-закрытые двери наверное тоже получится сгруппировать в один файл, а то как-то нехорошо - каждый предмет в своем asm-файле, подключать нудновато.

many_sources

На данный момент ячейка карты описывается двумя параметрами - указателями на название и скрипт обработки взаимодействия.

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

Written on October 6, 2018