(бухай): программируй
148 subscribers
465 photos
96 videos
3 files
65 links
Мысли, дегустация и код
Download Telegram
За эту неделю сделал очень много, хотя пунктов будет всего 3.

Самое главное:
Почти готовы сражения. Теперь мерцает и рамка и враг (синий/голубой - промах, красный/желтый - попадание).
При победе игрока высчитывается количество опыта, информация выводится на экран, а рамка мерцает зелеными цветами.

Заставка:
Теперь при загрузке игры отображается не игровой экран, а заставка (пока что только тестовая😂), а текстовая зона переключается между двумя состояниями. при выходе из заставки она делает Fade-out и начинается загрузка игры.

Доработки:
Во-первых, я освободил больше 1 Кб памяти, потому что нашел пространство, которое вообще не использовалось игрой.
Во-вторых, перерисовал ключ, покрасил в разные цвета индикаторы здоровья и брони игрока и переделал компас.
В-третьих, переписал некоторые функции, которые почему-то занимали очень много места.

По-хорошему, надо доделать наконец функции смерти и побега от врага. Тогда можно будет приступать к рисованию уровней и графики.
Сохранение и загрузку начну делать позже, пока не очень понимаю, как это должно выглядеть=(
🔥5❤‍🔥2
В общем, я начал активно заниматься созданием уровней. И первым делом полностью перерисовал первый уровень.
Потратил 60 триггеров из 96 возможных на всякие важные штуки вроде дверей, ключей и сюжетного текста.
На уровень я хочу добавить всякие предметы, типа аптечек, оружия и патронов. Учитывая, что на один предмет мне нужно по 2 или 3 триггера, то выходит 18 или 12 предметов на уровень. Думаю, этого хватит.

Еще я подумал, что вместо ключей можно использовать любой другой предмет. Поэтому на первом уровне одну дверь можно открыть только монтировкой, которую можно найти по сюжету. Даже сюжетный текст под это дело написал. Работает она точно также как ключ, даже иконка появляется.

Еще пока что на уровне 7 спрайтов-объектов из 32 возможных, но потом их станет больше. Это и ключи, и компьютеры с сюжетной информацией и монтировка.

Еще в планах дорисовать двух врагов (и определить их параметры) и какие-нибудь новые объекты (есть еще два свободных места). Ну и уровень можно считать готовым.

P.S. А еще я сделал явную отсылку на Heretic=)
🔥6❤‍🔥2
Media is too big
VIEW IN TELEGRAM
Уже довольно длинный видеотчет на реальном железе.
Даже немного порезал его, чтобы совсем не было скучно=)

Вообще, самая большая проблема в том, что я начал этот проект, не зная практически ничего про Commodore. Изучал все по ходу, и многие критичные вещи (типа рендеринга графики), можно было бы переписать. Но, если честно, уже не очень хочется этим заниматься. И так все очень затянулось, как я думаю.

Но все работает! И это, я считаю, главное.
🔥4❤‍🔥1
Пытался нарисовать военного, а вышло что-то среднее между гопником и персонажем из Cyberpunk 2077😂

Ограничение цветов конечно сказывается...
👍3😁3❤‍🔥1
Система уровней в Doom RPG конечно хорошая, но оказалось, что и подходит она только для Doom RPG.
Поэтому я решил переписать две функции.

Начну с получения опыта при победе.
В Doom RPG результат рассчитывается исходя только из характеристик врага. Таким образом, даже на высоких уровнях все зависело не от того, насколько ты сильнее или слабее врага, а только от самого врага. И это совершенно не работает в моей игре.
Поэтому я решил высчитывать полученный XP исходя из соотношения параметров врага к параметрам игрока. Получилась такая формула:
exp = ((e_attack<<8 / p_attack) + (e_defence<<8 / p_defence) + (e_dexterity<<8 / p_dexterity) + (e_accuracy<<8 / p_accuracy))/60

Теперь, если враг сильный, и у игрока каким-то образом получилось его победить, то игрок получает большое количество опыта. И наоборот, за слабых врагов игрок будет получать всего ничего. При этом, если грамотно подойти к расстановке врагов на уровнях (ха-ха), то игрок будет всегда получать примерно одинаковое количество опыта. Такой вот автолевелинг 80-х😂

И мы переходим ко второй проблеме.
Повышение границы необходимого опыта при повышении уровня.
В Doom RPG каждый уровень граница опыта просто увеличивается на 20. Там это работало. В моей игре не работает совсем. Поэтому я написал такую формулу:
next_exp = current_exp + level * 5 + 160

Таким образом, каждый уровень необходимое количество опыта растет в геометрической прогрессии. Если взять предыдущую формулу, то за одного врага (если он примерно равен по силе игроку) дается +/-16 опыта. То есть на первом уровне игроку надо убить 10 врагов, а вот на 99-ом уже 40. Это не учитывая очень сильных и очень слабых противников.

Ну и наконец, я перерисовал предыдущего противника и нарисовал еще одного.
Перерисовать пришлось, потому что на первом уровне много зеленых стен и Человек-Х с ними тупо сливается🤦‍♂️
🔥4❤‍🔥2
https://www.youtube.com/watch?v=DZgFafrS85s&t=801s

