Разработка и ромхакинг > Ромхакинг и программирование

Castlequest/Castle Excellent

(1/10) > >>

Миха42:

Архив Old Version содержит все версии хака от Миха42 до 1.6.4 + Maps
Более новую версию, а так же информацию о всех изменениях в игре + карты замка для той или иной игры и их сложностей можно найти в данной теме.

Миха42:
Вариант для тех кто так и не прошёл игру, нужно ещё постараться чтоб не выйграть тут.  :biggrin: :biggrin:

Добавлено позже:
Зашол в тупик.

Отыскал спрайты, к спрайтам относятся ключи, очки, жизни, враги, лифты, ящики и пр. с ними проблем нет лежат в свободном доступе id предмета, координата горизонталь, координата вертикаль, можно с лёгкостью лепить спрайты по всем частям карты замка, из ограничений 24 спрайта на комнату (ограничено RAM памятью приставки) и 783 спрайта на весь замок (ограничено выделенным пространством в rom файле, что в принципе поправимо подключением дополнительного prg банка.

Но вот с картой, стенами, шипами, дверями, колоннами, водой и пр. зашол в тупик. Нашол часть кода в котором заложена вся карта замка, но разгадать алгоритм построения карты и уж тем более что-то изменить в нём не хватает ума. Любая попытка что либо изменить карается изменением всех стен во всём замке одновременно, при чём здесь же и блоки стен задаются 8х16 в этом же коде.

Help  :wall:  Нужна помощь разгадать его.  :( :(

01:E85E:A9 E4     LDA #$E4
 01:E860:85 24     STA $0024 = #$E4
 01:E862:A9 5D     LDA #$5D
 01:E864:85 23     STA $0023 = #$5D
 01:E866:A0 00     LDY #$00
 01:E868:B1 23     LDA ($23),Y @ $E45D = #$53
 01:E86A:85 19     STA $0019 = #$53
 01:E86C:E6 23     INC $0023 = #$5D
 01:E86E:D0 02     BNE $E872
 01:E870:E6 24     INC $0024 = #$E4
 01:E872:A0 00     LDY #$00
 01:E874:A2 00     LDX #$00
 01:E876:B1 23     LDA ($23),Y @ $E45D = #$53
 01:E878:F0 2A     BEQ $E8A4
 01:E87A:DD 02 07  CMP $0702,X @ $0712 = #$47
 01:E87D:D0 09     BNE $E888
 01:E87F:E8        INX
 01:E880:C8        INY
 01:E881:C0 10     CPY #$10
 01:E883:90 F1     BCC $E876
 01:E885:4C 85 E8  JMP $E885
 01:E888:C8        INY
 01:E889:B1 23     LDA ($23),Y @ $E45D = #$53
 01:E88B:D0 FB     BNE $E888
 01:E88D:C8        INY
 01:E88E:B1 23     LDA ($23),Y @ $E45D = #$53
 01:E890:C9 FF     CMP #$FF
 01:E892:D0 03     BNE $E897
 01:E894:4C 94 E8  JMP $E894
 01:E897:98        TYA
 01:E898:18        CLC
 01:E899:65 23     ADC $0023 = #$5D
 01:E89B:85 23     STA $0023 = #$5D
 01:E89D:90 02     BCC $E8A1
 01:E89F:E6 24     INC $0024 = #$E4
 01:E8A1:4C 66 E8  JMP $E866
 01:E8A4:A0 00     LDY #$00
 01:E8A6:BD 02 07  LDA $0702,X @ $0712 = #$47
 01:E8A9:99 02 07  STA $0702,Y @ $0702 = #$31
 01:E8AC:C8        INY
 01:E8AD:E8        INX
 01:E8AE:E0 10     CPX #$10
 01:E8B0:90 F4     BCC $E8A6
 01:E8B2:98        TYA
 01:E8B3:AA        TAX
 01:E8B4:20 18 E8  JSR $E818
 01:E8B7:A5 25     LDA $0025 = #$00
 01:E8B9:85 29     STA $0029 = #$00
 01:E8BB:A5 26     LDA $0026 = #$00
 01:E8BD:18        CLC
 01:E8BE:69 04     ADC #$04
 01:E8C0:85 2A     STA $002A = #$00
 01:E8C2:A0 00     LDY #$00
 01:E8C4:A5 19     LDA $0019 = #$53
 01:E8C6:91 29     STA ($29),Y @ $0000 = #$00
 01:E8C8:E6 25     INC $0025 = #$00
 01:E8CA:D0 02     BNE $E8CE
 01:E8CC:E6 26     INC $0026 = #$00
 01:E8CE:A5 25     LDA $0025 = #$00
 01:E8D0:C9 90     CMP #$90
 01:E8D2:D0 8A     BNE $E85E
 01:E8D4:A5 26     LDA $0026 = #$00
 01:E8D6:C9 01     CMP #$01
 01:E8D8:D0 84     BNE $E85E

E450                                                  533100
   003030310001303130000230303031300
   003303131303000043031313131000530
   313131300016303030303100103030303
   131313000083030303131313131001930
   30303131303130001A303030313130313
   100223030303030313031002330303030
   303131300031303030303030313100323
   030303030313030003330303031313030
   300034303030313130303100063031313
   031313131300007303131303131313131
   000C303030303030303131000D3030303
   03030303031000E303131303130313031
   0011303131303130303130001C3031313
   03131303031001D303131303131303130
   001F30313130313131303000203031313
   03131313031002A303030303030303030
   002F30313130313030303100303031313
   031303130300043303030303031313131
   0045303131303130313130004B3031313
   03130313131004D303030303030313030
   004E30303030303031303100523030303
   13131313030000A303131303130303131
   31000B303030313131313031300025303
   030313131313031310026303131303130
   303030300029303131303131303131310
   03D30303030303030313030004C303030
   303030303130310051303131303131303
   13130005E303131303131303030300041
   303030303031313130303100423030303
   030313131303130004F30313130313030
   303031300050303131303130303030313
   100563031313031303031313030005A30
   313130313030313130310035303131303
   131303030313031003930313130313130
   303031313000443031313031313030303
   131310049303030303031313130313131
   004A30313130313130303031303000093
   030303030313131303030303000123030
   303030313131303030303100133030303
   030313131303030313000143030303030
   313131303030313100153030303030313
   131303131303000173030303030313131
   303131303100FF

Миха42:
Пока ковыряю изучаю код игры сделал мини хак:
1.Принцесса находиться в первой комнате, что при желании даёт возможность легко пройти игру быстро
2.Карта замка находится сразу у входа в замок, уже с начала игры можно её открыть и поглядеть где вы находитесь
3.Время прыжка увеличено, теперь можно длительное время летать в прыжке прежде чем персонаж начнёт падать в низ
4.Игру начинаете уже имея все ключи по 1-му кроме красных, красных в начале игры 0.
5.Ну и напоследок для тех кто любит побродить по замку, ключи теперь не кончаются. ;)

Еmsi-D:
О, норм тему мутишь. Разве-что вот это убрать бы:

--- Цитата ---1.Принцесса находиться в первой комнате, что при желании даёт возможность легко пройти игру быстро
--- Конец цитаты ---

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

Миха42:

--- Цитата: Еmsi-D от 10 Апрель 2020, 20:58:50 ---Лучше сделай вместо этого чтобы вода не убивала. А то там встречаются места, где воды всего по колено, и все равно дохнешь.
Еще ящики и акваланги не респавнятся и в некоторых комнатах из-за этого можно немилосердно встрять.

--- Конец цитаты ---

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

Когда хотел добавить места в роме для собственного кода, поизучав работу мапперов столкнулся с проблемой что данный маппер на котором написана игра не поддерживает банки PRG-ROM более 32кб есть возможность в нём лишь CHR банки менять переключать в большом количестве. Поэтому выделить место для написания карты с новым алгоритмом сжатия более простым становиться просто невозможным, по скольку ром очень плотно забит данными игры.  И чтоб писать какие-то изменения в игре по этой же причине невозможно, разве что просто меняя некоторые особенности кода немножко. Даже для элеманторного добавления ключей при старте игры пришлось делать вставку кода и писать код в отдельном месте, немножко свободного места освободилось при удалении ненужного кода в роме игры, там почему-то было при включении питания два повторяющегося одинакового кода игры, словно изначально планировали две игры писать  :?. Так же пока изучаю код нахожу понемногу мусор в коде который по сути можно было и не писать, да и адреса памяти RAM зачем-то дублируют частенько по 2-3 адреса используя для одной и той же задачи, пока тоже не пойму зачем, и в графике нашол спрайты не использованные в игре, есть даже полностью нарисованный моб в двух проекциях движущийся которого в игре нету.
Сейчас по выходным занят полностью переписыванием всего кода игры под маппер ммс3 сразу анализирую отдельно себе в блокноте пишу какой код как часто и чем используется чтоб разделить его и раскидать по разным PRG банкам, тогда и возможность будет менять в игре вдоволь всё, и места хватит под все задумки.  :) Нашол так же и ссылки на код музыки, могу выложить весь код музыки, отдельно подробно указав какая часть музыки для чего, и даже расписать подробно какая часть массива для какого канала APU, это на случай если кто надумает в дальнейшем поменять музыку в игре.  ;)

