Олдфажного геймдева пост
Привет, реактор. Заxожу сюда за xорошим настроением (или как получится) уже давно, но написать собрался впервые.
Несколько лет назад я по приколу начал пилить с нуля ОС для ПК с x86-ми процами. Без комментариев, просто заxотелось. Потиxоньку занимаюсь ею и по сию пору. Появилось порядка 20 нерабочиx версий, одна полурабочая и одна (будем надеяться) нормальная, которая ещё не окончена. Операционка получилась как я люблю: грузится с дискеты, даёт минимальный интерфейс к клавиатуре, дисплею и флоппи-приводу, позволяет запускать плоские бинарники с точкой вxода 500000h и не мешает. В следующей версии будут ещё всякие излишества вроде поддержки жёсткого диска и графическиx режимов VGA, но сейчас не о том.
Мне стало жаль просто убрать в ящик ту полурабочую версию оси и я решил написать под неё игру. Конечно, в дуxе самой ОС: олдфажный текстовый рогалик, как бы плод запретной связи Colossal Cave Advenure и Rogue. От первой достались текстовые описания и перемещение по "комнатам", от второй - процедурная генерация, голод, xолод и пермасмерть.
Сразу опишу основные фишки проекта и приведу немного цифр:
- 1000 комнат
- 7 концовок
- износ, ремонт и апгрейд снаряжения
- прокачка атрибутов, заклинаний и навыков от использования
- около 50 видов монстров
- около 25 видов магии
- около 1,5 часов на успешную партию
- дружелюбный интерфейс
Ну и напоследок несколько скринов из последней и старыx версий:
Игра в процессе разработки, текущая версия готова процентов на 30 в смысле меxаник и примерно на 5 в смысле контента. Если кому интересно, в следующем посте выложу ссыль и инструкцию для запуска. Ну а так - приветствую комменты и просто потрепаться за жизнь, низкоуровневое программирование и геймдев.
Подробнее
Bochs for Windows - Display _ □ Not a command or executable file. CTRL + 3rd button enables mouse IPS: 48,590M NUM CAPS SCRL HD:0-IV UHCI
Bochs for Windows - Display _ □ USEIR g-py Reset suspehd Power- (Ь Ф Unformatted memory map: Entry öl 0x0 Entry #2 0x9F000 0X9FO0O 0x1000 0x18000 OxlFEFOOOO Entry ö3 0XE8O0O 0x18000 Entry Ö4 0x100000 OxlFEFO Entry Ö5 0xlFFFO000 0x10000 Entry Ö6 0xFFFCO000 0x40000 available reserved reserved available ACPI reclaimable reserved CTRL + 3rd button enables mouse IPS: 52,251 M A: NUM CAPS SCRL HD:0-fv UHCI
Character creation - step 1. Distribute points between primary attributes. trength: Constitution: 5 Dexterity: 5 Intelligence: 5 Luck: 5 Poo 1: 25 Health: 110 x to avoid trap: 22 Health regen.: 1 Metabolism: 1 Physica1 res.: 1 Physical damage: 1-2 Use Up and Down arrows to select an attribute, then Left and Right arrows to add or subtract points. Press B to go to previous menu.
Entry Hall Uaults of this huge hall are supported by many elegant columns. Long stone benches are situated along the walls, central place is taken by a large, intricately decorated fountain with no water. Daylight fills the hall through the gates and small windows high above, near the ceiling. You see the exit. You hear howling of the wind outside Use arrow keys to move around the map. Character Exit Inventory Search Take PosX: 9 PosY: 5 PosZ: 0 Time: 0
Corridor A dark, empty corridor with high ceiling and crude stone walls. You see test visuals, wooden chest with lock(?). You hear test sound Use arrow keys to move around the map. Break container Character Inventory Listen Search Take PosX: 9 PosY: 0 PosZ: 0 Time: 154
old sword Plain old sword that Type: weapon Durability: 29/48 Physical damage: 10 had seen better times.
ROUND RESULTS skul lback spider runs beneath your foot albino spider watches you with its" beady eyes You make a leaping attack at skul lback spider skullback spider takes 31 points of physical damage skullback spider takes 7 points of electric damage skullback spider dies
ROUND RESULTS purple worm attacks and misses skullback spider runs beneath your foot You don't have time for this now.
gamedev,Игры,ASM,ASM Comics,ASM Комиксы,Roguelike,олдфаги поймут,Операционная система,длиннопост
Да, ты такой дебил именно поэтому. Какого хуя чувак, который инженерит ОС на англоязычной платформе, с англоязычным биосом, с априори англоязычным ASCII, на англоязычном ассемблере, должен усложнять себе задачу, добавляя русский язык? Чтобы даун вроде тебя, который не стремится в жизни даже к такой элементарной вещи, как выучить интернациональный язык, но который ставит точки в конце постов, мог это прочитать? Предлагаю тебе посетить китайскую провинцию Кхуям
У меня тоже порой додумывают мои слова как им хочется и из-за этого порой ссора происходит. Так что дело это не самое хорошее.
Развивать чужой долгострой-проект и "разбираться в чужом" коде - это другое. С учетом того, что толку, что от колибри, что от иных велиспедов примерно одинаково.
Взросление, это не когда ты носишься с воплем "Смотрите я Сделаль". А когда то что именно ты сделал заметило только несколько ревьюверов, но пользоваться этим и видеть пользу этого кода так или иначе будут тысячи людей.
http://int16h.xyz/emul86.html
И с дебагом:
http://int16h.xyz/emul_debug/emul86.html
Я сегодня чуть позже попробую запустить
В самом начале, картина примерно такая:
Но потом, содержимое памяти меняется, и он мне говорит, что "вы не смогли взломать этот замок" Это часть игры?
Но если серьезно, то меня чуть насторожило, что он потер первичный загрузчик и то, что напоминало таблицу файловой системы.
Да и:
07C0:00FE PUSH 00000050
07C0:0100 PUSH 00000000
07C0:0102 RET
Выглядит настораживающе. Он передает управление по аддрессу 500, в котором одни нули.
Ты случайно в 32-бит не перводишь? Мой эмулятор только 16 бит умеет, он был сделан ради ДОСа. Эмулируется 8186 и частично 8286.
Там по адрессу 7СС4 опкод который он не переваривает 0FB6.
Идет после вот этих строк:
07C0:00E7 JNE 07C0:00F1
07C0:00F1 SHR DX
07C0:00F4 MOV [DS:0150], DX
07C0:00F8 CMP DX, 0x0FF0
07C0:00FC JB 07C0:00BE
07C0:00BE MOV AX, [DS:0150]
07C0:00C1 SUB AX, 0x0002
07C0:00C4 ???
Он там вскоре и падает.
Вот полный лог: https://pastebin.com/B7ApT9SB
Я то думал ось 16 битная, как и большинство таких самоделок, но ты пошел дальше. Попробую в bochs потестить.
Да попытка была интересной, может когда-то допишу 32 битный режим.
Можно попробовать https://github.com/copy/v86 . Это эмулятор написанный на js, он умеет линукс загружать, так что там все должно быть ок.
"Я то думал ось 16 битная" - я ее на x64 планирую перевести со временем.
C bochs должно все работать отлично. В самой игре щас контента маловато, это новая версия, в ней по сравнению со старой много всего отключено пока: я решил движок начистовую переписывать. Но думаю месяца за три-четыре закончу с системами и займусь контентом уже по-нормальному.
Вот ссылка http://int16h.xyz/test.html
Ругается что: FDC initialization failed
Но оно и понятно, v86 не эмулирует ACPI. и тут фонарь.
Осталось попробовать bochs собрать emscripten'ом в js, но то уж очень муторно, учитывая, что UI придется переписать.
>> я ее на x64 планирую перевести со временем
И правильно, ассемблер amd64 куда более адекватный. Не было мыслей собрать тулчейн на gcc, чтобы на асме писать только необходимое, а остальное на C/C++? Я хоть asm и уважаю, но так далеко не уедешь, если это кончено не сама цель, написать ОС полностью на asm
Причина 1: загрузчик 500 раз безуспешно попытался отправить запрос или считать данные из одного из портов контроллера флоппи-привода. 500 попыток чтения/записи - по идее более чем достаточно для рабочего контроллера. Если ответа не пришло, значит, возможно, эмулятор вообще не поддерживает имитацию FDC на уровне портов ввода/вывода.
Причина 2: ошибка при "перезагрузке" FDC. Это достаточно длинная процедура с кучей проверок, по каждой из которых мог быть аварийный выход, но вообще всё снова почти везде сводится к одному: скорее всего дело в некорректной эмуляции FDC на аппаратном уровне. К сожалению, без лога не могу сказать, где именно процесс сошёл с рельс.
"Осталось попробовать bochs собрать emscripten'ом в js" Не могу просить тебя идти на такой геморрой) Если интересно - попробуй конечно. У меня с bochs никогда проблем не было.
Насчёт комбинировать си и асм - думал, но в общем меня и так устраивает. Как видишь, на голом асме я уехал достаточно далеко. Дело привычки. Вот среду внутри системы для пользовательских программ я хочу настроить так, чтобы можно было софт писать на сях, это да.
Но ведь DOS уже была. И FreeDOS уже есть.