(бухай): программируй
148 subscribers
465 photos
96 videos
3 files
65 links
Мысли, дегустация и код
Download Telegram
А вообще возникла такая идея.
У игрока будет всего 4 возможных варианта в бою (не считая аптечки и брони):
— Атака - обычная атака;
— Защита - defence * 2;
— Уклонение - dexterity * 2;
— Побег - dexterity / 2;

А вот с врагами интереснее!
Будет три типа атаки:
— Обычная атака;
— Усиленная атака - attack * 2
— Хитрая атака - accuracy * 2
И также будут уклонение и защита, как и у игрока.

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

Хочется уже показать что-то кроме сплошных формул, но пока на экране ничего не происходит=(
❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Немного помучился вчера с боями и теперь есть, что показать=)

Пока работают только 3 кнопки: атака, защита и уклонение.
— При атаке урон высчитывается по уже известной формуле. При этом, 25% урона всегда идет на броню, а остаток на здоровье. Если урон броне перевалил за количество брони, то остаток урона прибавляется к урону здоровья. Возможно над этим надо еще подумать.
— При нажатии на "Защиту", показатель defence умножается на 2.
— Аналогично с "Уклонением". Но на 2 умножается dexterity.
— После хода игрока все показатели врага сбрасываются до дефолтных значений и vice versa.

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

Когда-нибудь это закончится, а то 14 мая будет уже ровно полгода, как мне в голову пришла идея снова заняться игрой на коммодор...
🔥5❤‍🔥2
https://youtu.be/LnzuMJLZRdU?si=S59nYuS6Pftfr8tw

Офигенная серия видео. Мужик на макетной плате собирает компьютер на базе процессора 6502 и тут же программирует его.

После этого видео захотелось тоже чем-то таким заняться, но с чего начать, не могу сообразить.

Погуглил, оказывается, есть куча современных микропроцессоров, да и 6502 все еще производят (точнее 65С02). Но как к этому подступиться, пока не понимаю)
❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Не так давно я начал заниматься ролевой системой и уже добавил проверку на попадание и расчет урона.
И это все хорошо, но у меня даже изображений врагов нет, как и других изображений, потому что их было сложно рисовать.

Один игровой спрайт в моей игре состоит из 4 хардварных спрайтов. Я сперва рисовал игровые спрайты в Aseprite (двойные пиксели трудно рисовать), а потом переносил вручную изображение в редактор спрайтов для Commodore, где рисовал их уже по отдельности (и это очень неудобно).

Поэтому я не придумал ничего лучше, чем создать собственный редактор спрайтов исключительно для своей игры. Это очень сырая версия, которую потом я конечно же доработаю (нет). Осталось добавить только функции для сохранения изображений в json, png и asm.

А писал я кстати на Godot. Обожаю этот движок за то, что на нем можно спроектировать все что угодно за день-два.

Редактор поддерживает все возможности Commodore:
Во-первых, можно отдельно отключить сетку для каждого пикселя и сетку для каждого спрайта.
Во-вторых, можно выбрать цвет для каждого спрайта и два цвета, общих для всех спрайтов.
В-третьих, можно выбрать, каким из цветов рисовать конкретный пиксель (или стереть его)
В-четвертых, все это работает в 60 FPS.

Короче, как допишу сохранение и загрузку, станет намного проще.

А то, как я реализовал в итоге шанс попадания по врагу в игре потом покажу)
🔥5❤‍🔥1
Короче повозился я с этой программой, а все потому что ассемблер приучил меня все усложнять ради производительности. В Godot импорт изображений в рантайме осуществляется одной строкой, а я написал аж 4. Из-за этого, после экспорта в .exe, она перестала работать нормально (уже починил).

Но рисовать спрайты реально стало удобнее. Теперь не приходится подгонять пиксели под сетку 2*1, а потом переносить каждый спрайт по отдельности в другой редактор.

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

Вот, нарисовал кривую собаку) В редакторе выглядит ну... нормально, а в самой игре ИМХО хуже.

