не хватает сортировки по У
Вид для печати
Ага, приходится постоянно бить себя по рукам и писать в коде TODO. :) Какое-то представление что должно получится вроде имеется. Идею игры обдумал с детьми еще на этапе бенчмарков. Представление об игровых движках тоже какое-то есть. Но если честно то уровень изврата чтобы выцарапывать скорость я себе не представлял. :D
Еще апдейт. Пофиксил и оптимизировал востановление бэка, коллизию с тайлами. Добавил обработку колизий герой-монстр. Добавил обработку демеджа, добавил простенький UI для отображения жизни героя.
https://youtu.be/Y8T0PQdOFoc
jerri, придумал как сэкономить на сортировке по высоте. Можно чтонить быстрое но не обязательно эффективное использовать. Типа сортировку пузырком и делать один проход по списку оъектов за апдейт. За несколько апдейтов будет все отсортировано. Так как частота перемещивания спрайтов по высоте не высока, то поидее должно работать.
И еще хочу попробовать чекать колизии монстров с героем каждый второй апдейт. По идее тоже будет чуть быстрее. И делать это с учётом сортировки по высоте.
Очередной апдейт. :)
Перелопатил билд систему. Теперь добавлять новых мостров и разпределять данные по страницам квазидиска стало легко как никогда. :) Это позволило положить спрайты героя для левого и правого направления в разные страницы, так как в один сегмент (~32K) они уже не влезают.
билд скрипт теперь готовит статистику. Можно видеть где что и сколько памяти осталось. Показана ниже:
Добавил новых монстров для лучшего понимания потребления памяти и времени на прешифт. Иногда монстрики делают лунную походку Майкла Джексона. Это ок, мозги у них пока такие же простые как у скелета. :)Код:; ram-disk data layout
; bank0 addr$0000 [400 free] - sprites: ['heroR', 'skeleton', 'scythe', 'hero_attack01']
; bank0 addr$8000 [32768 free] - empty:
; bank1 addr$0000 [7672 free] - sprites: ['knight', 'burner', 'vampire']
; bank1 addr$8000 [0 free] - $8000-$9FFF tiledata buffer (collision, copyToScr, etc), $A000-$FFFF back buffer2 (to restore a background in the back buffer)
; bank2 addr$0000 [18046 free] - sprites: ['heroL']
; bank2 addr$8000 [19856 free] - music: ['song01', 'gigachad16PlayerRD']
; bank3 addr$0000 [26532 free] - levels: ['level01']
; bank3 addr$8000 [6136 free] - $8000-$9FFF code library. $A000-$FFFF back buffer
rom size: 23372 bytes ($5b4c)
Добавил новых тайлов для лучшего понимания потребления памяти.
Улучшил анимацию атаки героя.
https://youtu.be/q2yfeQIEZvA
Обновил AI скелета и его косы. Скелет теперь умеет следить за героем, у него появилось радиус зрения, он умеет выжидать добычу, атаковать и отдыхать после охоты. Коса может отскакивать от препятствий и дамажить героя. :)
https://youtu.be/KROu95GmJd8
Исправил скрипт для экспорта анимаций. Теперь коса вращается правильно и ноги у монстриков перебирают все кадры.
Обновил логику огонька и добавил ему новых спрайтов для атаки.
https://youtu.be/F9r7XN57tSw
Добавлен арт и логика рыцаря. Он становится в защитную стойку если видит противника. Добавлен новый прожектайл вампира. Немного ускорено и пофикшено
https://youtu.be/cBjr93d_8hk
переработал все скрипты для экспортера данных. теперь можно сохранять анимации в верхние сегменты банков квазидиска. сделал статистику того что сохраняется в квазидиск чуть более детальную. можно видеть сколько занимает памяти каждый ассет и сколько пустого места осталось.
переработал формат спавн данных. теперь уровень может иметь больше комнат. Добавил анимарованные объекты на заднем фоне, факел и флаг. Они очень экономно рисуются, прямо на экран минуя бэк буфер, апдейтятся по одному за кадр, а не все сразу как мобы и пули. рисуются только когда есть переход на следующий кадр анимации.
Для примера внизу статистика по памяти квазидиска ту что выдают скрипты после билда проекта.
https://youtu.be/mVaOHm-sK1QКод:; ram-disk data layout
; bank0 addr0 [ 1054 free] description:
; hero_r_sprites [14466], skeleton_sprites [10140], scythe_sprites [1626], hero_attack01_sprites [5226],
; bank0 addr8000 [32304 free] description:
; backs_sprites [464],
; bank1 addr0 [ 5554 free] description:
; knight_sprites [16398], burner_sprites [9600], bomb_slow_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 [19856 free] description: Music player and songs
; song01 [12542], gigachad_player_rd [370],
; bank3 addr0 [26212 free] description:
; level01 [6300],
; bank3 addr8000 [ 6136 free] description: $8000-$9FFF code library. $A000-$FFFF back buffer
; sprite_rd [173], draw_sprite_rd [544], utils_rd [87], sprite_preshift_rd [1538],
; [101278 total free]