| Разработка и ромхакинг > Ромхакинг и программирование |
| Castlequest/Castle Excellent |
| << < (7/10) > >> |
| Миха42:
--- Цитата: Sharpnull от 30 Июль 2021, 00:20:32 ---В главном цикле с CPU $82A2: --- Конец цитаты --- В районе адресов 8200-ВВ00 очень сложная паутина адресаций обработки спрайтов и героя относительно спрайтов. Я уже пытался туда однажды залезть в надежде вынуть массив адресаций и разбить код по банкам, в результате начал переделывать игру заново. Этот участок до сих пор геморроем мне мешает нормально раскидать по банкам код. Там используются все типы адресации начиная с простых jsr и jmp включая смещения по х и смещения относительно адресов байтов zero, так же множество beq bne и тому подобных, и заканчивая изменением адресации стека, путём вытаскивания адреса, изменения относительно условий игры и помещения обратно в стек и уже по окончании функции возврат на уже изменившийся адрес. Там весь код взаимосвязан, и смещение кода даже на байт это тот ещё геморрой. Нужно отдать должное разработчикам, сжимать код для экономии места они умели неимоверно чего только стоют данные адресации и и алгоритм сжатия карты игры. Добавлено позже: А что по поводу RAM в Nes 2.0 ? Какую выбирать нужно? Добавлено позже: Действительно стоющим было бы реализовать изменение кадров спрайтов путём смены 1го банка спрайтов, нежели процессор бесконечно переписывает 512 байт спрайтов игры. Что высвободило бы довольно много времени работы процессора. Но пока это лишь не реализованная задумка. |
| Sharpnull:
--- Цитата: Миха42 от 30 Июль 2021, 03:11:47 ---А что по поводу RAM в Nes 2.0 ? Какую выбирать нужно? --- Конец цитаты --- SRAM 8KB вместе с Battery битом. Work RAM (PRG-RAM) и Save RAM (PRG-NVRAM/EEPROM) сделали отдельно, потому что, например, у MMC5 бывает 8КБ WRAM + 8КБ SRAM (игра L'Empereur). А Battery бит может стоять с нулевой SRAM, означая сохраняемую внутреннюю память маппера или перезаписываемый PRG-ROM. У вас должен быть заголовок: 4E45531A080843080000700000000001. |
| Миха42:
Особенности модификации v1.4.5: Добавлена возможность сохранения/загрузки игры в RAM картриджа При сохранении текущей игры прежнее сохранение будет удалено, в том числе и к другой игре или к другой сложности игры если такое имелось ранее. Для сохранения требуется 512 байт SRAM картриджа, ну или эмулятор :) --- Цитата: Sharpnull от 29 Июль 2021, 19:49:02 ---что экран "Конец игре" (UPD: почему-то не "игры") --- Конец цитаты --- Изменил на "игры" ;) --- Цитата: Sharpnull от 29 Июль 2021, 19:49:02 ---Заметил, что экран "Конец игре" (UPD: почему-то не "игры"), перед появлением главного меню, становится с неправильными тайлами. --- Конец цитаты --- Так и не понял в чём проявляется неправильность тайлов?! :? Имеете в виду покадрово в момент перехода на главное меню ловит кадр загрузки титульной картинки не отключая NMI чтоли прерывания? Титульная картинка и прочие хранятся в CHR-ROM и импортируются от туда для отображения картинки на экране, а после уже грузятся сами тайлы в CHR для отображения этой самой картинки. (Просто я в код возврата после смерти особо не лез, могли остаться какие-то недоработки от оригинальной версии) |
| Sharpnull:
--- Цитата: Миха42 от 02 Август 2021, 17:41:59 ---Так и не понял в чём проявляется неправильность тайлов?! --- Конец цитаты --- Посмотрел код. Это косяк оригинала. После конца игры происходит прыжок на Reset Handler, установка нуля в $2000 делает адрес BG = $0000, поэтому используются не те тайлы, после из-за разогрева PPU, который не нужен, эта кривая картинка длится 3 кадра. Я не знаю всегда ли, но SEI произошёл до прыжка, а установка $2000 = 0 не нужна, т. к. NMI тоже был отключен. Поэтому я сделал прыжок после разогрева PPU, для оригинальной игры (J) - CPU $FE81: JMP $8225 -> JMP $8236. Для вашего хака - CPU $C90A: JMP $E001 -> JMP $E012. UPD: Ещё можно просто установить BG = $1000 в Reset Handler: --- Код: ---LDA #$10 ; Было LDA #$00 STA $2000 --- Конец кода --- Только это будет на 3 кадра дольше. |
| Миха42:
Можно попробовать сделать Jmp на $E016 Пропустит SEI и установку 0 на $2000 В следующем обновлении исправлю. |
| Sharpnull:
--- Цитата: Миха42 от 02 Август 2021, 18:58:11 ---Можно попробовать сделать Jmp на $E016 --- Конец цитаты --- В стеке будет 2 байта, поэтому пропускать LDX #$FF | TXS нельзя. CLD можно пропустить (JMP $E013), игра скорее всего не использует (не знаю примеров использования, но флаг Decimal на NES можно использовать как глобальный флаг, есть CLD и SED, для проверки достаточно PHP | PLA | AND #$08). |
| Миха42:
--- Цитата: Sharpnull от 02 Август 2021, 19:19:18 ---В стеке будет 2 байта, поэтому пропускать LDX #$FF | TXS нельзя. CLD можно пропустить (JMP $E013), игра скорее всего не использует (не знаю примеров использования, но флаг Decimal на NES можно использовать как глобальный флаг, есть CLD и SED, для проверки достаточно PHP | PLA | AND #$08). --- Конец цитаты --- При Reset да, пропускать нельзя. Но при окончании игры и возврате в главное меню можно пропустить это всё, ведь все настройки уже установлены были ранее, можно было бы и ещё одну функцию пропустить настройки первого включения, но ни как, опять код переделывать нужно будет, но на главном меню пожалуй можно и пренебречь лишними циклами, на игру не влияет особо. Или я в чём-то не прав? Добавлено позже: --- Цитата: Sharpnull от 02 Август 2021, 18:17:42 --- --- Код: ---LDA #$10 ; Было LDA #$00 STA $2000 --- Конец кода --- Только это будет на 3 кадра дольше. --- Конец цитаты --- Не туда глянул не в тот регистр управления. Тупанул я малость )) понял к чему вы клоните. Тайлы местами меняются кратковременно. Добавлено позже: --- Цитата: Sharpnull от 02 Август 2021, 19:19:18 ---CLD можно пропустить (JMP $E013), игра скорее всего не использует (не знаю примеров использования, но флаг Decimal на NES можно использовать как глобальный флаг, есть CLD и SED, для проверки достаточно PHP | PLA | AND #$08). --- Конец цитаты --- Флаг D в Dendy не используется вроде как, потому и очищается. Добавлено позже: Где и куда можно ткнуть на каком эмуляторе, чтоб покадрово смотреть отображение на экране? А то пролистал по циклам работу ppu и cpu, но неправильного отображения так и не увидел. И где всё-таки ткнуть галку чтоб на недокументированные инструкции бряк срабатывал? |
| Sharpnull:
--- Цитата: Миха42 от 02 Август 2021, 19:41:09 ---При Reset да, пропускать нельзя. Но при окончании игры и возврате в главное меню можно пропустить это всё --- Конец цитаты --- Нельзя пропускать, у вас после каждой смерти будет стек расти на 2 байт, пока не случится переполнение. --- Цитата: Миха42 от 02 Август 2021, 19:41:09 ---Флаг D в Dendy не используется вроде как, потому и очищается. --- Конец цитаты --- Про Dendy не знаю, в NES можно работать с флагом Decimal, но он не выполняет свой функции для арифметических операций, поэтому его можно использовать как дополнительную память. На nesdev есть обсуждение, там заметили, что проверка медленная, но работать должно. Очищают флаг при запуске потому что так принято и для переносимости кода. --- Цитата: Миха42 от 02 Август 2021, 19:41:09 ---И где всё-таки ткнуть галку чтоб на недокументированные инструкции бряк срабатывал? --- Конец цитаты --- Mesen: Debugger > Options > Break Options > Break on unofficial opcodes, работает только при открытом отладчике. В FCEUX это вроде Break on Bad Opcodes в отладчике. --- Цитата: Миха42 от 02 Август 2021, 19:41:09 ---Где и куда можно ткнуть на каком эмуляторе, чтоб покадрово смотреть отображение на экране? --- Конец цитаты --- Mesen, в отладчике F8 или кнопка наверху пропускает кадр. Event Viewer тоже полезен. |
| Миха42:
--- Цитата: Sharpnull от 02 Август 2021, 21:30:57 ---Нельзя пропускать, у вас после каждой смерти будет стек расти на 2 байт, пока не случится переполнение. --- Конец цитаты --- Не знал что TXS помимо указания вершины стека ещё и счётчик уровней стека очищает, не помню чтоб об этом где-то в литературе упомяналось. Или сам указатель это и есть счётчик? По части использования D флага в качестве дополнительного 1го бита памяти, так себе применение слишком много возни для его проверки, проще обнулить его и забыть про него. |
| Sharpnull:
Миха42, TXS просто устанавливает указатель на стек (S - Stack Pointer), очищать что-либо было бы затратно. Я не знаю что такое "счётчик уровней", S - это индекс размером 1 байт, который указывает на место RAM $0100-01FF и, в зависимости от инструкций, увеличивается, уменьшается или устанавливается. Про стек: https://wiki.nesdev.com/w/index.php?title=Stack. |
| Миха42:
Особенности модификации v1.4.6: При взятии акваланга появляется значок акваланга в верхнем правом углу экрана на время его действия, по окончанию действия акваланга исчезнет. (Полезен при игре с отключенной музыкой) Теперь при игре с бесконечными ключами, вместо количества ключей просто появляются имеющиеся ключи. Ну и малость поковырялся в коде игры. |
| Terwilf:
Извините, не могли бы вы сделать версию этого хака с обычным русским шрифтом? Я хотел бы перевести меню на испанский язык, чтобы добавить вашу игру в свою коллекцию, но, не зная вашего языка, я не могу правильно интерпретировать написанное ;) Извините за неудобства |
| Миха42:
Что значит с обычным русским шрифтом? Имеете в виду буквы Ж, Ы, Ш, Щ, Ф не использующие по 2 тайла? Если же имеете в виду версию Unl. F&K то там с лёгкостью можно указать вторую версию шрифта в игре. В файле Hack.txt указаны 2 банка в которые я собираю все настройки, указатели и массивы относящиеся к определённой версии игры. В CHR банках имеются 2 банка шрифтов, в банке с игрой нужно лишь в указателе выбора тайлов изменить банк шрифтов. Ещё как вариант можно попробовать сделать поддержку изменения языка в игре, но тогда понадобится человек кто прежде сделает сперва перевод на английский язык, чтоб сделать его в качестве языка по умолчанию. Если кто-то согласиться прежде перевести игру на английский, то на выходных займусь переделкой кода под мультиязычную версию. |
| Еmsi-D:
Миха42, молоток что продолжаешь развивать хацк. А удалось решить проблему с респавном предметов? (В нек-рых комнатах, как известно, можно встрять, если например акваланг заюзать и больше он не появится в этом месте, или же кубик может раздавить прессом об потолок, и он тоже больше не отреспавнится никогда) |
| Миха42:
--- Цитата: Еmsi-D от 05 Август 2021, 09:12:44 ---Миха42, молоток что продолжаешь развивать хацк. А удалось решить проблему с респавном предметов? (В нек-рых комнатах, как известно, можно встрять, если например акваланг заюзать и больше он не появится в этом месте, или же кубик может раздавить прессом об потолок, и он тоже больше не отреспавнится никогда) --- Конец цитаты --- Если внимательно прочитал тему, то должен знать, что данный вопрос я уже решил, но делать наск где заведомо будут убраны все данные фичи не планировал, разве что кубик что давит лифтом сдвинул правее в Unl F&K lvl2(легко). В оригинальной версии в lvl1(очень легко) я уже писал, что сделал респаун аквалангов, в дальнейшем планирую сделать их респаун и в Unl F&K lvl1(очень легко) когда буду делать данную сложность для данной версии, но больше респаун аквалангов не буду ни где делать, по скольку следующие сложности идут уровня легко, нормально, терпимо, сложно и выше, а значит заведомо в данных сложностях облегчать игру уже не стоит, и даже в уровне легко уже стоит соблюдать требуемые правила игры что если предмет использован или сломался, то данного предмета в игре больше не должно быть. Добавлено позже: Скачай последнюю версию 1.4.6 и сам увидишь что в оригинальной версии (очень легко) такой проблемы с аквалангом нету. |
| Миха42:
--- Цитата: Еmsi-D от 05 Август 2021, 10:52:56 ---Миха42, чето злой какой то.. :-\ --- Конец цитаты --- С чего бы? :D :D :D Просто вопрос был ни к чему по части респа аквалангов, учитывая что я уже писал ещё к 1.4.3 что сделал сложность в которой акваланги ресаются. Ну и уточнил сейчас где ещё будет респ их со временем. Ну а более сложные версии на то они и более сложные чтоб не было всё столь просто и легко, что вполне разумно что там даже и не стоит делать их респ. ;) Добавлено позже: Жаль что нет возможности постоянно изменять свой первый пост в теме, а то там бы выкладывал всегда обновлённую версию чтоб не искать по теме. <_< |
| Еmsi-D:
Миха42, ну сорян, на форум не заглядывал несколько месяцев. От того пропустил версию с респавнящимися айтемами. Тему не читал, только бегло поскроллил и там немало постов с технической инфой всякой. Для меня, простого игрока, это дремучий лес, сам понимаешь. :blush: --- Цитата: Миха42 от 05 Август 2021, 11:06:11 ---Жаль что нет возможности постоянно изменять свой первый пост в теме, а то там бы выкладывал всегда обновлённую версию чтоб не искать по теме. <_< --- Конец цитаты --- Это надо модераторам пейсать, они могут редактить первый пост. А вообще да, странное ограничение какое-то. |
| Terwilf:
Извините, я выразился неправильно, я имел в виду стилизацию типографики, используемой в этой игре, так как этот шрифт, который делит каждый символ по вертикали, делает его запутанным для чтения, для меня, так как у меня нет опыта интерпретации русского алфавита. Вот почему мой запрос был направлен на получение копии вашего хака с более обычной типографикой, чтобы лучше понять его, кстати, мой язык испанский, извините... :neznayu: С другой стороны, я должен признаться, что не совсем понимаю, что вы имеете в виду, когда говорите "Unl. F&K", честно говоря, я не очень проницательный человек, мои цели очень просты, мне нравится ваша игра и, если возможно, я хочу адаптировать ее к своему языку ;) |
| Миха42:
Terwilf, в игре используется 2 вида шрифта 7х8рх и 7х7рх В оригинальной версии игры 7х7 В хаке Unlimited Fly & Key 7х8 Шрифты можно сменить. Для облегчения перевода вам проще использовать оригинальную версию игры с более читаемым стилем. В обеих версиях игры используется один и тот же код и текст, меняется только CHR-ROM с используемыми тайлами шрифта. |
| Terwilf:
На самом деле я был не в курсе новостей вашего проекта, извините, что потратил ваше время, я скачал последнюю версию вашего хака и могу прекрасно читать с новым шрифтом, спасибо за ваше доброе расположение! ;) |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |