(бухай): программируй
148 subscribers
465 photos
96 videos
3 files
65 links
Мысли, дегустация и код
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Написал более красивый шахматный паттерн для гашения экрана.
Это мне больше нравится, и возникла одна идея.

Сделать под каждую шахматную последовательность разные звуки как в играх Лукаса Поупа. А у него очень хорошо получаются резкие звуки в привязке к какому-то действию.

А проблема с таймером решилась очень просто. Оказалось, что это я очень тупил, потому что функцию fade_out вызывал в дебаггере. И я мог вызвать функцию, когда процессор выполняет какую-нибудь из системных функций и при этом выключает прерывания. Логично, что все при этом перестает работать.

Если встроить код в стандартный процесс (в моем случае я поместил ее на кнопку Save), то все работает нормально=)
❤‍🔥5🔥5
За эту неделю сделал очень много, хотя пунктов будет всего 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