Увидел вот такое видео про Commodore и решил проверить сам, как это работает.
И это работает. Если забить в адрес 788 значение 82, то можно рисовать курсором.

А почему это работает.
Потому что 722 в шестнадцатеричной системе это $0314.
И это адрес нижнего байта вектора прерывания.
То есть, записывая в этот адрес новое значение мы немного смещаем вектор, и компьютер не выполняет несколько значимых вещей. Например, обновление таймера и моргание курсором.

Это реально круто, потому что у меня значительная части игры строится на прерываниях. За счет этого в нижней части экрана отображается текст, который просто изменять. За счет этого моргают враги при атаке. А еще параллельно работают два таймера, которые я запускаю при необходимости сделать какую-либо задержку=)
❤‍🔥4👍2
Нарисовал пару новых спрайтов для окружения уровня, и на этом доступные спрайты закончились.
Ну и вот, как выглядят новые враги первого уровня в самой игре. Доступные враги тоже кстати закончились.

Осталось прописать им адекватные параметры и поведение.

А еще починил скрипт повышения уровня. Оказалось, что неправильно проводилось сравнение 16-ти битных чисел (текущий опыт и необходимый опыт), поэтому уровни повышались после каждого убитого врага=)
🔥5❤‍🔥4👍3
Я тут ненадолго пропал.
А все дело в том, что неделю назад я женился, и потом мы отправились в свадебное путешествие :)

Но работа не спит, и хоть редко, но я пытаюсь возвращаться к игре.

Сейчас прописываю функцию для случая смерти игрока. Оказалось, что просто так я не отделаюсь. Нужно написать еще функцию для сброса параметров игрока до стартовых, иначе при смерти у игрока остаются все собранное оружие и все полученные статы.

И я все еще не знаю, как сделать сохранение и загрузку прогресса. Вроде звучит не очень сложно, но все значимые параметры лежат в разных местах. То есть придется делать несколько файлов на дискете и несколько загрузок... Но я еще подумаю
💘10🔥4❤‍🔥3
UPD.
У меня осталось чуть больше 16 Кб памяти. В это, мне кажется, еще можно кучу всего запихнуть. Но я решил остановиться на том, что есть. То есть, если новые механики и будут появляться, то редко и в меньших количествах. Точно будут дорабатываться триггеры по ходу рисования уровней. Как минимум недавно пришлось добавить два новых триггера: добавление аптечки и добавление арморкита.

Исходя из этого скорее всего придется перерабатывать карту памяти игры. Сейчас все важные функции лежат с адреса $0810 по $1fff (основной цикл, основные функции, прерывания, рендер, триггеры и управление). Там у меня осталось меньше килобайта свободной памяти.
Потом экранная память аж 6 Кб
Потом лежат таблицы для рейкастинга и текстур, буферы и данные уровня.
А уже потом прочие игровые данные и функции.

А еще же куда-то надо музыку со звуками засунуть...
❤‍🔥1
Forwarded from /g/'s Tech Memes (damir)
🔥6😁2❤‍🔥1
Надо бы делать игру, но я тут наткнулся на охренную RPG. Второй день не могу оторваться.
Называется Dread Delusion.
https://store.steampowered.com/app/1574240?snr=5000_5100___primarylinks

Я даже не буду говорить о том, как она выглядит. Графика огонь, привет PS1. На мой взгляд по атмосфере напоминает что-то среднее между Morrowind и старыми Thief. Но даже не в этом дело.

Я такого интересного лора не видел давно. Это насколько надо было упороться, чтобы такое придумать. При этом все выглядит логично и не вызывает вопросов, как в какой-нибудь Dark Souls. Тут куча хорошо прописанных диалогов, есть и книги, да и сам мир многое может о себе рассказать. А почти все квесты несут в себе какую-либо мораль, при этом она не всегда правильная, какой бы вариант ты не выбрал.

А еще мне очень понравилось, что здесь никто не ведет тебя за ручку. В начале у тебя даже карты и компаса нет, а открытие карты - один из квестов. В конце-концов ты приобретаешь компас, и с ним ориентироваться становится проще. Благо, что отдельные зоны не такие большие. Сложность вызывает только то, что все действие происходит на куче островов, висящих в воздухе.

Из минусов разве что слабая боевая система и не очень интересная прокачка. Я создал мужицкого-мужика воина, а спустя 8 часов он уже умеет взламывать замки и даже кастовать заклинания. Из-за этого игра вообще не сложная. Но на фоне такой крутой атмосферы и лора это вообще можно не замечать.
4❤‍🔥1
Наконец-то настало время заняться игрой=)
Ну и я сделал две очень важные вещи.
Во-первых, прописал код для death state в случае смерти игрока.
Пришлось немного помучиться, потому что код изначально не предполагал сброс всех характеристик до изначального уровня. Теперь все мигает красно-красным и уходит в реинициализацию игры.

Во-вторых, наконец-то дорисовал все оружие и переделал гвоздомёт (хотя и это не окончательный вариант). И решил, что неплохо было бы добавить больше деталей на окантовку игрового экрана. Ничего лучше трещин, потертостей и сколов я не придумал. Но выглядит, вроде, неплохо

Теперь всю эту графику надо перенести в игру, а потом уже заняться созданием уровней.

Ну и код для побега из битвы все еще не написан...
🔥53💘2