P.S. Если можно, скиньте плиз мануал с подробно разжованной работой каждой инструкции процессора 6502 для тех кто в танке,  :D а то что не найду в инете, везде простое обозначение что делают та или иная инструкция, а по факту что конкретно и как и при каких обстоятельствах что они делают с флагами некоторые инструкции не могу понять, со временем конечно методом тык всё равно всё узнаю, но хотелось бы пораньше чтоб быстрее разобрать весь код игры.

Еmsi-D:

--- Цитата: Миха42 от 10 Апрель 2020, 23:36:35 ---На счёт воды, думаю это будет маленько неправильно если она не будет убивать
--- Конец цитаты ---
Не, ну а чо. Вон Марево под водой не дохнет, а местный гг даже если по пояс зашёл в воду, то сразу кони двигает :lol:

--- Цитата: Миха42 от 10 Апрель 2020, 23:36:35 ---Вобщем как дойду до данного кода погляжу что с ним можно сделать.
--- Конец цитаты ---
Угу, глянь, мож удастся что сделать с этим..

--- Цитата: Миха42 от 10 Апрель 2020, 23:36:35 ---Нашол так же и ссылки на код музыки
--- Конец цитаты ---
Мож её отключить? А то задалбывает эта повторяющаяся без конца мелодия

Guyver(X.B.M.):
https://www.romhacking.net/hacks/4293/ - какие ограничения у этой версии в плане расширения рома?