Хотя и в этом есть вайб 80-х. Там и не таких уродцев можно было встретить=)
👍4❤‍🔥1
А вообще жесть. Я тут посчитал, что раз у меня на каждый уровень уникальные текстуры стен и спрайты врагов и объектов, то получается, что мне надо нарисовать:
— 16 * 10 уровней = 160 текстур;
— 4 * 10 = 40 врагов;
— 4 * 10 = 40 объектов;
Итого 240 изображений.
Кажется, что я буду использовать уже имеющиеся текстуры на других уровнях, но менять окраску (как в Doom RPG), и это должно сработать.

Немного цветовой магии, и вот обычная собака превращается в посланника ада (нет)

В общем, это можно использовать)
😁3❤‍🔥2👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Почти дописал боевую систему!!!
Правда не очень понятно, насколько она вышла адекватной. Надо тестировать. А еще обязательно надо будет проверить пошагово на правильность кода. Визуально он вроде работает, но где-нибудь могла закрасться ошибка.
А еще надо бы как-то показывать на экране, чей ход. Сейчас, в принципе, это видно по тексту, но хотелось бы более понятный индикатор.

Когда враг планирует сильную или хитрую атаку, это отображается на экране. При этом игроку надо угадать, что делать дальше: защищаться или уклоняться. Ну и после каждого хода врага есть задержка в 2 секунды, чтобы игрок успевал прочитать текст. Да, вроде кривого кода дофига с кучей деления и умножения, но отрабатывает моментально.

Ну и последнее. Я решил пойти по простому пути в части поведения врагов. У каждого врага будет тип (или характер). Будут тупые или аккуратные враги, которые только атакуют и/или защищаются. Будут враги-маньяки, которые будут чаще бить усиленными атаками и т.д. Все паттерны поведения будут храниться в таблице
👍2🔥2❤‍🔥1
И тут я подумал, что неплохо было бы на экране как-нибудь визуально отображать попадания и промахи.

Например, при попадании в игрока можно быстро переключать цвета рамки экрана.
А при попадании во врага с помощью XOR переключать цвета спрайта.

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

И конечно, на все это надо наложить какие-нибудь звуки, а это вообще моя больная тема 😢
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤‍🔥2
Нашел на даче старый телевизор, Panasonic со встроенным кассетоприемником )

И Atari все таки предназначено именно для таких теликов. Изображение офигенное
🔥10❤‍🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Помучился с прерываниями, но засунул еще два для визуализации попаданий и промахов.

А помогло то, что я написал собственную функцию выхода из прерывания, которая намного короче, чем системная.

Первое прерывание моргает рамкой двумя цветами. Решил, что синий и голубой цвета будут означать, что игрок промахнулся.

Для прерывания можно настроить два цвета и задержку между из переключениями.

На видео цвета меняются каждые 8 кадров в течение ≈ 2.5 секунд.
🔥2❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
С врагами примерно также, но так как у спрайтов 2 цвета общих и 4 уникальных, менять можно все шесть.

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

На этом спрайте мерцание выглядит неплохо, но на спрайте собаки совсем криво
👍2❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Который день борюсь с созданием fade out заставки. Самой заставки еще нет, поэтому экспериментирую на основном экране=)

Получается криво, и я точно буду искать другой паттерн. Но не в этом главная проблема.
На видео функция отработала нормально, но так происходит не всегда.

Я добавил в цикл две задержки, каждая по 5 кадров. Да, это очень банальное решение.

Я помещаю в переменную timer_delay значение от 0 до 255 (от 0 до +- 5 секунд). Процессор в очередном прерывании считывает эту переменную, и если она не равна нулю, уменьшает значение на 1.

А в самой функции я просто жду:
        ; wait several moments        
lda #5
sta timer_delay
@delay_1
lda timer_delay
bne @delay_1


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

При этом я не могу в отладчике поймать момент, когда все начинает ломаться. Видимо пришла пора воспользоваться записью процесса в VICE.
❤‍🔥1
Кстати, у меня часто встречается вот такой косяк с цветами на экране, когда я использую дебаггер.

Как я давно выяснил, это не проблема. Просто C64 Debugger при загрузке игры пишет в текстовой области памяти то, что на второй картинке.

А так как в bitmap multicolor режиме текстовая область используется как хранилище цветов для каждого знакоместа, то и получается вот такая фигня.

В VICE и на оригинальном железе такой проблемы нет, к счастью=)
❤‍🔥1
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