Разработка и ромхакинг > Разработка игр
[ZX Spectrum] Диктатор (политическая стратегия) - порт на NES (Famicom, Денди)
Arigato:
В оригинале русская К отличается от английской, так что пока оставил. Если не будет хватать места под графику, то можно будет такие буквы тоже исключить.
Ё не нужна, она не используется.
Ъ Ь знаки, естественно, нужны, они точно будут в текстах.
Потенциальные кандидаты на исключение: [ ] { } | \ ^ & @ ~ © - 11 символов.
Оптимизация букв: К, к, с (малая русская с в оригинале отличается от английской, но их можно объединить), З (можно использовать цифру 3), Ч (цифра 4), Ь (английская b) - еще 6 символов.
В крайнем случае английский алфавит можно урезать до минимума, так как игра на 99% выводит только русский текст.
Но пока с графикой нет определенности. Либо брать графику из оригинала, но она для NES сильно примитивная, либо рисовать свою новую графику. Если брать оригинальную, то для нее места точно хватит.
Guyver(X.B.M.):
А можно сперва нарисовать оригинальную, а потом если что улучшить? Если что я готов порисовать новую, времени полно...
Arigato:
--- Цитата: Guyver(X.B.M.) от 25 Май 2023, 13:59:48 ---А можно сперва нарисовать оригинальную, а потом если что улучшить?
--- Конец цитаты ---
Ну скорее всего по такому пути и придется идти. Графику добавить не проблема, главное каркас игры создать.
Вообще в подобной игре спрайты не особо нужны, ну или их будет совсем по минимуму. А потому можно обе таблицы тайлов использовать для фоновой графики, продублировав ту часть, где буквы. И в нужный момент включать вывод из первой или второй таблицы в зависимости от того, что именно хотим в данный момент нарисовать. В итоге под графику куча свободного места.
Guyver(X.B.M.):
Графика в формате NES. Не знаю много ли там её ещё :neznayu:
Arigato:
Добавил графику и немного ее раскрасил:
Вот так это выглядит в эмуляторе NES:
Для вывода всего этого безобразия написал отдельные процедуры и макросы к ним. В итоге файл main.asm, который все это выводит на экран, выглядит достаточно просто и понятно:
--- Код: ---.segment "CODE"
.proc main
_COLOR 0
_GOTOXY #9, #12
_PRINT hello1
_GOTOXY #9, #14
_PRINT hello2
_GOTOXY #8, #4
_PRINT peasant
_GOTOXY #8, #5
_PRINT peasant + 5
_GOTOXY #14, #4
_PRINT landlord
_GOTOXY #14, #5
_PRINT landlord + 5
_COLOR 2
_GOTOXY #26, #4
_PRINT dollar
_GOTOXY #26, #5
_PRINT dollar + 4
_GOTOXY #26, #6
_PRINT dollar + 8
_COLOR 1
_GOTOXY #20, #4
_PRINT army
_GOTOXY #20, #5
_PRINT army + 5
_GOTOXY #2, #4
_PRINT police
_GOTOXY #2, #5
_PRINT police + 4
_VBLANK
_SCROLL 0, 0
_SCREEN_ON
@loop:
JMP @loop
.endproc
.segment "RODATA"
hello1: .byte "Hello, World!", $ff
hello2: .byte "Привет, Мир!", $ff
police:
.byte $c3, $c4, $c5, $ff
.byte $d3, $d4, $d5, $ff
peasant:
.byte $a3, $a4, $a5, $a6, $ff
.byte $b3, $b4, $b5, $b6, $ff
landlord:
.byte $a7, $a8, $a9, $aa, $ff
.byte $b7, $b8, $b9, $ba, $ff
army:
.byte $ab, $ac, $ad, $ae, $ff
.byte $bb, $bc, $bd, $be, $ff
dollar:
.byte $a0, $a1, $a2, $ff
.byte $b0, $b1, $b2, $ff
.byte $c0, $c1, $c2, $ff
--- Конец кода ---
Макрос _COLOR для выбора палитры пока что не работает, палитры не переключаются. Буду позже с этим разбираться, как его прикрутить к процедуре print, которая выводит на экран строку.
Добавлено позже:
Стартовый экран готов:
Arigato:
Добавлено стартовое меню выбора сложности. В оригинальной игре уровень сложности не настраивался, в варианте для NES будет три уровня, влияющие на баланс в игре:
Ну и главное, что процедура выбора элемента меню универсальная. Она же будет использоваться в игре для диалога с пользователем. Пока не решил как лучше сделать вопрос, где требуется два ответа: да / нет. Либо также выбирать указателем, либо кнопками: B - нет, A - да. В оригинале на ZX клавиша D означала да, а любая другая - нет.
Текущий вариант прикрепил к сообщению.
Guyver(X.B.M.):
Кнопками будет плохо, можно ошибиться. Я в своей игре сделал кнопками, а потом заменил на курсор.
Sharpnull:
Arigato, не тестируйте в мусорном VirtuaNES, используйте Mesen. В коде попадаются длинные записи как STA $0012 вместо STA $12. Для заглушки IRQ можно поставить адрес (метку) конца NMI, где и так RTI. Незачем постоянно делать PHP/PLP. Информацию лучше не располагать на краю экрана (8 пикселей слева и справа), хотя это видно для большинства телевизоров, но не всегда (https://www.nesdev.org/wiki/Overscan#For_game_developers) и это не красиво. В теме по 6502 уже написал, что нужно записывать палитру в VBlank всегда чтобы не было артефактов (UPD: вы уже сделали), а как недавно узнал лучше ещё после этого сделать так: https://www.nesdev.org/wiki/PPU_registers#Palette_corruption. Чтение контроллера без поддержки порта расширения Famicom и лишняя инструкция, хотя код почти как из https://www.nesdev.org/wiki/Controller_reading_code, вот так лучше:
--- Код: ---JOYPAD1 = $4016
buttons = $11
lda #$01
; While the strobe bit is set, buttons will be continuously reloaded.
; This means that reading from JOYPAD1 will only return the state of the
; first button: button A.
sta JOYPAD1
sta buttons
lsr a ; now A is 0
; By storing 0 into JOYPAD1, the strobe bit is cleared and the reloading stops.
; This allows all 8 buttons (newly reloaded) to be read from JOYPAD1.
sta JOYPAD1
loop:
lda JOYPAD1
and #%00000011 ; ignore bits other than controller
cmp #$01 ; Set carry if and only if nonzero
rol buttons ; Carry -> bit 0; bit 7 -> Carry
bcc loop
--- Конец кода ---
Lunar Laser:
--- Цитата: Arigato от 28 Май 2023, 02:03:29 ---Добавлено стартовое меню выбора сложности
--- Конец цитаты ---
Сочетание цветов фона и тона слишком кислотное.
Обведите буквы чёрной обводкой в пиксель толщиной. ИМХО, будет лучше смотреться.
Добавлено позже:
Дизайн верхней части буквы "К" делает визуально слишком большим промежуток между "К" и "Т".
Arigato:
--- Цитата: Sharpnull от 28 Май 2023, 15:19:56 ---В коде попадаются длинные записи как STA $0012 вместо STA $12.
--- Конец цитаты ---
У меня везде вроде бы обращение по меткам идет, то есть сам компилятор должен подставлять адрес. Но надо код еще раз просмотреть. Сегодня выявил несколько ошибок, связанных с тем, что еще не привык каждый раз начинать числа с решетки #.
--- Цитата: Sharpnull от 28 Май 2023, 15:19:56 ---Информацию лучше не располагать на краю экрана (8 пикселей слева и справа)
--- Конец цитаты ---
Я заметил, что впритык к краю экрана выглядит не очень, а в режиме PAL вообще чуть-чуть (пару пикселей) обрезается. Проблему тут в том, что в ZX Spectrum ширина экрана такая же, но там есть бордюр, который эту проблему решает. Придется текст переписывать, чтобы уменьшить его ширину.
--- Цитата: Sharpnull от 28 Май 2023, 15:19:56 ---Чтение контроллера без поддержки порта расширения Famicom и лишняя инструкция
--- Конец цитаты ---
Если уж гнаться за каждой инструкцией, тогда чтение контроллера лучше не выносить в подпрограмму, а вставить прямо в NMI, чтобы избежать лишнего вызова и возврата.
Lunar Laser:
--- Цитата: Lunar Laser от 28 Май 2023, 16:04:33 ---Дизайн верхней части буквы "К" делает визуально слишком большим промежуток между "К" и "Т".
--- Конец цитаты ---
Вообще можно взять побитно стандартный спектрумовский (игра ведь со Спектрума - чего бы не дать пасхалку) системный шрифт 8х8 с типовой русификацией для букв "Д" и "И". Отмасштабировать его в нужное число раз и так сделать заставку "Диктатор", дав также чёрную обводку по крайнему пикселю.
Добавлено позже:
PS Хотя, если увеличивать шрифт 8x8 в 4 раза - слово "ДИКТАТОР" займёт все 256 пикселей. :-(
Arigato:
--- Цитата: Lunar Laser от 28 Май 2023, 16:04:33 ---Сочетание цветов фона и тона слишком кислотное.
--- Конец цитаты ---
Сделал палитру потемнее, теперь так:
Цвета еще сильно от эмулятора зависят:
Обводку сделать или букву перерисовать не получится, так как сейчас эта надпись весьма компактно легла на таблицу тайлов:
А любые изменения приводят к увеличению количества необходимый тайлов. В любом случае это не то, чем сейчас стоит озабочиваться.
Lunar Laser:
Смутно припоминаю, что в нулевых в электронной спековской прессе использовался шрифт, уменьшенный в 2 раза.
Возможно, что уши растут отсюда:
https://zxpress.ru/book_articles.php?id=29
Нашёл только это. Что скажешь? Как тебе такое Илон Маск Arigato?
Добавлено позже:
--- Цитата: Arigato от 28 Май 2023, 16:41:33 ---Сделал палитру потемнее, теперь так:
--- Конец цитаты ---
Ага, вроде тоже симпатично.
Добавлено позже:
--- Цитата: Lunar Laser от 28 Май 2023, 16:42:16 ---Смутно припоминаю, что в нулевых в электронной спековской прессе использовался шрифт, уменьшенный в 2 раза.
Возможно, что уши растут отсюда:
--- Конец цитаты ---
Т.е. в таком шрифте, увеличенном в 4 раза, слово "ДИКТАТОР" займёт, по идее, 128 пикселей, + 16 пикселей на обводку справа и слева чёрным, итого: 144 пикселя по идее. По высоте, при этом, слово не займёт более 32 пикселей.
Lunar Laser:
Я абсолютно не дизайнер и не художник. Наляпал в GIMP'е, которым не умею пользоваться.
Просто, как пример, что даёт визуально добавление чёрного цвета.
Добавлено позже:
Жёстче, чётче, по-волевому. Даже если к изначальному, "кислотному", варианту.
Lunar Laser:
Лучше даже так - параллельные линии одинаковой длины.
Arigato:
Эта надпись взята из оригинальной игры (русифицированной) - https://www.emu-land.net/forum/index.php/topic,88095.msg1562948.html#msg1562948
А потому переделывать ее не буду. Где возможно, надо передать дух оригинала.
Lunar Laser:
--- Цитата: Arigato от 28 Май 2023, 17:42:49 ---Эта надпись взята из оригинальной игры (русифицированной) - https://www.emu-land.net/forum/index.php/topic,88095.msg1562948.html#msg1562948
А потому переделывать ее не буду. Где возможно, надо передать дух оригинала.
--- Конец цитаты ---
Тогда может быть оставить её чёрный цвет, а цвета букв сделать цветами фона? Разместить эти цвета косыми параллелограммами на фоне? При чёрном цвете надписи.
Добавлено позже:
ИМХО, что-то строго-чёрное в названии игры, которая называется "ДИКТАТОР" должно быть. Или в тоне, или в обводке. А цвет можно давть фоном.
Добавлено позже:
--- Цитата: Arigato от 28 Май 2023, 17:42:49 ---Где возможно, надо передать дух оригинала.
--- Конец цитаты ---
Разрешение будет 256*240?
Yoti:
--- Цитата: Lunar Laser от 28 Май 2023, 17:29:11 ---Просто, как пример, что даёт визуально добавление чёрного цвета.
--- Конец цитаты ---
Хрень какая-то.
Arigato:
--- Цитата: Lunar Laser от 28 Май 2023, 17:52:03 ---Разрешение будет 256*240?
--- Конец цитаты ---
Крайние столбцы экрана нежелательно использовать, так как, в отличии от Спектрума, нет бордюра. То есть полезное горизонтальное разрешение ниже спектрумовского. По высоте тоже все 30 строк использовать не получится.
Экран с приветственным словом переделал, добавив отступы от краев экрана. Но пришлось текст перекомпоновать, так как в исходном варианте он не умещается в строки по 30 символов:
Arigato:
Если есть желающие помочь с музыкой и звуковыми эффектами, будет реально полезно! :)
Сам я максимум что смогу сделать, это такую же пищалку, как и на Спектруме. Для NES подобная музыка вообще не катит...
Могу предоставить ноты из самой игры, то есть по ним можно написать основу и добавить каких-то эффектов, чтобы звучала не как пищалка по нотам.
Также в игре есть достаточно сложные звуковые эффекты, их могу предоставить в аудиофайле, чтобы сделать на NES что-то похожее. Тут не столько важно точно повторить эффекты, сколько передать саму суть.
Навигация
Перейти к полной версии