Миха42:

--- Цитата: Еmsi-D от 11 Апрель 2020, 06:02:48 ---Не, ну а чо. Вон Марево под водой не дохнет, а местный гг даже если по пояс зашёл в воду, то сразу кони двигает :lol:Угу, глянь, мож удастся что сделать с этим..Мож её отключить? А то задалбывает эта повторяющаяся без конца мелодия

--- Конец цитаты ---

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

Музыку отключить можно без проблем. ) Но в тишине тоже скучно.

Добавлено позже:

--- Цитата: Guyver(X.B.M.) от 11 Апрель 2020, 08:18:19 ---https://www.romhacking.net/hacks/4293/ - какие ограничения у этой версии в плане расширения рома?

--- Конец цитаты ---

Не знал что есть уже в ммс3, у меня во всех сборниках лишь cnrom версия была, вот и взялся за переделку под ммс3.

Возможности ммс3 судя по литературе
До 512кб PRG
До 256кб CHR
И +8кб RAM в дополнение к имеющимся в приставке 2кб RAM

Guyver(X.B.M.):
Теперь будешь переделывать нормальную версию?

Миха42:
Скачал глянул, это патч, он лишь делает возможным запуск игры на ммс3 маппере, распространённом для записи на железо, но он не переписывает весь код. В игре при эмуляции основной код игры находится в первой части 8х0 -AxF остальная часть Bx0 -Fx0  по большей части несёт в себе массивы информации игры, так вот маппер ммс3 может менять банки по адресам 8х0-9xF и Ax0-BxF, a Ex0-FxF неизменяемый. Так что как не крути, а переписывать весь код всё таки прийдётся чтоб заточить его нормально под данный маппер.

Миха42:
Пока занят переписыванием кода игры под ммс3 и раскидыванием кода и массивов по prg банкам рома, для удобства переключения банок с нужным кодом и расширения места в роме.
На данный момент уже выкинул в отдельную банку всю музыку из игры, но возник вопрос, может для удобства стоило и код обработки массива музыки с воспроизведением выбросить в отдельную банку?    o_0
Так сказать на случай если со временем будет желание сменить музыку переделать.
Если я правильно понял, то во всех играх используется собственный код обработки массива музыки с собственными поинтами, а значит и уже имеющийся код обработки новой вставленной музыки будет не востребован и понадобиться другой код соответствующий под код новой музыки.

Так как сделать проще оставить данный код воспроизведения в неизменяемой банке рома в надежде что у кого-то получится переписать музыку под соответствующий оригинальный код игры или всё же выкинуть всё вместе в отдельную банку?  :neznayu:

Kinbeas:

--- Цитата: Миха42 от 29 Март 2020, 16:08:26 ---Но с появлением эмуляторов вновь решил пройти её добавив себе ключей, чтоб наверняка.

--- Конец цитаты ---

--- Цитата: Миха42 от 29 Март 2020, 16:08:26 ---Давно хотелось бы переделать уровни, так сказать состряпать новенькую карту.
--- Конец цитаты ---

Так ты сначала оригинал то пройди по-нормальному.  :facepalm:

Guyver(X.B.M.):
В оригинале ещё много глюков. К примеру, можно читерить неслабо, когда тебя в стены вдавливает лифтом и ты не умираешь. Когда мигающий. Можно попасть в другие комнаты через стены, не беря ключи.

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

Миха42:

--- Цитата: +Kinbeas+ от 15 Апрель 2020, 22:07:40 ---Так ты сначала оригинал то пройди по-нормальному.  :facepalm:

--- Конец цитаты ---

