[ Главная | Ресурсы | FAQ ] Уроки: [ Введение | DatePlan | SwissClock | HandMap | MobileDB | Noter | ThinkDB | HandMap33 | Lingua Franca | AlarmMaster | Race Fever | TinySheet | Strategic Commander | FlipChart ]
Strategic Commander - это лучшая стратегическая игра для Palm.
Пытаемся зарегистрироваться. Получаем сообщение из tSTR1b58.bin.
00009ab2 2f3c1b58044c L1671 MOVE.L #458753100!$1b58044c,-(A7) 00009ab8 600a BRA L1672 00009aba 2000 MOVE.L D0,D0
А чуть ниже, в tSTR1c20.bin, лежит правильное сообщение о том, что все удачно прошло.
Для регистрации используется форма tFRM0a28.bin.
Ничего не понятно, буду искать с помощью вызова debug (4e48).
Ставлю 4e48 в 0000e25e... не получилось. В 0000e962... опять неудача. В 00018684... Ура. Оно. Так, отсюда мы идем на L4140. Чтобы разобраться, ставлю 4e48 на 00018688 и использую debuffer.
0005f4fc: 544f adda.w #$2, a7 0005f4fe: 6000 06d2 bra #$6d2 0005f502: 377c 0005 0004 move.w #$0005, $4(a3) 0005f508: 377c 000c 0006 move.w #$000c, $6(a3) 0005f50e: 3f3c 03eb move.w #$03eb, -(a7) 0005f512: 1f3c 0002 move.b #$02, -(a7) 0005f516: 4e4f a173 SysTrap FrmGetActiveForm 0005f51a: 2f08 move.l a0, -(a7) 0005f51c: 4e4f a18b SysTrap FrmSetControlGroupSelection 0005f520: 504f adda.w #$8, a7
Пойдем по шагам... Так, мы действительно прыгаем на L4140. Что дальше? А дальше Emulator падает... Пробуем ещё раз. 00018d60 в scmdr.prc.s - это 0005fc5a в debuffer'е.
00055a52: 1600 move.b d0, d3
А 00055a52 в debuffer'е - это 0000eb58. Но это не похоже на правду... Пойдем другим путем: При выборе Medium Universe или более 2 игроков мы видим сообщения из tSTR1c84.bin и tSTR1ce8.bin.
Продолжаем попытки. Пройдя с 00018684 по шагам, доходим до первого (?) сравнения в 000187e2:
000187e2 5c4f ADDQ.W #6,A7
Попробую поставить debug, чтобы определить, в какой момент это происходит. Ага. Уже где-то после попытки ввода кода... Тогда на 00018690, чтобы узнать где происходит сравнение, в L4140 или тут. Похоже, что в L4140... Попробую поставить debug прямо на 00018d60 и проверить, используется ли тот код где-нибудь кроме регистрации. Безуспешно. Используется он, похоже, много где...
Буду искать, где выводятся окошки Info.
0000d504 - нет эффекта 00019a9a - тоже нет эффекта 00005502 - нет 0000dd98 - нет 000186e2 - ура, нашел. Тут оно. Debug вызывается до появления формы. 0001873c - 00018796 - 00018c24 - 00019310 - 00019958 -
Попробую проверить 18706, надо найти, где именно открывается форма. Ага. 18706 уже после формы. Значит, форма открывается 186fc. Чтобы это проверить, ставлю debug на 18700. Форма все-равно открылась, значит, действительно открытие формы делается такой строчкой:
000186fc 4e4fa173 TRAP #15,$A173 = sysTrapFrmGetActiveForm
Теперь проверю, используется ли это для вывода всех окон Info. Забавно, но нет. Только для вывода окошка после попытки выбора размера Small. :) Проверю теперь остальные 5 адресов выше.
0001873c - а вот это для Medium 00018796 - 00018c24 - 00019310 - 00019958 -
Да и предыдущие 4 (d504-dd98) тоже, наверное, что-то делали такое же.
Попробую посмотреть, как я попадаю на 186e2, где открывается это Info. На L4058 попадаю с 000186b8. Попробую его забить 4e71. Ура!!! Получилось! Теперь я могу спокойно нажимать на Sm., он выберется и я могу с этим размером играть!!! Ура! Осталось сделать то же самое для всех остальных. Это просто. Нахожу все $44c (выбор формы Info), ставлю после них 4e48, смотрю, что это за диалог и где он показывается. Потом для всех диалогов, которые мне не нужны, как, например, Small, я смотрю, откуда я туда перешел и забиваю 4e71. Возможно, так получится даже регистрация, но, совершенно точно, получится включить все размеры и любое число игроков. :))) Ура!
Итак, проверяем все ссылки на $44c. Перечислю их ещё раз:
000186e2 - Small size of Universe 0001873c - Medium size of Universe 00018796 - Large size of Universe 00018c24 - это не число игроков и ни одно из трех сообщений в регистрации 00019310 - аналогично 00019958 - аналогично 0000d504 - аналогично 00019a9a - аналогично 00005502 - аналогично 0000dd98 - аналогично
Так... Непонятно. Значит, эти сообщения выводятся как-то по другому...
Смотрим на
000186de 3f3c044c L4058 MOVE.W #1100!$44c,-(A7) 000186e2 3f04 MOVE.W D4,-(A7) 000186e4 600a BRA L4059
Хотя в -(A7) и копируется $44c, но шагом после копируется содержимое регистра D4... Интересно, а зачем. Ведь тогда $44c исчезнет. Поставил debug на 186e2. Запуситил debuffer и увидел, что D4=00041c84. Копируется только слово, то есть 1c84, а значит, это именно та строчка tSTR1c84.bin, где лежит сообщение про 'Tiny'!
А как в D4 попало это значение? Чуть выше мы видим
000186b4 382b0008 MOVE.W 8(A3),D4 000186b8 6624 BNE L4058
То есть 8(A3), что бы это не было, оказалось равным 1c84.
Но, что дальше делать, совершенно не понятно. Подойдем с другой стороны. Эти три сообщения выводятся в 000186fc, 00018756 и 000187b0. А проверим-ка остальные подобные команды рядом, например, 00018782. Ставим debug в 0001877e. Нигде эффекта не заметно... Тогда 000186a4, поставив debug в 000186a0. Забавно. Он реагирует на нажатие на Tiny...
Проверим 00018658. Неудача.
Ищем, где открывается форма настроек tFRM03e8.bin.
624a, 62a2, 9a24 - неудачно. a87e, d3d8, e8da - что-то получилось. Ищем, где именно. a87e - мимо. d3d8 - мимо. e8da - попал.
смотрим на форму a28 и ищем, где она появляется.
e962 - регистрация на start screen. 18684 - регистрация на экране настроек.
проверим 186a8
Что ж. Для начала откроем все размеры. 000186b8, 00018712, 0001876c. Забиваем 4e71. Работает любой размер.
Пробую разобраться с дебуфером с регистрацией (18684 или e962). Возможно здесь emulator не будет виснуть и удастся понять, где и куда идет что.Пробуем отладку в 18688. Не проходит...
Пройдя немного дальше по коду после отключенных запретов на Small, Medium и Large, вижу
00018830 4a05 TST.B D5 00018832 661c BNE L4071 00018834 2f3c13ec044c MOVE.L #334234700!$13ec044c,-(A7) 0001883a 600a BRA L4070 0001883c 2000 MOVE.L D0,D0 0001883e 2000 MOVE.L D0,D0 00018840 2000 MOVE.L D0,D0 00018842 2000 MOVE.L D0,D0 00018844 2000 MOVE.L D0,D0 00018846 4eadf9d6 L4070 JSR -1578(A5) 0001884a 584f ADDQ.W #4,A7 0001884c 60000338 BRA L4114 00018850 0c440008 L4071 CMPI.W #8,D4 00018854 6f1c BLE L4073 00018856 2f3c2580044c MOVE.L #629146700!$2580044c,-(A7) 0001885c 600a BRA L4072 0001885e 2000 MOVE.L D0,D0
Сравнения... Значит, это то, что нужно. Смотрю на 18834 и 18856. Ищу соответствующие ресурсы и нахожу строчки про то, что не может быть больше 8 игроков и нужно хотя бы одного некомпьютерного. Ага! Надо найти в такой же форме сообщение о том, что не может быть больше двух и тогда... Это будет 1ce8044c. Ищем, находим.
00018c04 661a BNE L4122 00018c06 2f3c1ce8044c MOVE.L #484967500!$1ce8044c,-(A7) 00018c0c 600a BRA L4121
Ставим на 00018c04 безусловный переход на L4122. Видим в результате сообщение об ошибке, но про 'Tiny' universe... Зато находим пониже
00018c46 640c BCC L4125 00018c48 3f3c04b0 MOVE.W #1200!$4b0,-(A7) 00018c4c 4e4fa19c TRAP #15,$A19C = sysTrapFrmPopupForm 00018c50 544f ADDQ.W #2,A7
Это вывод на экран формы добавления игрока. Это то, что нам нужно! Чтобы туда попать, нам нужно избежать перехода на 00018c46 и сделать прыжок на L4124. Смотрим, откуда. Ага!
00018bf6 6642 BNE L4124 00018bf8 362b0008 MOVE.W 8(A3),D3 00018bfc 673c BEQ L4124 00018bfe 0c6b1c840008 CMPI.W #7300!$1c84,8(A3) 00018c04 661a BNE L4122
Попробуем поставить на 00018bf6 безусловный переход и забить 00018c46. Все классно, добавляется. Но при запуске выводится сообщение о том, что регистрационный код потерян... (tSTR1e78.bin) Понятно. Он ещё и тут проверяет. :-(
Это происходит в
0000e2e4 620a BHI L2240 0000e2e6 206def58 MOVEA.L -4264(A5),A0 0000e2ea 182801d0 MOVE.B 464(A0),D4 0000e2ee 671c BEQ L2242 0000e2f0 2f3c1e78044c L2240 MOVE.L #511181900!$1e78044c,-(A7) 0000e2f6 600a BRA L2241
Кстати, мы теперь знаем, как выглядит вывод окошек с сообщениями:
MOVE.L #.......$<номер STR ресурса>044c,-(A7)
Попробуем забить e2e4. :) Ага. Игра автоматически сделала ход. А по тому, что после меня компьютер ходил два раза, я делаю вывод, что все получилось!!!!!! :)
Похоже, что мы победили. :) Подведём итоги. Надо в трех местах отключить запрет на большие размеры
000186b8 6624 4e71 00018712 6624 4e71 0001876c 6624 4e71
отключить
00018bf6 6642 6042 00018c46 640c 4e71
и отключить проверку
0000e2e4 620a 4e71
Урок 11 - TinySheet | Урок 13 - FlipChart |
Copyright © PalmPot.
Последнее обновление 03.02.2001.