Разработка и ромхакинг > Разработка игр
[ZX Spectrum] Диктатор (политическая стратегия) - порт на NES (Famicom, Денди)
Arigato:
Диктатор 2.0
Вы являетесь диктатором Республики Ритимбания. В ваших руках вся полнота власти, вы вольны принимать любые решения. Правьте Республикой так, как считаете нужным. Вы можете заниматься как внутренними делами, так и внешней политикой. Однако помните, что от ваших решений зависит как судьба Республики, так ваша личная. Задача игры: продержаться на посту диктатора как можно дольше, вцепившись посиневшими пальцами в свое кресло. Однако ваш конец ничем не будет отличаться от конца любого другого диктатора...
За основу была взята русифицированная версия оригинальной игры "Диктатор", причем прямиком с магнитофонной кассеты. Надо так понимать, что русифицировал ее Н. Родионов, но копирайт не сохранился. Были исправлены баги игры, добавлены всевозможные улучшения и существенно расширен контент.
Изменения:
1. Добавлен выбор сложности игры (Легко, Нормально, Сложно). Нормально - как и было раньше.
2. Переработан движок, в результате чего добавление новых квестов стало проще.
3. Расширен контент более чем в два раза.
4. Новый блок решений - внешняя политика.
5. Исправлена серия ошибок оригинальной игры.
6. Можно получать ежемесячные доходы, а не только расходы (в оригинале доходы обнуляются).
7. Улучшения в интерфейсе.
Скриншоты:
В архиве из вложения образы для эмулятора.
Вариант сборки вместе с эмулятором (не требует отдельной установки эмулятора для игры, запустить start.cmd): https://yadi.sk/d/K1peCZ_MezSzo
Если эмулятор ZXMAK2 не запускается, то решение тут:
1. Возможно, потребуется установка Microsoft .NET Framework 2.0.
2. Установить DirectX 9 (замечу что DirectX 10/11 не включает в себя DirectX 9): http://www.microsoft.com/download/en/details.aspx?id=35
Guyver(X.B.M.):
Эх, я в детстве постоянно в неё рубился. Одна из самых моих любимых игр... Вот бы кто её на NES запилил...
Sharpnull:
--- Цитата: Guyver(X.B.M.) от 13 Май 2023, 02:06:04 ---Вот бы кто её на NES запилил
--- Конец цитаты ---
С исходным кодом это не должно быть проблемой, особенно, если писать на C. Каркас для вывода графики, а остальное адаптация логики. Только мало у кого будет желание.
UPD: Я так понял здесь Basic, программа Arigato показала какой-то код. Это бы сначала перевести на нормальный язык под современный компьютер. Впрочем, уже делали ремейк под C#: https://github.com/sfvicente/Dictator (логика погрязла под кучей абстракций) и C: https://github.com/kastian/Dictator (https://lowres.inutilis.com/programs/?lccpost=zXjafzcY90).
Arigato:
Да, Dictator написан практически полностью на BASIC, за исключением некоторых визуальных эффектов, которые записаны в машинных кодах. Но на эмуляторе ZX Spectrum игра отлично играется, перевод ее под NES разве что немного подтянет графику. Но так как игра квестово-текстовая, то это не столь принципиальное улучшение, графики там по минимуму.
g00db0y:
--- Цитата: Arigato от 12 Май 2023, 18:17:57 ---За основу была взята русифицированная версия оригинальной игры "Диктатор", причем прямиком с магнитофонной кассеты. Надо так понимать, что русифицировал ее Н. Родионов, но копирайт не сохранился
--- Конец цитаты ---
Arigato:
g00db0y, а можно образ этой версии игры? Так как у меня стартовый экран отличался, возможно, и перевод другой.
Sharpnull:
На счёт ремейка на C (https://github.com/kastian/Dictator), там только вывод текста через ncurses, поэтому нет графики и звука. Смог скомпилировать через MSYS2 под Windows после некоторых изменений. После включения предупреждений компилятора обнаружил ошибку в assasination.c:
--- Код: ---(ARMY->status == PEASANTS->status == LANDOWNERS->status == 'A') /* If all ritumbans people dislike you */
--- Конец кода ---
Это одно из условий проигрыша и оно всегда false (т. е. уже не влияет). Человек пытался разом проверить состояние, но нужно:
--- Код: ---((ARMY->status == 'A') && (PEASANTS->status == 'A') && (LANDOWNERS->status == 'A'))
--- Конец кода ---
Там всё равно код разгребать, например, везде int, не понятно сколько достаточно - 16 бит или 32.
Lunar Laser:
--- Цитата: Guyver(X.B.M.) от 13 Май 2023, 02:06:04 ---Эх, я в детстве постоянно в неё рубился. Одна из самых моих любимых игр... Вот бы кто её на NES запилил...
--- Конец цитаты ---
А существует ли какой-нибудь кросс-компилятор Бейсика на PC для NES?
Добавлено позже:
А то вопрос шире, чем портирование одной игры.
На Спектруме на Бейсике можно найти и другие экономические стратегии, которые можно (?) портировать.
SPOT:
На самой NES есть BASIC))
Lunar Laser:
--- Цитата: SPOT от 22 Май 2023, 08:30:31 ---На самой NES есть BASIC))
--- Конец цитаты ---
Есть вопросы по функционалу Бейсика, который есть для Famicom. Но это отдельная тема.
Вопрос про кросс-компилятор всё равно остаётся первичным.
Добавлено позже:
Есть кросс-компилятор для различных 8-битных компьютеров от Commodore, называется "XC=BASIC".
К нему пару-тройку лет назад хотели прикрутить поддержку NES. Хотели, но вроде не прикрутили.
Arigato:
--- Цитата: SPOT от 22 Май 2023, 08:30:31 ---На самой NES есть BASIC))
--- Конец цитаты ---
Интересный Бейсик. В свое время писал на нем программы в версии для Сюбора, там два Бейсика: G-BASIC, который подходит для игр и F-BASIC для вычислений. В G-BASIC кое-какие игрушки удавалось запрограммировать, но там все очень медленно работает и наборы тайлов фиксированы. А на F-BASIC делал программы для научных расчетов, когда под рукой других инструментов не было.
Lunar Laser:
--- Цитата: Arigato от 23 Май 2023, 12:33:54 ---Интересный Бейсик. В свое время писал на нем программы в версии для Сюбора, там два Бейсика: G-BASIC, который подходит для игр и F-BASIC для вычислений. В G-BASIC кое-какие игрушки удавалось запрограммировать, но там все очень медленно работает и наборы тайлов фиксированы. А на F-BASIC делал программы для научных расчетов, когда под рукой других инструментов не было.
--- Конец цитаты ---
Я так понимаю, там не переопределить базовый набор тайлов и спрайтов и шрифты тоже не добавить. Наверняка отводится мало памяти на код. PEEK и POKE там ведь тоже нет?
Итого, проблематично портировать туда экономические стратегии со Спектрума, разве что с сильно изменённым визуалом, собранным из базового набора тайлов, и с урезанным функционалом (а он и на Спектруме не обширен - лишнего нет), из-за малого объёма RAM.
Не, кросс-компилятор нужен, чтобы не париться о мелочах.
Arigato:
--- Цитата: Lunar Laser от 23 Май 2023, 17:56:45 ---Я так понимаю, там не переопределить базовый набор тайлов и спрайтов и шрифты тоже не добавить. Наверняка отводится мало памяти на код. PEEK и POKE там ведь тоже нет?
--- Конец цитаты ---
Да, тайлы зашиты в ПЗУ. PEEK и POKE, на сколько помню, нет. Памяти под Бейски вроде бы 4 Кб было, но могу ошибаться. Это значит на картридже стояло расширенное ОЗУ, ведь еще можно было нарисовать один экран и его выводить программно.
--- Цитата: Lunar Laser от 23 Май 2023, 17:56:45 ---Итого, проблематично портировать туда экономические стратегии со Спектрума
--- Конец цитаты ---
Решил в качестве практики переделать Dictator под NES. Писать буду на Ассемблере. Перенес шрифт в формат для NES:
Русские буквы выдрал из самого русифицированного Диктатора, а английские из ПЗУ Спектрума, только утолщил их, чтобы имели полужирное начертание, как и русские.
Еще много свободного места для графики, да и некоторые символа в русском и английском вариантах имеют общее начертание, то есть при необходимости можно эти места использовать для графики, тем более что Ассемблер позволяет делать перекодировку символов, то есть не важно, как они размещены в таблице тайлов, в редакторе текст можно писать в ASCII, а Ассемблер сам перекодирует.
Вопрос, как лучше переносить игру, максимально сохраняя стиль оригинала или улучшать графику и прочее?
Lunar Laser:
--- Цитата: Arigato от 23 Май 2023, 19:20:49 ---Вопрос, как лучше переносить игру, максимально сохраняя стиль оригинала или улучшать графику и прочее?
--- Конец цитаты ---
Ну, я не знаю. И вообще я думал больше в сторону не Dictator, а целого ряда других подобных игр. И в сторону поиска кросс-компилятора Бейсика, ибо в ассемблерах почти не шарю.
По графике Dictator не мне рассуждать, лучше найти NES-художника (на форуме вроде были) и посоветоваться с ним, с его вИдением.
Можно для начала портануть не Dictator, а "Королевство Зерна" из первого тома "Как написать игру для ZX Spectrum". Только там вроде есть ошибки в исходнике.
Попытаться прикрутить к этому "Королевству" симпатичную "средневеково-фэнтезийную" графику, определиться с визуальным стилем для таких игр в версии для NES, а дальше плясать уже от этого.
Добавлено позже:
Можно даже сделать "Королевство" расширенным не только графически.
Добавлено позже:
--- Цитата: Sharpnull от 13 Май 2023, 02:45:30 ---UPD: Я так понял здесь Basic, программа Arigato показала какой-то код. Это бы сначала перевести на нормальный язык под современный компьютер.
--- Конец цитаты ---
Я знаю, что ты уже опытный программист.
Имея бэкграунд, изучить Spectrum Basic у тебя займёт дней 6. Ещё дней через 8 - 12 сможешь разбирать исходники игр, написанных на Бейсике. Скачай книгу "Как написать игру для ZX Spectrum", первый том (Бейсик), издательство Питер.
Понятно, что для людей, ранее не сталкивавшихся с программированием, освоение этой книги и разбор исходников потребуют куда больше времени. Хотя она доступна для начинающих. В конце книги есть довольно нормальный справочник по операторам Spectrum Basic.
Добавлено позже:
Только юзай Бейсик для ZX Spectrum 128 и выше.
На ZX Spectrum 48 прикол с безумием организации спекрумовской клавиатуры. На 48-ом Бейсике можно писать только на реальном 48-ом Спектруме, видя перед собой эту самую клавиатуру. Впрочем, многие эмуляторы (например, Fuse) содержат подсказки по этой клавиатуре.
blackoff:
--- Цитата: Lunar Laser от 23 Май 2023, 19:47:39 ---изучить Spectrum Basic у тебя займёт дней 6. Ещё дней через 8 - 12 сможешь разбирать исходники игр, написанных на Бейсике. Скачай книгу "Как написать игру для ZX Spectrum", первый том (Бейсик), издательство Питер.
--- Конец цитаты ---
а в перерывах может учить латынь ...
lupus:
--- Цитата: blackoff от 23 Май 2023, 20:49:49 ---а в перерывах может учить латынь ...
--- Конец цитаты ---
Так-то её в некоторых вузах ещё учат )
Lunar Laser:
--- Цитата: blackoff от 23 Май 2023, 20:49:49 ---а в перерывах может учить латынь ...
--- Конец цитаты ---
Да ну, книжка реально не сложная для взрослого человека, уже являющегося кодером. Это она в детстве заумью казалась и осваивалась кусками.
Я её году в 2015 или в 2016 за пару месяцев освоил, не являясь программистом. Проработав и разобравшись в большинстве исходников.
А я и тогда, и сейчас, далёк от звания "программист". А вот программисту вполне по силам освоить её за 8 - 12 дней.
Понятно, что для человека, для кого это станет первой "компьютерной книжкой", понадобится полгода и больше.
Добавлено позже:
А вот во втором томе (Ассемблер) вполне можно застрять всерьёз.
blackoff:
--- Цитата: Lunar Laser от 23 Май 2023, 23:08:31 ---Это она в детстве заумью казалась и осваивалась кусками.
--- Конец цитаты ---
я кодил на спеке в 90х ,восстанавливал игры пришедшие к нам битом виде ,возвращал музыку выдирая ее из демок ,перепаковывал ,адаптировал многоуровневые ленточные игры к дисководу ,читы ,было интересно,но все это было в машинном коде ,я даже загрузчики в коде делал
1 строка 0\1 rem потом машинный код ,2 строка запуск кода после rem в 1 строке ,прочитано было много ... ,а игры на бейсике и тогда были примитивны и тормозные ,ща хз кому это нужно ,имхо "на любителя"... о спеке ,как о первом компе имею только теплые воспоминания ,иногда бегаю в boulder dash на psp ...
--- Цитата: Lunar Laser от 23 Май 2023, 23:08:31 --- А вот программисту вполне по силам освоить её за 8 - 12 дней.для кого это станет первой "компьютерной книжкой",понадобится полгода и больше.
--- Конец цитаты ---
я конечно не знаю интересы Sharpnull, но думаю он потратит время на что то более перспективное чем "мертвый язык" ,хотя хз ...
Arigato:
--- Цитата: Arigato от 23 Май 2023, 19:20:49 ---некоторые символа в русском и английском вариантах имеют общее начертание, то есть при необходимости можно эти места использовать для графики, тем более что Ассемблер позволяет делать перекодировку символов
--- Конец цитаты ---
Немного привел в порядок таблицу символов, сдвинул диапазон ASCII в начало таблицы, чтобы пробел занимал нулевую позицию, ну и дальше в порядке ASCII. Русские буквы, которые визуально ничем не отличаются от английских (типа А, М, Р и прочие) удалил совсем. Малую русскую букву "я" поместил на место символа ` (это который на кнопке с буквой Ё). Тут сыграла роль ошибка компилятора ca65, он букву "я" (с кодом 255) воспринимает как конец файла, а потому буква "я" не может присутствовать в исходнике нигде, ни в строке, ни даже в комментарии, иначе компиляция крашется. То есть если мы хотим вывести текст с буквой "я", надо в коде писать что-то такое:
--- Код: ---hello: .byte "Привет`, Мир!", $ff
--- Конец кода ---
Здесь $ff использую как признак конца строки. Сначала думал использовать 0, как принято в Си и с точки зрения программирования это удобнее, но на коде 0 у нас завязан пробел.
Вывод такой строки имеет следующий вид:
Набор тайлов на текущий момент следующий:
Пустые клетки - место для будущей графики. Если его не хватит, то можно убрать некоторые символы, вроде @& и прочие, которые в игре вряд ли используются.
Чтобы поставить в соответствие коды символов из тайлов с ASCII из редактора кода, сделал такую перекодировку:
--- Код: ---; ASCII
.charmap $00, $00
.charmap $01, $01
.charmap $02, $02
.charmap $03, $03
.charmap $04, $04
.charmap $05, $05
.charmap $06, $06
.charmap $07, $07
.charmap $08, $08
.charmap $09, $09
.charmap $0A, $0A
.charmap $0B, $0B
.charmap $0C, $0C
.charmap $0D, $0D
.charmap $0E, $0E
.charmap $0F, $0F
.charmap $10, $10
.charmap $11, $11
.charmap $12, $12
.charmap $13, $13
.charmap $14, $14
.charmap $15, $15
.charmap $16, $16
.charmap $17, $17
.charmap $18, $18
.charmap $19, $19
.charmap $1A, $1A
.charmap $1B, $1B
.charmap $1C, $1C
.charmap $1D, $1D
.charmap $1E, $1E
.charmap $1F, $1F
.charmap $20, $00
.charmap $21, $01
.charmap $22, $02
.charmap $23, $03
.charmap $24, $04
.charmap $25, $05
.charmap $26, $06
.charmap $27, $07
.charmap $28, $08
.charmap $29, $09
.charmap $2A, $0A
.charmap $2B, $0B
.charmap $2C, $0C
.charmap $2D, $0D
.charmap $2E, $0E
.charmap $2F, $0F
.charmap $30, $10
.charmap $31, $11
.charmap $32, $12
.charmap $33, $13
.charmap $34, $14
.charmap $35, $15
.charmap $36, $16
.charmap $37, $17
.charmap $38, $18
.charmap $39, $19
.charmap $3A, $1A
.charmap $3B, $1B
.charmap $3C, $1C
.charmap $3D, $1D
.charmap $3E, $1E
.charmap $3F, $1F
.charmap $40, $20
.charmap $41, $21
.charmap $42, $22
.charmap $43, $23
.charmap $44, $24
.charmap $45, $25
.charmap $46, $26
.charmap $47, $27
.charmap $48, $28
.charmap $49, $29
.charmap $4A, $2A
.charmap $4B, $2B
.charmap $4C, $2C
.charmap $4D, $2D
.charmap $4E, $2E
.charmap $4F, $2F
.charmap $50, $30
.charmap $51, $31
.charmap $52, $32
.charmap $53, $33
.charmap $54, $34
.charmap $55, $35
.charmap $56, $36
.charmap $57, $37
.charmap $58, $38
.charmap $59, $39
.charmap $5A, $3A
.charmap $5B, $3B
.charmap $5C, $3C
.charmap $5D, $3D
.charmap $5E, $3E
.charmap $5F, $3F
.charmap $60, $40
.charmap $61, $41
.charmap $62, $42
.charmap $63, $43
.charmap $64, $44
.charmap $65, $45
.charmap $66, $46
.charmap $67, $47
.charmap $68, $48
.charmap $69, $49
.charmap $6A, $4A
.charmap $6B, $4B
.charmap $6C, $4C
.charmap $6D, $4D
.charmap $6E, $4E
.charmap $6F, $4F
.charmap $70, $50
.charmap $71, $51
.charmap $72, $52
.charmap $73, $53
.charmap $74, $54
.charmap $75, $55
.charmap $76, $56
.charmap $77, $57
.charmap $78, $58
.charmap $79, $59
.charmap $7A, $5A
.charmap $7B, $5B
.charmap $7C, $5C
.charmap $7D, $5D
.charmap $7E, $5E
.charmap $7F, $5F
; beyond ASCII
.charmap $80, $80
.charmap $81, $81
.charmap $82, $82
.charmap $83, $83
.charmap $84, $84
.charmap $85, $85
.charmap $86, $86
.charmap $87, $87
.charmap $88, $88
.charmap $89, $89
.charmap $8A, $8A
.charmap $8B, $8B
.charmap $8C, $8C
.charmap $8D, $8D
.charmap $8E, $8E
.charmap $8F, $8F
.charmap $90, $90
.charmap $91, $91
.charmap $92, $92
.charmap $93, $93
.charmap $94, $94
.charmap $95, $95
.charmap $96, $96
.charmap $97, $97
.charmap $98, $98
.charmap $99, $99
.charmap $9A, $9A
.charmap $9B, $9B
.charmap $9C, $9C
.charmap $9D, $9D
.charmap $9E, $9E
.charmap $9F, $9F
.charmap $A0, $A0
.charmap $A1, $A1
.charmap $A2, $A2
.charmap $A3, $A3
.charmap $A4, $A4
.charmap $A5, $A5
.charmap $A6, $A6
.charmap $A7, $A7
.charmap $A8, $A8
.charmap $A9, $A9
.charmap $AA, $AA
.charmap $AB, $AB
.charmap $AC, $AC
.charmap $AD, $AD
.charmap $AE, $AE
.charmap $AF, $AF
.charmap $B0, $B0
.charmap $B1, $B1
.charmap $B2, $B2
.charmap $B3, $B3
.charmap $B4, $B4
.charmap $B5, $B5
.charmap $B6, $B6
.charmap $B7, $B7
.charmap $B8, $B8
.charmap $B9, $B9
.charmap $BA, $BA
.charmap $BB, $BB
.charmap $BC, $BC
.charmap $BD, $BD
.charmap $BE, $BE
.charmap $BF, $BF
.charmap $C0, $21
.charmap $C1, $60
.charmap $C2, $22
.charmap $C3, $61
.charmap $C4, $62
.charmap $C5, $25
.charmap $C6, $63
.charmap $C7, $64
.charmap $C8, $65
.charmap $C9, $66
.charmap $CA, $67
.charmap $CB, $68
.charmap $CC, $2D
.charmap $CD, $28
.charmap $CE, $2F
.charmap $CF, $69
.charmap $D0, $30
.charmap $D1, $23
.charmap $D2, $34
.charmap $D3, $6A
.charmap $D4, $6B
.charmap $D5, $38
.charmap $D6, $6C
.charmap $D7, $6D
.charmap $D8, $6E
.charmap $D9, $6F
.charmap $DA, $70
.charmap $DB, $71
.charmap $DC, $72
.charmap $DD, $73
.charmap $DE, $74
.charmap $DF, $75
.charmap $E0, $41
.charmap $E1, $76
.charmap $E2, $77
.charmap $E3, $78
.charmap $E4, $79
.charmap $E5, $45
.charmap $E6, $7A
.charmap $E7, $7B
.charmap $E8, $7C
.charmap $E9, $7D
.charmap $EA, $7E
.charmap $EB, $7F
.charmap $EC, $80
.charmap $ED, $81
.charmap $EE, $4F
.charmap $EF, $82
.charmap $F0, $83
.charmap $F1, $84
.charmap $F2, $85
.charmap $F3, $59
.charmap $F4, $86
.charmap $F5, $58
.charmap $F6, $87
.charmap $F7, $88
.charmap $F8, $89
.charmap $F9, $8A
.charmap $FA, $8B
.charmap $FB, $8C
.charmap $FC, $8D
.charmap $FD, $8E
.charmap $FE, $8F
.charmap $FF, $40
--- Конец кода ---
Вывод на экран всех символов:
--- Код: ---hello:
.byte "!", '"', "#$%&'()*+,-./0123456789:;<=>?@"
.byte "ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`"
.byte "abcdefghijklmnopqrstuvwxyz{|}~", $5f
.byte "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
.byte "абвгдежзийклмнопрстуфхцчшщъыьэю`", $ff
--- Конец кода ---
Итог:
Yoti:
--- Цитата: Arigato от 25 Май 2023, 01:07:51 ---Русские буквы, которые визуально ничем не отличаются от английских (типа А, М, Р и прочие) удалил совсем.
--- Конец цитаты ---
А что насчёт "К"? Также, не вижу "Ёё". Ну и в игре действительно нужны "ЪЬ"?
Навигация
Перейти к полной версии