9 месяцев vs. несколько часов😂
А на самом деле я просто решил отвлечься от ассемблера и покодить на чем-то более человечном, поэтому запустил Godot.
И я не придумал ничего лучше, чем перенести свою игру на современное железо.
Конечно, оригинал в приоритете, а это я просто поразвлекался, но результат мне очень даже нравится.
Поэтому появилась мысль портировать игру, когда закончу разработку.
Процесс это не очень сложный, поэтому почему бы и нет=)
А сделал я это все в 3D. Просто перенес всю карту по блокам и уменьшил разрешение до 320*200 пикселей. Ну а все алгоритмы у меня уже есть, и переписать их на GDScript вообще ничего не стоит.
А на самом деле я просто решил отвлечься от ассемблера и покодить на чем-то более человечном, поэтому запустил Godot.
И я не придумал ничего лучше, чем перенести свою игру на современное железо.
Конечно, оригинал в приоритете, а это я просто поразвлекался, но результат мне очень даже нравится.
Поэтому появилась мысль портировать игру, когда закончу разработку.
Процесс это не очень сложный, поэтому почему бы и нет=)
А сделал я это все в 3D. Просто перенес всю карту по блокам и уменьшил разрешение до 320*200 пикселей. Ну а все алгоритмы у меня уже есть, и переписать их на GDScript вообще ничего не стоит.
🔥6❤🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Наконец-то добавил функцию побега из битвы. Она слишком уж банальная, но мне кажется большего не надо.
Вероятность побега составляет 1/3. По сути, сбежать можно в любой момент, но смысла в этом особо нет, только если это не последний шанс уцелеть в битве.
Если постоянно убегать, не будут копиться опыт и уровни, и на следующих картах игрок будет страдать.
Вероятность побега составляет 1/3. По сути, сбежать можно в любой момент, но смысла в этом особо нет, только если это не последний шанс уцелеть в битве.
Если постоянно убегать, не будут копиться опыт и уровни, и на следующих картах игрок будет страдать.
🔥3
Выставил на всеобщее обозрение демо-версию игры. В ней доступен только первый уровень, и его можно полностью пройти. Для этого потребуется эмулятор, желательно Vice, а инструкция есть по ссылке.
Вообще я оценил текущее состояние игры и, на самом деле, я сделал уже даже больше задуманного минимума. Теперь остается только рисовать, рисовать и ещё рисовать. И карты делать. И звуки с музыкой (спасите).
Если и возвращаться к коду, то для исправления багов и каких-нибудь новых фишек, которые я возможно придумаю:)
https://alexlogachev.itch.io/commodore-64-dungeon-crawler-prototype
Вообще я оценил текущее состояние игры и, на самом деле, я сделал уже даже больше задуманного минимума. Теперь остается только рисовать, рисовать и ещё рисовать. И карты делать. И звуки с музыкой (спасите).
Если и возвращаться к коду, то для исправления багов и каких-нибудь новых фишек, которые я возможно придумаю:)
https://alexlogachev.itch.io/commodore-64-dungeon-crawler-prototype
itch.io
Decade of Ruin (C64) by Alex Logachev
Pseudo 3D raycasting Dungeon Crawer for the famous Commodore 64
👍8❤🔥2
https://dtf.ru/retro/2893361-devyat-mesyacev-assemblera-ili-kak-ya-vse-eshe-pishu-igru-na-commodore-64
Написал небольшую статью про текущий прогресс. Но это не главное.
Я осознал, что надо добавить в игру боссов, от которых нельзя убежать.
Сейчас в игре есть возможность сбежать с поля боя с вероятностью в 1/3. Но если постоянно сбегать, то на следующих уровнях игрок будет страдать.
Но я подумал, а что если игрок будет вообще всегда сбегать, и таким образом пройдет игру. Для такого и надо добавить боссов, чтобы к определенному моменту, если игрок не накопил нужное количество опыта и уровней, то он банально не сможет пройти игру.
Одна проблема - боссов надо добавлять не в данные карты, в основной код. Например, добавить новый триггер, который переносит игрока на арену с единственным боссом. Тогда и спрайты боссов придется зашивать в код.
В общем, пока думаю над этим=)
Написал небольшую статью про текущий прогресс. Но это не главное.
Я осознал, что надо добавить в игру боссов, от которых нельзя убежать.
Сейчас в игре есть возможность сбежать с поля боя с вероятностью в 1/3. Но если постоянно сбегать, то на следующих уровнях игрок будет страдать.
Но я подумал, а что если игрок будет вообще всегда сбегать, и таким образом пройдет игру. Для такого и надо добавить боссов, чтобы к определенному моменту, если игрок не накопил нужное количество опыта и уровней, то он банально не сможет пройти игру.
Одна проблема - боссов надо добавлять не в данные карты, в основной код. Например, добавить новый триггер, который переносит игрока на арену с единственным боссом. Тогда и спрайты боссов придется зашивать в код.
В общем, пока думаю над этим=)
DTF
Девять месяцев ассемблера или как я все еще пишу игру на Commodore 64... — Ретро на DTF
👍7
This media is not supported in your browser
VIEW IN TELEGRAM
К вопросу о боссах.
Был выбор между двумя костылями.
Первый костыль
Зашить код и данные боссов прямиком в код игры. Оказалось, что это не очень выгодно. На дискете данные врагов каждого уровня у меня лежат в формате, который нельзя было бы использовать для боссов. Это потребовало бы копирования некоторых функций с чуть измененным функционалом. А еще 512 байт на изображения и 36 байт на параметры, не считая таблицы указателей.
Я решил не идти этим путем.
Второй костыль
Использовать уже имеющихся на дискете врагов в качестве боссов. У каждого врага есть тип (от 0 до 15). Соответственно, верхние 4 бита не используются.
Я использовал 7-ой бит для обозначения, что враг является боссом.
Также я добавил проверку на этот бит при случайном выборе врага. Если бит включён, то такой враг не встретится игроку при прохождении уровня.
Потом пришлось ввести еще одну переменную, которая отвечает за состояние битвы с боссом. Если переменная больше нуля, то в цикле проверяется, какой из 4-ех врагов является боссом, и битва начинается. То есть на весь уровень может быть только один уникальный босс.
В итоге все это вышло довольно костыльно, но зато заняло всего пару десятков байт.
Два отличия от битвы с обычным врагом:
– В начале битвы пишется сообщение "Boss fight!".
– Кнопка Flee не работает. По сути, всегда пишется сообщение, что побег не удался. Ради этого все и затевалось. Теперь игрок не сможет постоянно бегать от врагов, иначе в какой-то момент он будет страдать на боссе.
В общем, я планирую сделать два-три уровня с боссами. На 8-10 планируемых уровней, думаю, достаточно.
P.S. Сейчас у меня на каждый уровень есть 24 текстовых блока по 96 символов. Итого 2304 байта. Но, как показала практика, уже два уровня я использую не более 10 блоков. То есть, теоретически, можно сократить количество текста на уровень, и запихнуть больше уровней на дискету:)
Был выбор между двумя костылями.
Первый костыль
Зашить код и данные боссов прямиком в код игры. Оказалось, что это не очень выгодно. На дискете данные врагов каждого уровня у меня лежат в формате, который нельзя было бы использовать для боссов. Это потребовало бы копирования некоторых функций с чуть измененным функционалом. А еще 512 байт на изображения и 36 байт на параметры, не считая таблицы указателей.
Я решил не идти этим путем.
Второй костыль
Использовать уже имеющихся на дискете врагов в качестве боссов. У каждого врага есть тип (от 0 до 15). Соответственно, верхние 4 бита не используются.
Я использовал 7-ой бит для обозначения, что враг является боссом.
Также я добавил проверку на этот бит при случайном выборе врага. Если бит включён, то такой враг не встретится игроку при прохождении уровня.
Потом пришлось ввести еще одну переменную, которая отвечает за состояние битвы с боссом. Если переменная больше нуля, то в цикле проверяется, какой из 4-ех врагов является боссом, и битва начинается. То есть на весь уровень может быть только один уникальный босс.
В итоге все это вышло довольно костыльно, но зато заняло всего пару десятков байт.
prepare_fight_state
; прверка на сражение с боссом
lda boss_state
beq @regular_enemy
; ищем босса в списке врагов
ldx #0
@find_boss_loop
lda enemy_types,x
and #%10000000
bne @boss_found
inx
jmp @find_boss_loop
@regular_enemy
; случайный враг из 4
jsr get_random_number
lda rnd_1
ldy #4
jsr mod
tax
; проверяем врага на флаг босса
lda enemy_types,x
and #%10000000
bne @next_try
@boss_found
jsr prepare_enemy_for_fight
inc game_state
@next_try
jmp main_loop
Два отличия от битвы с обычным врагом:
– В начале битвы пишется сообщение "Boss fight!".
– Кнопка Flee не работает. По сути, всегда пишется сообщение, что побег не удался. Ради этого все и затевалось. Теперь игрок не сможет постоянно бегать от врагов, иначе в какой-то момент он будет страдать на боссе.
В общем, я планирую сделать два-три уровня с боссами. На 8-10 планируемых уровней, думаю, достаточно.
P.S. Сейчас у меня на каждый уровень есть 24 текстовых блока по 96 символов. Итого 2304 байта. Но, как показала практика, уже два уровня я использую не более 10 блоков. То есть, теоретически, можно сократить количество текста на уровень, и запихнуть больше уровней на дискету:)
🔥4❤1
Нарисовал текстуры для третьего уровня. Это будет довольно темный уровень к кучей ответвлений. И еще есть желание сделать двери, которые ведут сперва в одно место, а потом в другое. Движок такое позволяет.
А ещё вчера с другом тестировали игру. Посмотрел я на все это и понял, что надо бы чуть упростить. Игра как будто бы получается довольно линейной без возможности нормального исследования уровня, пока игрок не прокачается.
Буду думать, как это проблему решить:)
А ещё вчера с другом тестировали игру. Посмотрел я на все это и понял, что надо бы чуть упростить. Игра как будто бы получается довольно линейной без возможности нормального исследования уровня, пока игрок не прокачается.
Буду думать, как это проблему решить:)
👍2🔥2
Ну, это было не сложно )
Детали крепятся хорошо, ничего не разваливается.
Но...
Буква B на джойстиках перевернутая. Причем на обоих. То есть они обе детали сделали одинаковыми, и обе кверху ногами. Конечно издалека это не заметно, но картину все таки портит :(
Детали крепятся хорошо, ничего не разваливается.
Но...
Буква B на джойстиках перевернутая. Причем на обоих. То есть они обе детали сделали одинаковыми, и обе кверху ногами. Конечно издалека это не заметно, но картину все таки портит :(
❤🔥3😱2
И я не мог не написать небольшой обзор)
https://dtf.ru/u/34713-aleksandr-logachev/2918735-obzor-jaki-maker-pop-sobiraem-kitaiskii-famicom
https://dtf.ru/u/34713-aleksandr-logachev/2918735-obzor-jaki-maker-pop-sobiraem-kitaiskii-famicom
DTF
Обзор JAKI Maker POP - собираем китайский Famicom. — Александр Логачев на DTF
Гулял я тут по торговому центру, и черт дернул зайти в магазин Lego. Конечно, купить Lego сейчас может себе позволить только олигарх, но друзья-китайцы не отстают и предлагают свои варианты, которые еще и стоят в 10 раз дешевле.
❤🔥2
У меня тут небольшой отдых от игры. Уже неделю толком ничего не делаю. Из последнего - начал заниматься звуком и даже написал разные звуки для оружия, но не уверен, что буду их использовать. Хочу пойти немного другим путем и сделать просто звуки попадания и промаха.
А пока я не программирую игру, пытаюсь ломать j2me игры. И это выходит с переменным успехом.
Сперва я покусился на игры от Gameloft и потерпел фиаско. Хотел вытащить спрайты из Prince of Persia: Warrior Within, декомпилировал код, но там довольно сложная система архивации на сотню строк. Надо разбираться.
Зато Bobby Carrot зашел замечательно. Спрайты там даже не архивированы, а уровни можно изменять прямо в HEX-редакторе. Вот сделал самый легкий уровень на основе первого :)
А пока я не программирую игру, пытаюсь ломать j2me игры. И это выходит с переменным успехом.
Сперва я покусился на игры от Gameloft и потерпел фиаско. Хотел вытащить спрайты из Prince of Persia: Warrior Within, декомпилировал код, но там довольно сложная система архивации на сотню строк. Надо разбираться.
Зато Bobby Carrot зашел замечательно. Спрайты там даже не архивированы, а уровни можно изменять прямо в HEX-редакторе. Вот сделал самый легкий уровень на основе первого :)
❤🔥2
Все таки ассемблер периодически начинает надоедать, поэтому решил продолжить писать порт игры под винду с блэкджеком и увеличенными дальностью прорисовки и разрешением.
Уже перенес первый уровень, почти все триггеры и оружие. И как же странно программировать классами... В оригинале я почти об этом не думал. Конечно, разбивать разную функциональность на блоки надо, но куда важнее сохранить десятки, а то и сотни лишних байт. Поэтому никакого ООП в оригинальном коде, лишь жесткие обращения к нужным байтам.
Уже перенес первый уровень, почти все триггеры и оружие. И как же странно программировать классами... В оригинале я почти об этом не думал. Конечно, разбивать разную функциональность на блоки надо, но куда важнее сохранить десятки, а то и сотни лишних байт. Поэтому никакого ООП в оригинальном коде, лишь жесткие обращения к нужным байтам.
👌1
А вообще возник вопрос. Стоит ли повышать дальность отрисовки?
Оригинал рисует только первые три блока перед игроком, и за счет этого ты никогда не знаешь, какие предметы попадутся тебе на пути.
Тут же всю карту видно и все предметы. Кажется, что из-за этого теряется интерес к исследованию уровней.
Оригинал рисует только первые три блока перед игроком, и за счет этого ты никогда не знаешь, какие предметы попадутся тебе на пути.
Тут же всю карту видно и все предметы. Кажется, что из-за этого теряется интерес к исследованию уровней.
❤1👌1
Стоит ли оставить дальность прорисовки мира, как в оригинале?
Anonymous Poll
70%
Оставляй! Олдскул наше все.
30%
Конечно нет. Мы что, не в 21 веке живем?