(бухай): программируй
148 subscribers
465 photos
96 videos
3 files
65 links
Мысли, дегустация и код
Download Telegram
Ну, это было не сложно )
Детали крепятся хорошо, ничего не разваливается.
Но...
Буква B на джойстиках перевернутая. Причем на обоих. То есть они обе детали сделали одинаковыми, и обе кверху ногами. Конечно издалека это не заметно, но картину все таки портит :(
❤‍🔥3😱2
У меня тут небольшой отдых от игры. Уже неделю толком ничего не делаю. Из последнего - начал заниматься звуком и даже написал разные звуки для оружия, но не уверен, что буду их использовать. Хочу пойти немного другим путем и сделать просто звуки попадания и промаха.

А пока я не программирую игру, пытаюсь ломать j2me игры. И это выходит с переменным успехом.

Сперва я покусился на игры от Gameloft и потерпел фиаско. Хотел вытащить спрайты из Prince of Persia: Warrior Within, декомпилировал код, но там довольно сложная система архивации на сотню строк. Надо разбираться.

Зато Bobby Carrot зашел замечательно. Спрайты там даже не архивированы, а уровни можно изменять прямо в HEX-редакторе. Вот сделал самый легкий уровень на основе первого :)
❤‍🔥2
Все таки ассемблер периодически начинает надоедать, поэтому решил продолжить писать порт игры под винду с блэкджеком и увеличенными дальностью прорисовки и разрешением.
Уже перенес первый уровень, почти все триггеры и оружие. И как же странно программировать классами... В оригинале я почти об этом не думал. Конечно, разбивать разную функциональность на блоки надо, но куда важнее сохранить десятки, а то и сотни лишних байт. Поэтому никакого ООП в оригинальном коде, лишь жесткие обращения к нужным байтам.
👌1
А вообще возник вопрос. Стоит ли повышать дальность отрисовки?
Оригинал рисует только первые три блока перед игроком, и за счет этого ты никогда не знаешь, какие предметы попадутся тебе на пути.
Тут же всю карту видно и все предметы. Кажется, что из-за этого теряется интерес к исследованию уровней.
1👌1
Стоит ли оставить дальность прорисовки мира, как в оригинале?
Anonymous Poll
70%
Оставляй! Олдскул наше все.
30%
Конечно нет. Мы что, не в 21 веке живем?
Оставили мне тут комментарий на itch.io. И это мега-круто.

ZZAP!64 - это журнал, посвящённый чисто Коммодору, издается ещё с 80-х годов.

В итоге написал им на почту, попросили до 25 сентября сделать эксклюзивную версию игры для журнала и написать инструкции.

Буду популярным 😂

P.S. И это повод наконец-то выйти из прокрастинации. Новые уровни сами себя не сделают и графика сама себя не нарисует
🔥141
Нарисовал тут врагов для второго уровня. И как будто бы последний вообще не в тему=)

Сразу вспоминаются игры типа Might&Magic, где гоблины и скелеты соседствуют c ниндзя, живыми свечами, летающими рыбами и роботами. Хотя там все это обусловлено лором.

В целом, моя игра тоже позволяет всякие такие штуки, но вот ниндзя вообще не вписываются, по крайней мере на втором уровне=)
🔥2
Все, определился с врагами.
Пришлось немного переписать текст на уровне, чтобы немного приблизиться к лору с кровавыми глазами и гулями=) Но, в целом, я доволен.
Не доволен я теперь врагами на первом уровне. Как будто бы они слишком простыми вышли, возможно буду переделывать.

А еще начал изучать KickAssembler, и это просто великолепно. По сравнению с CBM prj Studio синтаксисом, на котором пишу сейчас, это небо и земля. Следующий проект точно буду писать на нем, этот уже поздно переделывать, к сожалению.

Например, сейчас, чтобы собрать high/low byte таблицы, мне приходится каждый байт расставлять ручками.
В KickAss же это дело одной команды:
// создаем две таблицы адресов строк экранной памяти
screen_a: .lohifill 25,$0400 + 40*i
// обращаемся к таблицам с помощью .hi/.lo
lda screen_a.lo
ldx screen_a.hi

Ну или можно засунуть это в цикл for:
// создаем таблицу low byte строк карты
map_lb: .for(var b=0;b<16;b++){
.byte <map_data+b*16
}

Тут вообще много полезных директив и конструкций, которые сильно упрощают жизнь. А писать можно в VSCode, и даже плагин есть.
В общем, советую=)
3👍3❤‍🔥21
This media is not supported in your browser
VIEW IN TELEGRAM
Пришло время выходить из прокрастинации.
Спасибо Кириллу Лейферу. Он подсказал мне замечательную идею - ограничить количество врагов на уровне.
И я это сделал. Игроку эта информация недоступна, а вот мне, как разработчику станет гораздо легче проектировать уровни и балансить врагов.
Когда игрок убивает врага, количество уменьшается. Когда оно достигает нуля, выводится сообщение, что мол "кажется, врагов вокруг не осталось", а игра перестает высчитывать вероятность их появления.

Забавно, как от идеи полуоткрытого мира, как в Hexen (да, такие планы тоже были), я добрался до откровенно линейной игры=)
3🤩1
Час чинил сейвы вместо того, чтобы готовить игру к публикации в журнале... При определенной последовательности действий игра загружала второй уровень с текстурами и врагами из первого=)

Сохраняемся на втором уровне — Умираем — Игра загружает первый уровень — Загружаем сейв — Игра загружает второй уровень — Сохраняемся заново — Умираем второй раз — Игра загружает первый уровень — Загружаем сейв. Поздравляю, вы сломали сейвы.

Дело в том, что при переходе с уровня на уровень и при их загрузке в памяти сохраняется указатель на название этого уровня, но не при загрузке сейвов.

Когда сейв загружается с дискеты, он проверяет указатель с сейв-файла на соответствие указателю в памяти.
Если указатели разные, то игра сперва загружает нужный уровень полностью. Если одинаковые, то загружаются только измененные данные.

Так вот, если умереть в первый раз на втором уровне в память кладется указатель на первый уровень. Если при этом загрузить сейв со вторым уровнем, то в память указатель на него не отправится.
А после очередного сохранения возникает несоответствие: в сейв-файле оказываются данные второго уровня с указателем на первый.

В общем, все решилось банально. Теперь я просто при каждой загрузке сейва принудительно кладу в память указатель на него из сейв-файла.
И вроде это заработало... надеюсь.