Разумеется проходил. ;)
Ну или вернее почти, это была моя самая большая аплошность в то время, дошол до принцессы, открыв все двери к ней, но прежде чем её взять решил ещё побродить так сказать открыть до конца все комнаты на карте, но попал в западню после с ключами и не смог вернуться обратно к ней чтоб закончить.  :lol:
А после уже с кучей ключей прошол чтоб наверняка.  :)
Самый гемор был в двух локах с кучей ящиков и свечек в первый раз, и другого пути не было чтоб мимо пройти, на них уйму времени потратил в своё время пока разгадал как пройти.  ^_^

Добавлено позже:

--- Цитата: Guyver(X.B.M.) от 15 Апрель 2020, 23:11:08 ---В оригинале ещё много глюков. К примеру, можно читерить неслабо, когда тебя в стены вдавливает лифтом и ты не умираешь. Когда мигающий. Можно попасть в другие комнаты через стены, не беря ключи.

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

--- Конец цитаты ---

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

Кстати нашол глюк в игре по чему не удавалось красные ключи взломать при старте игры чтоб начать сразу с ними, из-за которых начинались глюки при взломе пропадали предметы в локациях, в новом коде уже исправил это.  ^_^

Осталось найти ещё как исправить баг с жизнями в игре, когда можно было подгодать взять жизнь, и за очки одновременно получить вторую, после откатить игру на автосохранение назад, жизнь снова появиться в локации и очки уменьшаться как были до входа в комнату, даже отнимут жизнь которую брал, НО ту что давали за количество очков не отнимали, в результате получал 2 жизни а ворачивал одну при откате, таким образом можно было набрать кучу жизней в игре без всяких взломов. Это я ещё раньше на стареньком денди так жизни добавлял себе.  ;)

Mefistotel:
Если получится под mmc3 нормально переписать оригинальный ром, то скинь его, пжл. На ромхакинге куча таких заплаток для игр, где наставлено костылей. И потом куча мусора лишнего в роме и дублирования данных в новых банках.

Миха42:
Разумеется скину, только вот дела продвигаются ппц как долго, приходиться в ручную каждый байт переписывать, каждое обращение к памяти в блокноте приписывать чтоб знать что и для чего, а так же всё дерево процессов jmp, jsr на листе расписывать разрисовывать чтоб потом накладок не вышло что к банку обратился из подфункции, а банк памяти в этот момент другой, да и банки лишний раз не дёргать постоянно, только для загрузки данных из массивов в момент прогрузки локаций, и смены палитры, и графики. Чтоб в основном банк с музыкой был подключен, к нему на много больше обращений идёт. Так же планирую разовый код что редко используется тоже закинуть в отдельный второй банк памяти, чтоб больше свободного места было в не меняющемся банке.

Но вот по поводу кода музыки сейчас загвоздка вышла, переписать уже переписал всё все поинты изменил, и массив выкинул в отдельный банк, вот и думаю что возможно зря оставил в несменном банке код музыки, его наверно тоже стоит выкинуть на всякий случай. А это блин опять весь его переписывать снова.  <_<
И так уже два раза переписываю весь код с начала, первый раз не с того прерывания начал код писать намудрил в итоге, а во второй раз условный переход прошляпил и после rts настрочил кучу того что не в своём порядке идёт в результате каша вышла, а смещать код и вставку делать это ппц сколько заметок переписывать и путаницы сколь, вот и начал уже в третий раз код переписывать, стараюсь внимательнее на этот раз быть. Но всё равно, то и дело после написания сталкиваюсь с кучей моментов которые можно было упростить и переделать, либо наоборот дополнить что-то местами, в результате опять не совсем гладко всё выходит, но теперь между всеми функциями оставляю свободное место чтоб потом легче было править ньюансы, и меньше лепить что попало.

Kinbeas:

--- Цитата: Миха42 от 15 Апрель 2020, 23:49:39 ---на счёт прохождения сквозь стены пока бессмертный, так оно так и задумано.
--- Конец цитаты ---
Если это так, то минус разработчикам.

Миха42:
Вопрос не по теме конечно, но подскажите плиз нормальный переводчик из 16еричной системы в 2ичную и обратно?

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

Желательно на комп готовый переводчик под win10

Rumata:
А Калькулятор в Виндовс чем не угодил?

Sharpnull:

--- Цитата: Миха42 от 16 Апрель 2020, 21:36:49 ---А то в инете калькуляторов куча, но в 2оичной не правильно считают.
--- Конец цитаты ---
Это как можно неправильно считать?
Я пользуюсь консолью Python 3. bin(0xFF) выведет '0b11111111', hex(0b11111111) выведет '0xff'. Хотя стандартный калькулятор удобнее в чём-то.
--------
Да и в уме переводится несложно, потому хекс и используют.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии