Разработка и ромхакинг > Ромхакинг и программирование
[NES] Battletoads / Battletoads & Double Dragon
(1/12) > >>
feos:
ОБНОВЛЕНИЕ от 18 августа:

Начат проект хакинга баттлоадс ( и также БТ и ДД ) где будет дизассемблироваться вся игра, и также будут исходники в свободном доступе для всех.

Wiki для документирвоания трюков, глюков, процедур и всего чего угодно по движку Жаб/БТДД.
http://code.google.com/p/feos-tas/wiki/Glitch_List

Также в моем гугль-коде проекты обеих игр для IDA 5.2 (с поддержкой 6502), разрабатываемые Ti_ и мной.
http://code.google.com/p/feos-tas/source/browse/#svn%2Ftrunk%2FDisAssemble

Приглашаю тех, кто уже хакал или хакает эти игры, делиться наработками, дополнениями и исправлениями!


Как скачивать с SVN:

Скачиваете TortoiseSVN и устанавливаете. Создаете новую папку, кликаете ПКМ, выбираете SVN Checkout. Копипастите туда ссылку http://feos-tas.googlecode.com/svn/trunk/DisAssemble/

Мой проект копируется вам на комп. Потом чтобы обновить контент ПКМ по папке, SVN - Update. Так у вас будет всегда свежая ревизия.


СТАРЫЙ ПОСТ:

Ti_,  нет ли желания раздебажить глюк с созданием объекта "конец 12 уровня" в 3 уровне НЕСных жаб? У меня есть скрипт, показывающий содержимое массива объектов и сами эти объекты на экране, а также мувик, в котором КОНЕЦ вызывается нажатием кнопок джоя, сумма битов которых равна ID конца уровня, и так он создается.

Еще неплохо бы вычислить, как работает инпутозависимое РНГ. Оно тикает либо по несколько раз в кадр, либо каждый кадр, и зажимаемый инпут продвигает его значение дальше, чем обычно, притом ячеек РНГ скорее всего 2, к ним привязано все поведение врагов и куча чего еще.

Кстати в БТДД жабам добавили стандартный удар из присяда, который в первой части работал рандомно на особых боссах.
Ti_:

--- Цитата: feos от 06 Август 2012, 07:54:36 ---Ti_,  нет ли желания раздебажить глюк с созданием объекта "конец 12 уровня" в 3 уровне НЕСных жаб? У меня есть скрипт, показывающий содержимое массива объектов и сами эти объекты на экране, а также мувик, в котором КОНЕЦ вызывается нажатием кнопок джоя, сумма битов которых равна ID конца уровня, и так он создается.

--- Конец цитаты ---
Меняется номер уровня ($0010)? Дык ставим брейкпоинт на запись в номер уровня .. перед самым началом запуска глюка ставим паузу, включаем логгинг кода, вызываем глюк, как вылезет брейкпоинт за запись в ячейку уровня останаваливаем лог.  Ну и там в логах можно будет посмотреть уже как произошел переход к чему-нить вроде STA $10.
Ну если хочешь выкладывай попробую глянуть, а заодно и давай тогда всё что наломано.

feos:
Да номер уровня ясное дело меняется, но игра при вызове 0x7F в слот 0x3CD думает, что произаошо окончание 12 уровня и касание его чекпойнта, поэтому жаба подлетает, гремят зрывы и уровен переключается, но в данном случае не на 13, а на 4.

Суть глюка: одна жаба стоит на земле, другая прыгает на байк и умирает в дырке. Так как чекпойнт трассы еще не активирован, но умерла жаба на байке, проискходит рестарт с самого начала 3 уровня. Так как РНГ у нас инпутозависимое (да плюс ответственное за точное время генерации врагов и их поведение, за точную длительность лага между уровнями, за типы ударо жаб на боссах и др.), я думаю, из него берутся данные для генерации объектов. А сама генерация объектов происходит (как заключил АнС) по принципу столбиков на трассе.

Хотя есть пара кадров сразу после рестарта ,когда можно создавать объекты непосредственно инпутом. Так, в текущем тасе мы нажали B+S+T+U+D+L+R (2^7+2^6+2^5+2^4+2^3+2^2+2^1 = 0x7F) на 2 джое во 2 кадр и СРАЗУ создали конец уровня. Если нажимать в этот кадр другие сочетания, может ломаться палитра и др. глюки.


Скрипт:
http://feos-tas.googlecode.com/svn/trunk/LUA/BattletoadsObjects.lua

Демка:
http://code.google.com/p/feos-tas/downloads/detail?name=feos%2Cmeshuggah-battletoads.7z

Архив с наработками АнСа:
http://rghost.ru/39606249

Для навигации по мувику советую юзать ТАСЭдитор (за счет гринзоны позволяет перематывать назад и прыгать на любой кадр), он вполне совместим с дебаггером.
http://fceux.com/zip
Ti_:
2 feos:
Я посмотрел причину бага.   Для рестарта уровня с мотоциклов как известно если умереть уровень начинается не с начала, а с чекпойнта.   Точка возврата (нового начала уровня - откуда продолжить читать объекты при рестарте) записывается в память, исходя из текущего адреса конфига.

--- Код: ---BANK0:B7E0                 LDA     lvl_cfg_adr
BANK0:B7E2                 SEC                     ; current adress-$b
BANK0:B7E3                 SBC     #$B
BANK0:B7E5                 STA     lvl_cfg_new
BANK0:B7E7                 LDA     lvl_cfg_adr+1
BANK0:B7E9                 SBC     #0
BANK0:B7EB                 STA     lvl_cfg_new+1

--- Конец кода ---
lvl_cfg_adr = $B7 ; текущий адрес конфига откуда читаются объекты
lvl_cfg_new = $E5  ;  адрес конфига для чекпоинта

Этот код выполяется только когда игрок взял чекпоинт (первую палочку).  Когда игрок умирает на мотоцикле из lvl_cfg_new  восстанавливается конфиг в lvl_cfg_adr.
А поскольку ты умираешь раньше взятия палочки адрес конфига еще не прописан. (ячейка $e5 пустая 0000)
$0000 - как известно это начало оперативки nes.  Поэтому чтение объектов уровня идет не с нужного адреса рома, а из оперативки прям с самого её начала. 
А как известно как раз область чтоли 0000-0020  самая часто используемая. Можно в доках по нес почитать. Соотвественно туда пишется постоянно и дохрена всего, и видимо нажатия кнопок тоже. 
Я не проверял, но скорее всего нажимая кнопки ты и создаешь там свой собственный объект. ($FF - вроде бы флаг конца уровня да? - и если все кнопки нажать будет $FF?)





Добавлено позже:
Глянул там объекты читаются вообще даже от 0000 до 014A.  (B*1E=14A) =  30 левых объектов - вот это и есть взрывы , смены палитры и т.д.
 (У меня есть список только сеговских объектов от bt$dd, все номера вроде несовскому бт и дд соответвуют - если надо пиши скину; а в первом бт надо проверять какие там объекты есть )
feos:
Проверю завтра.
Зажимаем все кроме А и получаем сумму инпута 0x7F.
Довольно шокирующая инфа если это так и есть.

Можешь запустить скрипт и мой мувик, увидишь ID большинства объектов. Или сам поиграй. Скрипт выводит содержимое слотов на первом пикселе экрана, так что надо в настройках видео поднять границу экрана с 8 до 0.
Ti_:

--- Цитата: feos от 06 Август 2012, 22:03:02 ---Можешь запустить скрипт и мой мувик, увидишь ID большинства объектов.

--- Конец цитаты ---
Я их номера в рам ватче смотрел.
А вот и объекты:

--- Код: ---BANK0:9B8A obj_code_ptrs:  .WORD no_obj_code       ; DATA XREF: sub_0_87C2+13r
BANK0:9B8A                                         ; sub_0_87C2+18r
BANK0:9B8C                 .WORD object_player     ; 1
BANK0:9B8E                 .WORD object_player     ; 2
BANK0:9B90                 .WORD loc_0_AE2D        ; 3   ? reload gfx?
BANK0:9B92                 .WORD object_delete?    ; 4
BANK0:9B94                 .WORD hodulya_golova    ; 5 (для босса первого левела это шар на земле)
BANK0:9B96                 .WORD object_verevka    ; 6
BANK0:9B98                 .WORD object_verevka    ; 7
BANK0:9B9A                 .WORD loc_0_B5D1        ; 8
BANK0:9B9C                 .WORD loc_0_CFD0        ; 9
BANK0:9B9E                 .WORD object_muhi       ; A Мухи
BANK0:9BA0                 .WORD object_Psyko_Pig  ; B   ; бичи с первого левела
BANK0:9BA2                 .WORD object_dmg_hit    ; C удар
BANK0:9BA4                 .WORD object_level1_boss_noga ; D  нога босса первого уровня
BANK0:9BA6                 .WORD object_level1_boss_turrets ; E   турели босса первого левела (2штуки создаются)
BANK0:9BA8                 .WORD object_level1_boss ; F
BANK0:9BAA                 .WORD object_level1_boss_bullet ; 10    пули от пушек первого босса
BANK0:9BAC                 .WORD object_tall_walker ; 11 ходуля
BANK0:9BAE                 .WORD object_tall_walker ; 12
BANK0:9BB0                 .WORD object_raven      ; 13
BANK0:9BB2                 .WORD object_dead_raven ; 14
BANK0:9BB4                 .WORD object_invader    ; 15  ворующие жизни
BANK0:9BB6                 .WORD object_raven_large ; 16
BANK0:9BB8                 .WORD object_dragon     ; 17
BANK0:9BBA                 .WORD object_bike       ; 18  в тунеле байк, на 5-ом доска, в 7 самолет
BANK0:9BBC                 .WORD object_set_palette ; 19
BANK0:9BBE                 .WORD object_infernorace_animation ; 1a
BANK0:9BC0                 .WORD hodulya_golova    ; 1b
BANK0:9BC2                 .WORD hodulya_palka     ; 1c
BANK0:9BC4                 .WORD flying_life_bar   ; 1d  летящий кубик жизней
BANK0:9BC6                 .WORD object_fireball   ; 1e  выстрелы драконов с 1-ого левела
BANK0:9BC8                 .WORD loc_0_E2A4        ; 1f
BANK0:9BCA                 .WORD object_psyko_Pig_ambush ; 20    бичи с первого левела под землей
BANK0:9BCC                 .WORD object_turbo_tunnel_falling_obstacle ; 21
BANK0:9BCE                 .WORD object_WARP       ; 22  warp/hodulya poyavlenie
BANK0:9BD0                 .WORD object_turbo_tunnel_obstacle ; 23
BANK0:9BD2                 .WORD object_turbo_tunnel_obstacle ; 24
BANK0:9BD4                 .WORD object_turbo_tunnel_obstacle ; 25
BANK0:9BD6                 .WORD object_checkpoint_part1 ; 26   перегордка-чекпоинт турбо-тунеля (или водного) (или инферно)
BANK0:9BD8                 .WORD object_checkpoint_part2 ; 27
BANK0:9BDA                 .WORD object_turbo_tunnel_rat_rocket ; 28  крыса на ракете
BANK0:9BDC                 .WORD object_turbo_tunnel_falling_obstacle ; 29  перегордка которую бросает крыса на ракете
BANK0:9BDE                 .WORD object_turbo_tunnel_obstacle_up ; 2a
BANK0:9BE0                 .WORD object_turbo_tunnel_fly_obstacle ; 2b  летающие хрени в турбо тунелле
BANK0:9BE2                 .WORD object_turbo_tunnel_balls ; 2c  шары при падении
BANK0:9BE4                 .WORD object_saturn_toadtrap ; 2d   кусачки со 2-ого левела
BANK0:9BE6                 .WORD object_electro_trap ; 2e  2-ой левел электричество
BANK0:9BE8                 .WORD object_raven_claw ; 2f  ножи от ворон
BANK0:9BEA                 .WORD objects_power_ups ; 30  всякие поверапы и очки
BANK0:9BEC                 .WORD object_retro_blaster ; 31
BANK0:9BEE                 .WORD object_retro_blaster_shoot ; 32  выстрелы пушек 2-ого левела
BANK0:9BF0                 .WORD object_snowman    ; 33
BANK0:9BF2                 .WORD platform_on_last_level ; 34
BANK0:9BF4                 .WORD object_level4_platform_mov_down ; 35  и на последнем
BANK0:9BF6                 .WORD object_prujina    ; 36
BANK0:9BF8                 .WORD object_rotating_spike ; 37  вращающийся шип ласт левел
BANK0:9BFA                 .WORD object_ice_cube   ; 38
BANK0:9BFC                 .WORD object_sosulka    ; 39
BANK0:9BFE                 .WORD object_snowball   ; 3a  ili electrozaryad
BANK0:9C00                 .WORD object_snow       ; 3b  кучка снега
BANK0:9C02                 .WORD object_leve4_wall ; 3c  перегородка которую нужно разбивать
BANK0:9C04                 .WORD object_large_snowball ; 3d
BANK0:9C06                 .WORD object_level4_moving_platform ; 3e
BANK0:9C08                 .WORD object_level4_wall_moving ; 3f  перегородка двигающаяся вверхвниз
BANK0:9C0A                 .WORD object_level4_spike_moving ; 40
BANK0:9C0C                 .WORD object_level4_checkpoint ; 41
BANK0:9C0E                 .WORD object_levels_xz  ; 42  vsegda na urovne (effect?) (levels 4,6,8)
BANK0:9C10                 .WORD object_level4_sosulka_kamennaya ; 43
BANK0:9C12                 .WORD loc_0_FD9E        ; 44
BANK0:9C14                 .WORD object_level4_spike_moving ; 45
BANK0:9C16                 .WORD object_dead_robo_manus_ili_begushaya_krisa ; 46   ili koroleva
BANK0:9C18                 .WORD object_giblet     ; 47  крысы турбо тунеля
BANK0:9C1A                 .WORD object_inferno_race_create ; 48
BANK0:9C1C                 .WORD object_turbo_tunnel_warning_sprite ; 49
BANK0:9C1E                 .WORD object_elevator_platform ; 4a
BANK0:9C20                 .WORD object_rat_race_palette_fade ; 4b
BANK0:9C22                 .WORD object_snake      ; 4c
BANK0:9C24                 .WORD object_snake_animation ; 4d   SNAKE PIT LEVEL
BANK0:9C26                 .WORD object_snake_hide_head ; 4e
BANK0:9C28                 .WORD snake_pit_xz      ; 4f
BANK0:9C2A                 .WORD object_sentry_drone ; 50
BANK0:9C2C                 .WORD object_slizen     ; 51  8-ой левел которые на бошку липнут
BANK0:9C2E                 .WORD object_gas_turret ; 52
BANK0:9C30                 .WORD object_gas        ; 53
BANK0:9C32                 .WORD object_ventilyator ; 54
BANK0:9C34                 .WORD object_ventilyator ; 55
BANK0:9C36                 .WORD object_veter      ; 56
BANK0:9C38                 .WORD object_ball       ; 57  level-8
BANK0:9C3A                 .WORD loc_0_F4CB        ; 58
BANK0:9C3C                 .WORD object_ball_laucnh_hole ; 59  level-8
BANK0:9C3E                 .WORD object_l10_xz     ; 5a
BANK0:9C40                 .WORD object_screen_light ; 5b  мигание экрана при ударе по 1-ому боссу
BANK0:9C42                 .WORD object_hordhead   ; 5c  быки ласт левел
BANK0:9C44                 .WORD object_last_lvl_flying ; 5d  летающий и дующий
BANK0:9C46                 .WORD object_last_lvl_flying ; 5e
BANK0:9C48                 .WORD object_palka_v_stene ; 5f
BANK0:9C4A                 .WORD object_last_lvl_head ; 60
BANK0:9C4C                 .WORD loc_0_F350        ; 61
BANK0:9C4E                 .WORD object_swellcheeks ; 62  ласт левел летающий
BANK0:9C50                 .WORD object_level1_boss_dmg_spr ; 63  спрайт разбитого стекла первого босса
BANK0:9C52                 .WORD object_level1_boss_ball ; 64  ; шар первого босса в руке
BANK0:9C54                 .WORD object_level1_boss_dead ; 65  обломок первого босса - 4шт.
BANK0:9C56                 .WORD rocket_rat2_inferno ; 66
BANK0:9C58                 .WORD inferno_race_electricity ; 67
BANK0:9C5A                 .WORD object_level5_watermine_p1 ; 68  (takje inferno fires)
BANK0:9C5C                 .WORD object_level7_fires ; 69
BANK0:9C5E                 .WORD object_level7_rockets ; 6a
BANK0:9C60                 .WORD object_shesterenka ; 6b  terra tubes
BANK0:9C62                 .WORD object_water_hit  ; 6c  удар сёрфа об воду
BANK0:9C64                 .WORD object_robot      ; 6d terra tubes
BANK0:9C66                 .WORD object_electrofish ; 6e
BANK0:9C68                 .WORD object_hammerfish ; 6f
BANK0:9C6A                 .WORD object_shark      ; 70
BANK0:9C6C                 .WORD object_shark      ; 71
BANK0:9C6E                 .WORD object_utka       ; 72
BANK0:9C70                 .WORD object_angelica_ili_pimpl ; 73
BANK0:9C72                 .WORD object_verevka_s_propellerom ; 74
BANK0:9C74                 .WORD object_terra_tubes_xz ; 75
BANK0:9C76                 .WORD object_vodovorot  ; 76
BANK0:9C78                 .WORD object_brevno     ; 77
BANK0:9C7A                 .WORD object_level5_watermine_p2 ; 78
BANK0:9C7C                 .WORD object_big_blag   ; 79
BANK0:9C7E                 .WORD object_electroball ; 7a
BANK0:9C80                 .WORD object_electroball_phase2 ; 7b
BANK0:9C82                 .WORD object_general_slaughter ; 7c
BANK0:9C84                 .WORD object_robu_manus ; 7d
BANK0:9C86                 .WORD object_dark_queen ; 7e   poyavlaetsa 2 raza
BANK0:9C88                 .WORD object_last_lvl_end ; 7f  взрыв перед появлением королевы
--- Конец кода ---
feos:
Это случайно не сеговский код? Откуда в 8-битке Word?

А РНГ можешь вычислисть? Оно и в бтдд и в жабах одинаково работает, только возможно адрес немного отличается (например РАМ-карта бтдд смещена на 1 ячейку относительно первых жаб). Наблюдение за генератором рандома имеет прямую пользу для будущих тасов (будь то наблюдение в RAM watch или в дебаггере, если оно тикает несколько раз в кадр).
Ti_:

--- Цитата: feos от 07 Август 2012, 15:23:42 ---Это случайно не сеговский код? Откуда в 8-битке Word?

А РНГ можешь вычислисть? Оно и в бтдд и в жабах одинаково работает, только возможно адрес немного отличается (например РАМ-карта бтдд смещена на 1 ячейку относительно первых жаб). Наблюдение за генератором рандома имеет прямую пользу для будущих тасов (будь то наблюдение в RAM watch или в дебаггере, если оно тикает несколько раз в кадр).

--- Конец цитаты ---
1) не сеговский 2) не код, а список указателей на код объектов 3) адресация на денди 16битная, пример JMP $4984. ; поэтому и поинтеры 16битные.

РНГ, генератор случайного числа? Вычислить можно, просто поставить дебаг на запись в эту ячейку. И вылезет код.  Только что-ты с ним будешь делать? Если ты хочешь портировать этот генератор на С++ или вроде того, то это не у меня спрашивай.
P.S. Только номер ячейки то напиши.


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

--- Цитата: feos от 07 Август 2012, 15:23:42 ---например РАМ-карта бтдд смещена на 1 ячейку относительно первых жаб.

--- Конец цитаты ---
А вот это полезная инфа, спасибо.
Roket:
Ti_,  с какого адреса начинается список врагов первого уровня? Сейчас пытался взломать, получилось только сломать графу и сделать туеву хучу серых свиней и ходуль :?
feos:
Ti_,  я имею в виду, эту ячейку (я склонен думать что их две) надо НАЙТИ. Для этого я предполагаю надо поискать какие адреса меняются вместе с таймером (не факт, что идентично изменениям таймера), когда инпута нет, и потом меняются по другому, когда добавляется инпут. Чтение же из РНГ для определения например поведения врагов происходит далеко не постоянно.

Могу записать пару коротких мувиков, где тот или иной враг ведет себя по-разному, чтобы сравнить, что изменилось в РАМ. Между прочим, если записать мувик в старом ППУ и потом врубить новое и запустить мувик, враги будут свести себя иначе при том же инпуте. Либо картина лага меняется, либо это свидетельство того, что действительно оно тикает между кадрами.

Один из примеров заметности влияния РНГ на игру:
Когда лупим робомануса, надо юзать самый быстрый удар, который не дает боссу летать по экрану - нижний удар кулаками. Чтобы его активизировать, надо попробовать нажимать разные кнопки в кадр ПЕРЕД ударом. Это будет изменять тип удара. Сказывается инпут обоих игроков, даже если они в этот момент находятся в какой-то своей анимации. То есть, не координаты влияют, а именно инпут.
Ti_:

--- Цитата: Roket от 07 Август 2012, 16:07:10 ---Ti_,  с какого адреса начинается список врагов первого уровня? Сейчас пытался взломать, получилось только сломать графу и сделать туеву хучу серых свиней и ходуль :?

--- Конец цитаты ---
Для рома адресс 1E844;  В конфигах - objID, точка появляения - 2байта, еще по два на место появления XYZ, и последние два на аттрибуты. (в bt$dd один из них за жизни отвечал, тут не проверял)


--- Код: ---BANK3:E834 level1_cfg:     .BYTE    1,   0,   0,   0, $60,   1, $78,   2, $10,  $A, $20
BANK3:E834                 .BYTE    2,   0,   0,   0, $80,   1, $78,   2, $10, $14, $20
BANK3:E834                 .BYTE    6,   0,   0,   0, $70,   1, $78,   1, $C0, $60, $20
BANK3:E834                 .BYTE    7,   0,   0,   0, $80,   1, $78,   1, $C0, $80, $20
BANK3:E834                 .BYTE  $22,   0,   0,   1, $30,   1, $48,   0, $D0, $55, $B0
BANK3:E834                 .BYTE  $20,   0,   0,   0, $2E,   1, $9B,   0, $90, $50,   0
BANK3:E834                 .BYTE  $20,   0,   0,   0, $CE,   1, $7B,   0, $90, $48,   0
BANK3:E834                 .BYTE  $22,   0, $60,   0, $E0,   1, $80,   0, $A8,   0, $10
BANK3:E834                 .BYTE    8,   0, $A0,   0, $EC,   1, $42,   0, $98,   1, $20
BANK3:E834                 .BYTE    8,   0, $A0,   1, $6C,   1, $42,   0, $98,   1, $20
BANK3:E834                 .BYTE   $B,   0, $A0,   0, $F0,   1, $48,   0, $90, $FF, $10
BANK3:E834                 .BYTE   $B,   0, $A0,   1, $70,   1, $48,   0, $90, $FF, $10
BANK3:E834                 .BYTE  $22,   0, $F0,   1, $70,   1, $90,   0, $A8,   0, $10
BANK3:E834                 .BYTE  $19,   1,   0,  $F,   0, $10,   0, $1C,   0,   1, $20
BANK3:E834                 .BYTE  $1F,   1, $10,   1, $88,   1, $48,   0, $99, $18, $10
BANK3:E834                 .BYTE   $A,   1, $50,   2, $50,   1, $80,   0, $B0,   0,   0
BANK3:E834                 .BYTE   $A,   1, $50,   2, $50,   1, $A0,   0, $B0, $1F,   0
BANK3:E834                 .BYTE    8,   1, $C0,   2, $4C,   1, $82,   0, $98,   1, $20
BANK3:E834                 .BYTE   $B,   1, $C0,   2, $50,   1, $88,   0, $90, $FF, $10
BANK3:E834                 .BYTE  $19,   2,   0,  $F, $16, $26,   0, $1C,   0,   1, $20
BANK3:E834                 .BYTE  $17,   2, $20,   3, $1F,   1, $70,   0, $A8,   0, $10
BANK3:E834                 .BYTE  $17,   2, $A0,   3, $9F,   1, $50,   0, $A8,   0, $20
BANK3:E834                 .BYTE    8,   3, $E0,   4, $10,   1, $22,   0, $78,   1, $20
BANK3:E834                 .BYTE   $B,   3, $E0,   4, $10,   1, $28,   0, $70, $FF, $10
BANK3:E834                 .BYTE    8,   3, $E0,   4, $D0,   1,   2,   0, $78,   1, $20
BANK3:E834                 .BYTE   $B,   3, $E0,   4, $D0,   1,   8,   0, $70, $FF, $10
BANK3:E834                 .BYTE  $20,   3, $E0,   4, $8E,   1, $5B,   0, $70, $C0,   0
BANK3:E834                 .BYTE   $A,   4, $40,   5, $40,   1, $10,   0, $90, $1F,   0
BANK3:E834                 .BYTE   $A,   4, $40,   5, $50,   1, $20,   0, $90, $1F,   0
BANK3:E834                 .BYTE   $A,   4, $40,   5, $60,   1, $30,   0, $90, $1F,   0
BANK3:E834                 .BYTE   $A,   4, $40,   5, $70,   1, $40,   0, $90, $1F,   0
BANK3:E834                 .BYTE  $30,   4, $51,   5, $50,   1, $28,   0, $80,   9,   0
BANK3:E834                 .BYTE   $D,   4, $D8,   5, $D8,   1, $20,   0, $2A,   0, $20
BANK3:E834                 .BYTE   $E,   6, $C0,   5, $C0,   1,   0,   0, $20, $26, $20
BANK3:E834                 .BYTE   $E,   6, $C0,   5, $C0,   1,   0,   0, $20, $E1, $20
BANK3:E834                 .BYTE   $F,   6, $C0,   5, $C0,   1,   0,   0, $93, $84, $20
BANK3:E834                 .BYTE  $FE

--- Конец кода ---


Добавлено позже:
 А можно и так :

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

--- Цитата: feos от 07 Август 2012, 16:19:37 ---Ti_,  я имею в виду, эту ячейку (я склонен думать что их две) надо НАЙТИ.

--- Конец цитаты ---
Ячейки -  $25-$28, основная $25.  Из нее берется само число для взятия номера анимации одного из супер-ударов.  (число AND #$6  + $71)

--- Цитата ---BANK0:A642                 LDA     rnd_value
BANK0:A644                 AND     #6
BANK0:A646                 ADC     #$71 ; 'q'      ; super-udari (4raznix)
--- Конец цитаты ---

С самим рандомом всё сложнее.  Судя по всему, рандом навечно зациклен и выполняется до прерывания, то есть всё оставшееся время после обработки физики игры игра тупо крутит рандом. 
В самом рандоме 2 участка кода. Первый тупо мешает 4значения рандом числа. Второй мешает эти числа с переменными игры - такими как счетчик кадров, координата X первой жабы,  координаты Y первых четырех объектов, ещё какая-то переменная объекта, ячейка (024).
Джойстики вроде не подмешиваются, но раз рандом выполняется всё время, то любое нажатие будет влиять. Так как код обрабатывая нажатие выполнится быстрее или медленне. Поэтому и возьмется рандом другой.   Плюс к самому рандому(первому) есть переходы из кода игры, от разных событий. 
А ещё есть код рандома в других местах рома , там например во время заставок. Но когда первый левел начинается, память очищается и начальное значение нулевое.


--- Код: ---BANK0:871F random_cycle:                           ; CODE XREF: BANK0:8725j
BANK0:871F                 JSR     change_random_values
BANK0:8722                 JSR     random
BANK0:8725                 JMP     random_cycle
BANK0:8728
BANK0:8728 ; =============== S U B R O U T I N E =======================================
BANK0:8728
BANK0:8728
BANK0:8728 change_random_values:                   ; CODE XREF: BANK0:random_cyclep
BANK0:8728                 LDX     #3
BANK0:872A
BANK0:872A loc_0_872A:                             ; CODE XREF: change_random_values+18j
BANK0:872A                 LDA     rnd_value,X
BANK0:872C                 ADC     frame_counter
BANK0:872E                 SBC     objects_X_coor
BANK0:8731                 EOR     object_unkn
BANK0:8734                 EOR     random_value2,X
BANK0:8736                 SBC     byte_0_24,X
BANK0:8738                 ADC     objects_Y_cord,X
BANK0:873B                 ADC     frame_counter
BANK0:873D                 STA     rnd_value,X
BANK0:873F                 DEX
BANK0:8740                 BPL     loc_0_872A
BANK0:8742                 RTS
BANK0:8742 ; End of function change_random_values
BANK0:8742
BANK0:8743
BANK0:8743 ; =============== S U B R O U T I N E =======================================
BANK0:8743
BANK0:8743
BANK0:8743 random:                                 ; CODE XREF: BANK0:8722p
BANK0:8743                                         ; BANK0:BA8Bp ...
BANK0:8743                 LDA     rnd_value
BANK0:8745                 EOR     random_value4
BANK0:8747                 ADC     random_value3
BANK0:8749                 STA     random_value2
BANK0:874B                 LDA     random_value3
BANK0:874D                 ROL     A
BANK0:874E                 SBC     random_value4
BANK0:8750                 STA     random_value3
BANK0:8752                 EOR     random_value2
BANK0:8754                 STA     rnd_value
BANK0:8756                 RTS
BANK0:8756 ; End of function random

--- Конец кода ---


Roket:
Спасибо. Кое -что уже сделал. А не знаешь где хранится смена блоков графики для спрайтов для первого и других уровней?
Ti_:

--- Цитата: Roket от 07 Август 2012, 20:42:40 ---Спасибо. Кое -что уже сделал. А не знаешь где хранится смена блоков графики для спрайтов для первого и других уровней?

--- Конец цитаты ---
Не знаю, в bt$dd это был объект $03,  правда тут что-то не видно его использования. Попробуй проверь объекты $08 и $09 ну и другие которые в списке обозначены как loc_.

Анимации ударов:

--- Код: ---BANK3:E0A0 off_3000_E0A0:  .WORD byte_3000_E12A    ; DATA XREF: sub_3000_E07A+6r
BANK3:E0A0                                         ; sub_3000_E07A+Br
BANK3:E0A2                 .WORD byte_3000_E13F
BANK3:E0A4                 .WORD byte_3000_E154
BANK3:E0A6                 .WORD byte_3000_E179
BANK3:E0A8                 .WORD byte_3000_E18B
BANK3:E0AA                 .WORD byte_3000_E19D
BANK3:E0AC                 .WORD byte_3000_E1E3
BANK3:E0AE                 .WORD byte_3000_E266
BANK3:E0B0                 .WORD byte_3000_E27D
BANK3:E0B2                 .WORD byte_3000_E299
BANK3:E0B4                 .WORD byte_3000_E2C8
BANK3:E0B6                 .WORD byte_3000_E32E
BANK3:E0B8                 .WORD byte_3000_E365
BANK3:E0BA                 .WORD byte_3000_E3B1
BANK3:E0BC                 .WORD byte_3000_E465
BANK3:E0BE                 .WORD byte_3000_E311
BANK3:E0C0                 .WORD byte_3000_E3F1
BANK3:E0C2                 .WORD byte_3000_E48C
BANK3:E0C4                 .WORD byte_3000_E4E1
BANK3:E0C6                 .WORD byte_3000_E505
BANK3:E0C8                 .WORD byte_3000_E4EB
BANK3:E0CA                 .WORD byte_3000_E51A
BANK3:E0CC                 .WORD byte_3000_E524
BANK3:E0CE                 .WORD byte_3000_E52E
BANK3:E0D0                 .WORD byte_3000_E53D
BANK3:E0D2                 .WORD byte_3000_E54C
BANK3:E0D4                 .WORD byte_3000_E391
BANK3:E0D6                 .WORD byte_3000_E4E1
BANK3:E0D8                 .WORD byte_3000_E558
BANK3:E0DA                 .WORD byte_3000_E5A0
BANK3:E0DC                 .WORD byte_3000_E34B
BANK3:E0DE                 .WORD byte_3000_E50E
BANK3:E0E0                 .WORD byte_3000_E5FD
BANK3:E0E2                 .WORD byte_3000_E64D
BANK3:E0E4                 .WORD byte_3000_E3C6
BANK3:E0E6                 .WORD byte_3000_E3D9
BANK3:E0E8                 .WORD byte_3000_E664
BANK3:E0EA                 .WORD byte_3000_E627
BANK3:E0EC                 .WORD byte_3000_E4C5
BANK3:E0EE                 .WORD byte_3000_E42A
BANK3:E0F0                 .WORD byte_3000_E446
BANK3:E0F2                 .WORD byte_3000_E5B8
BANK3:E0F4                 .WORD byte_3000_E5D8
BANK3:E0F6                 .WORD byte_3000_E693
BANK3:E0F8                 .WORD byte_3000_E6CE
BANK3:E0FA                 .WORD byte_3000_E67B
BANK3:E0FC                 .WORD byte_3000_E6C8
BANK3:E0FE                 .WORD byte_3000_E6A1
BANK3:E100                 .WORD byte_3000_E6AF
BANK3:E102                 .WORD byte_3000_E6BD
BANK3:E104                 .WORD byte_3000_E708
BANK3:E106                 .WORD byte_3000_E6EF
BANK3:E108                 .WORD byte_3000_E725
BANK3:E10A                 .WORD byte_3000_E746
BANK3:E10C                 .WORD byte_3000_E76F
BANK3:E10E                 .WORD byte_3000_E1C5
BANK3:E110                 .WORD big_hand          ;  72
BANK3:E112                 .WORD byte_3000_E22A
BANK3:E114                 .WORD byte_3000_E23C
BANK3:E116                 .WORD byte_3000_E254
BANK3:E118                 .WORD byte_3000_E773
BANK3:E11A                 .WORD byte_3000_E784
BANK3:E11C                 .WORD byte_3000_E795
BANK3:E11E                 .WORD byte_3000_E7B1
BANK3:E120                 .WORD byte_3000_E419
BANK3:E122                 .WORD byte_3000_E7D7
BANK3:E124                 .WORD byte_3000_E7E7
BANK3:E126                 .WORD byte_3000_E7FB
BANK3:E128                 .WORD byte_3000_E80A
BANK3:E12A byte_3000_E12A: .BYTE $19, $E0, $30, $E1, 1, $E2, 0, $10, $19, $19, $19, $1D, $E6, $1D, $1D, $1D, $1D, $1D, $1D, $1D, 0
BANK3:E12A                                         ; DATA XREF: BANK3:off_3000_E0A0o
BANK3:E13F byte_3000_E13F: .BYTE $1B, $E0, $30, $E1, 1, $E2, 0, $10, $1B, $1B, $1B, $1D, $E6, $1D, $1D, $1D, $1D, $1D, $1D, $1D, 0
BANK3:E13F                                         ; DATA XREF: BANK3:E0A2o
BANK3:E154 byte_3000_E154: .BYTE $18, $18, $18, $18, $18, $18, $18, $18, $18, $1D, $1D, $E0, $40, $22, $E2, 2, $23, $E1, 3, $22, $22, $22, $22
BANK3:E154                                         ; DATA XREF: BANK3:E0A4o
BANK3:E154                 .BYTE $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $22, $1D, $1D, 0
BANK3:E179 byte_3000_E179: .BYTE $B, $B, $B, $B, $B, $B, $D, $D, $D, $D, $D, $D, $E3, $B, $B, $B, $B, 0
BANK3:E179                                         ; DATA XREF: BANK3:E0A6o
BANK3:E18B byte_3000_E18B: .BYTE $B, $E0, 0, $B, $B, $B, $D, $D, $D, $D, $D, $D, $B, $E4, $B, $B, $B, 0
BANK3:E18B                                         ; DATA XREF: BANK3:E0A8o
BANK3:E19D byte_3000_E19D: .BYTE $E, $E, $E, $E, $E, $E, $E, $E, $E1, 4, $E5, $F, $E0, $50, $F4, $F, $F4, $F, $F4, $F, $F4, $F, $F4, $F, $F4, $F
BANK3:E19D                                         ; DATA XREF: BANK3:E0AAo
BANK3:E19D                 .BYTE $F4, $F, $F4, $F, $F4, $F, $F4, $F, $F4, $F, $F4, $F, $F4, 0
BANK3:E1C5 byte_3000_E1C5: .BYTE $E, $E, $E, $E, $E, $E, $E, $E, $E1, 4, $E5, $61, $E0, $60, $EA, $C0, $61, $61, $61, $61, $61, $61, $61, $61, $61
BANK3:E1C5                                         ; DATA XREF: BANK3:E10Eo
BANK3:E1C5                 .BYTE $61, $61, $61, $61, 0
BANK3:E1E3 byte_3000_E1E3: .BYTE $1D, $1D, $1D, $18, $18, $18, $18, $18, $18, $18, $18, $E0, $A0, $1C, $E1, 3, $E2, 3, $37, $1C, $1C, $1C, $1C
BANK3:E1E3                                         ; DATA XREF: BANK3:E0ACo
BANK3:E1E3                 .BYTE $1C, $1C, $1C, $1C, $1C, $E1, 2, $1C, $1C, $1C, $1C, $1C, $1C, $1C, $1C, $1C, $1C, $1C, $1D, $1D, $1D, $1D, 0
BANK3:E211 big_hand:       .BYTE $1D, $18, $18, $E0, $60, $1C, $E1, 3, $E2, 3, $36, $1C, $1C, $1C, $1C, $1C, $E1, 2, $1C, $1C, $1D, $1D, $1D, $1D
BANK3:E211                                         ; DATA XREF: BANK3:E110o
BANK3:E211                 .BYTE 0
BANK3:E22A byte_3000_E22A: .BYTE $18, $18, $1D, $E0, $80, $1A, $E2, 6, $36, $E1, 3, $1A, $1A, $1A, $1A, $1A, $1A, 0
BANK3:E22A                                         ; DATA XREF: BANK3:E112o
BANK3:E23C byte_3000_E23C: .BYTE $1F, $E0, 0, $1F, $1F, $1F, $E0, $60, $1E, $E2, $86, $36, $E1, 3, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E
BANK3:E23C                                         ; DATA XREF: BANK3:E114o
BANK3:E23C                 .BYTE 0
BANK3:E254 byte_3000_E254: .BYTE $26, $E0, $10, $E1, 3, $26, $26, $26, $57, $E2, $8A, $26, $57, $57, $57, $57, $57, 0
BANK3:E254                                         ; DATA XREF: BANK3:E116o
BANK3:E266 byte_3000_E266: .BYTE $18, $18, $18, $18, $1D, $1D, $E0, $80, $1A, $E2, 5, $37, $E1, 3, $1A, $1A, $1A, $1A, $1A, $1A, $1A, $1A, 0
BANK3:E266                                         ; DATA XREF: BANK3:E0AEo
BANK3:E27D byte_3000_E27D: .BYTE $21, $21, $21, $21, $21, $21, $21, $21, $E2, $41, $53, $20, $E0, $20, $E1, 3, $20, $20, $20, $E6, $20, $20, $20
BANK3:E27D                                         ; DATA XREF: BANK3:E0B0o
BANK3:E27D                 .BYTE $20, $20, $20, $20, 0
BANK3:E299 byte_3000_E299: .BYTE $1F, $1F, $E0, 0, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $E0, $A0, $1E, $E2, $86, $37, $E1, 5, $1E
BANK3:E299                                         ; DATA XREF: BANK3:E0B2o
BANK3:E299                 .BYTE $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E, $1E
BANK3:E299                 .BYTE 0
BANK3:E2C8 byte_3000_E2C8: .BYTE $23, $E1, 4, $E2, 4, $25, $23, $E2, 4, $25, $23, $E2, 4, $25, $23, $E2, 4, $25, $23, $E2, 4, $25, $23, $E2, 4
BANK3:E2C8                                         ; DATA XREF: BANK3:E0B4o
BANK3:E2C8                 .BYTE $25, $23, $E2, 4, $25, $23, $E2, 4, $25, $23, $E2, 4, $25, $23, $E2, 4, $25, $23, $E2, 4, $25, $23, $23, $23, $23
BANK3:E2C8                 .BYTE $23, $23, $23, 0, $31, $31, $E1, 4, $31, $31, $31, $31, $31, $31, $31, $31, $31, $31, $23, $23, $23, $23, 0
BANK3:E311 byte_3000_E311: .BYTE $36, $36, $36, $36, $36, $36, $37, $E9, $37, $37, $37, $37, $37, $37, $37, $37, $37, $37, $37, $37, $37, $37, $37
BANK3:E311                                         ; DATA XREF: BANK3:E0BEo
BANK3:E311                 .BYTE $37, $37, $37, $37, $37, 0
BANK3:E32E byte_3000_E32E: .BYTE $29, $29, $29, $29, $29, $29, $2A, $E9, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A, $2A
BANK3:E32E                                         ; DATA XREF: BANK3:E0B6o
BANK3:E32E                 .BYTE $2A, $2A, $2A, $2A, $2A, 0
BANK3:E34B byte_3000_E34B: .BYTE $3F, $3F, $3F, $3F, $3F, $3F, $F1, $15, $5C, $E2, $82, $24, $ED, $40, $40, $40, $40, $40, $E6, $40, $40, $40, $40
BANK3:E34B                                         ; DATA XREF: BANK3:E0DCo
BANK3:E34B                 .BYTE $40, $40, 0
BANK3:E365 byte_3000_E365: .BYTE $26, $26, $26, $26, $26, $26, $E1, 3, $F1, $15, $5C, $E2, $82, $44, $ED, $28, $28, $28, $28, $28, $E6, $28, $28
BANK3:E365                                         ; DATA XREF: BANK3:E0B8o
BANK3:E365                 .BYTE $28, $28, $28, $28, 0, 2, $41, $EE, $27, $27, $27, $27, $27, $E6, $27, $27, $27, $27, $27, $27, 0
BANK3:E391 byte_3000_E391: .BYTE $26, $E1, 5, $26, $26, $26, $26, $26, $26, $26, $26, $26, $26, $26, $26, $26, $57, $E2, $8A, $26, $57, $57, $57
BANK3:E391                                         ; DATA XREF: BANK3:E0D4o
BANK3:E391                 .BYTE $57, $57, $57, $57, $57, $57, $57, $57, 0
BANK3:E3B1 byte_3000_E3B1: .BYTE $2C, $E0, $60, $EC, $2C, $2C, $E0, $F0, $E2, $87, $13, $2B, $2B, $E0, 0, $E6, $2B, $2B, $2B, $2B, 0
BANK3:E3B1                                         ; DATA XREF: BANK3:E0BAo
BANK3:E3C6 byte_3000_E3C6: .BYTE $43, $43, $43, $43, $43, $43, $E0, $F0, $E2, 7, $53, $E0, 0, $44, $E6, $44, $44, $44, 0
BANK3:E3C6                                         ; DATA XREF: BANK3:E0E4o
BANK3:E3D9 byte_3000_E3D9: .BYTE $43, $43, $43, $43, $43, $43, $43, $E0, $F0, $F1, $15, $5C, $E2, $C7, $23, $ED, $E0, 0, $44, $E6, $44, $44, $44
BANK3:E3D9                                         ; DATA XREF: BANK3:E0E6o
BANK3:E3D9                 .BYTE 0
BANK3:E3F1 byte_3000_E3F1: .BYTE $2C, $E0, $C0, $EC, $2C, $2C, $2C, $2C, $2C, $2C, $E0, $FF, $4C, $4C, $E2, $8D, $36, $4C, $E2, $8D, $36, $4C, $E2
BANK3:E3F1                                         ; DATA XREF: BANK3:E0C0o
BANK3:E3F1                 .BYTE $8D, $36, $4C, $4C, $4C, $4C, $4C, $4C, $4C, $4C, $4C, $E0, $20, $2C, $2C, $24, 0
BANK3:E419 byte_3000_E419: .BYTE $2C, $2C, $2C, $E0, $60, $E2, $88, $35, $2B, $E0, 0, $2B, $2B, $2B, $2B, $2B, 0
BANK3:E419                                         ; DATA XREF: BANK3:E120o
BANK3:E42A byte_3000_E42A: .BYTE $2C, $E0, $80, $EC, $2C, $2C, $2C, $2C, $E0, $F0, $4C, $4C, $E2, $87, $75, $E0, $80, $4C, $4C, $4C, $4C, $4C, $4C
BANK3:E42A                                         ; DATA XREF: BANK3:E0EEo
BANK3:E42A                 .BYTE $4C, $4C, $4C, $4C, 0
BANK3:E446 byte_3000_E446: .BYTE $43, $E0, $80, $EC, $43, $43, $43, $43, $E0, $F0, $4D, $4D, $E2, $87, $75, $E0, $80, $4D, $4D, $4D, $4D, $4D, $4D
BANK3:E446                                         ; DATA XREF: BANK3:E0F0o
BANK3:E446                 .BYTE $4D, $4D, $4D, $4D, $4D, $4D, $4D, 0
BANK3:E465 byte_3000_E465: .BYTE $2C, $E0, $FE, $E8, $2B, $2B, $E0, $FE, $E8, $E2, $87, $24, $2B, $2B, $E0, $FE, $E8, $2B, $2B, $E0, $FE, $E8, $2B
BANK3:E465                                         ; DATA XREF: BANK3:E0BCo
BANK3:E465                 .BYTE $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2B, $2C, $2C, $24, 0
BANK3:E48C byte_3000_E48C: .BYTE $2C, $E0, $FF, $E8, $34, $E2, $88, $36, $34, $E2, $88, $36, $34, $E2, $88, $36, $34, $E2, $88, $36, $34, $E2, $88
BANK3:E48C                                         ; DATA XREF: BANK3:E0C2o
BANK3:E48C                 .BYTE $36, $34, $E2, $88, $36, $34, $E2, $88, $36, $34, $E2, $88, $36, $34, $E2, $88, $36, $34, $E2, $88, $36, $34, $34
BANK3:E48C                 .BYTE $34, $34, $2B, $34, $2B, $34, $2B, $2C, $2C, $24, 0
BANK3:E4C5 byte_3000_E4C5: .BYTE $2C, $E0, $F0, $EC, $2C, $2C, $2C, $E0, $FE, $34, $34, $34, $34, $E2, $8D, $36, $34, $34, $34, $34, $34, $34, $34
BANK3:E4C5                                         ; DATA XREF: BANK3:E0ECo
BANK3:E4C5                 .BYTE $2B, $34, $2B, $24, 0
BANK3:E4E1 byte_3000_E4E1: .BYTE 5, $E0, $80, $E1, 4, $EA, $8C, 5, 5, 5
BANK3:E4E1                                         ; DATA XREF: BANK3:E0C4o
BANK3:E4E1                                         ; BANK3:E0D6o
BANK3:E4EB byte_3000_E4EB: .BYTE 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, $F1, $15, $5C, $E2, 2, $20, $ED, 6, 6, 6, 6, 6, 6, 0
BANK3:E4EB                                         ; DATA XREF: BANK3:E0C8o
BANK3:E505 byte_3000_E505: .BYTE 5, 5, 5, $E2, 0, $10, 6, 6, 0 ; DATA XREF: BANK3:E0C6o
BANK3:E50E byte_3000_E50E: .BYTE 6, $E1, 3, $E2, 4, $20, 6, 6, 6, 6, 6, 0
BANK3:E50E                                         ; DATA XREF: BANK3:E0DEo
BANK3:E51A byte_3000_E51A: .BYTE $32, $E1, 1, $EB, $32, $32, $32, $32, $32, 0
BANK3:E51A                                         ; DATA XREF: BANK3:E0CAo
BANK3:E524 byte_3000_E524: .BYTE $33, $E1, 2, $33, $33, $33, $33, $33, $33, 0
BANK3:E524                                         ; DATA XREF: BANK3:E0CCo
BANK3:E52E byte_3000_E52E: .BYTE $1F, $1F, $E0, $C0, $1F, $E2, $87, $50, $E0, $60, $1F, $1F, $1F, $1F, 0
BANK3:E52E                                         ; DATA XREF: BANK3:E0CEo
BANK3:E53D byte_3000_E53D: .BYTE $B, $B, $B, $E2, $84, $20, $B, $B, $B, $B, $B, $B, $B, $B, 0
BANK3:E53D                                         ; DATA XREF: BANK3:E0D0o
BANK3:E54C byte_3000_E54C: .BYTE $B, $E1, $FF, $B, $B, $E4, $B, $B, $B, $B, $B, 0
BANK3:E54C                                         ; DATA XREF: BANK3:E0D2o
BANK3:E558 byte_3000_E558: .BYTE $18, $E0, 0, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $18, $16, $14
BANK3:E558                                         ; DATA XREF: BANK3:E0D8o
BANK3:E558                 .BYTE $12, $10, $E, $C, $A, 9, 8, 8, 8, 8, 8, 8, 8, $E1, 3, 8, 8, 8, 8, 8, 8, 8, 8, 8, $E0, $60, $C, $10, $16, $1E, $24
BANK3:E558                 .BYTE $E2, $82, $20, $2A, $2A, $2A, $2A, $2A, $2A, $28, $26, $24, $22, $20, $1E, $1C, $1A, 0
BANK3:E5A0 byte_3000_E5A0: .BYTE $14, $E0, 0, $10, $C, 8, 8, 8, 8, $E, $14, $1C, $24, $E2, $40, $40, $28, $28, $28, $24, $20, $1C, $18, 0
BANK3:E5A0                                         ; DATA XREF: BANK3:E0DAo
BANK3:E5B8 byte_3000_E5B8: .BYTE $5D, $E0, 0, $F2, $5E, $F2, $5E, $F2, $5E, $F2, $5E, $F2, $F1, $15, $1A, $5D, $5D, $5E, $5E, $F1, $15, $1A, $5D
BANK3:E5B8                                         ; DATA XREF: BANK3:E0F2o
BANK3:E5B8                 .BYTE $5D, $EC, $5D, $5D, $5D, $E0, 0, $5D, 0
BANK3:E5D8 byte_3000_E5D8: .BYTE $5D, $E0, $F0, $5E, $5E, $5E, $5E, $E0, 0, $5E, $F1, $15, $1A, $5D, $5D, $5E, $5D, $F1, $15, $1A, $5D, $5D, $E0
BANK3:E5D8                                         ; DATA XREF: BANK3:E0F4o
BANK3:E5D8                 .BYTE $F0, $EC, $F2, $5D, $F2, $5D, $F2, $5D, $F2, $5D, $E0, 0, $5D, 0
BANK3:E5FD byte_3000_E5FD: .BYTE $5D, $E0, $6F, $5E, $5E, $5E, $5E, $5E, $5E, $5E, $5E, $5E, $5E, $E0, 0, $5E, $5E, $5E, $5E, $E4, $F0, $18, $5D
BANK3:E5FD                                         ; DATA XREF: BANK3:E0E0o
BANK3:E5FD                 .BYTE $5D, $5D, $E0, $6F, $EC, $5D, $5D, $5D, $5D, $5D, $5D, $5D, $5D, $5D, $5D, $E0, 0, $5D, 0
BANK3:E627 byte_3000_E627: .BYTE $5D, $E0, $F0, $5E, $5E, $5E, $5E, $5E, $5E, $E0, 0, $5E, $5E, $5E, $5E, $5E, $5E, $5E, $5E, $E4, $F0, $18, $5D
BANK3:E627                                         ; DATA XREF: BANK3:E0EAo
BANK3:E627                 .BYTE $5D, $5D, $E0, $F0, $EC, $5D, $5D, $5D, $5D, $5D, $5D, $E0, 0, $5D, 0
BANK3:E64D byte_3000_E64D: .BYTE $5D, $E0, $FF, $5D, $5D, $5D, $5D, $5E, $5E, $E5, $E0, $FF, $EC, $5E, $5E, $5E, $5D, $5D, $5D, $E0, 0, $5D, 0
BANK3:E64D                                         ; DATA XREF: BANK3:E0E2o
BANK3:E664 byte_3000_E664: .BYTE $61, $61, $61, $61, $62, $62, $63, $63, $63, $EF, $80, $63, $63, $63, $62, $61, $61, $61, $61, $61, $61, $61, 0
BANK3:E664                                         ; DATA XREF: BANK3:E0E8o
BANK3:E67B byte_3000_E67B: .BYTE $6C, $E1, 2, $6C, $6C, $6C, $6C, $6C, $6C, $6C, $6C, $6E, $E2, $83, $30, $6E, $6E, $6E, $6E, $6E, $6E, $6E, $64
BANK3:E67B                                         ; DATA XREF: BANK3:E0FAo
BANK3:E67B                 .BYTE 0
BANK3:E693 byte_3000_E693: .BYTE $6C, $6C, $6C, $F1, $15, $5C, $F3, 3, $6E, $6E, $6E, $6E, $64, 0
BANK3:E693                                         ; DATA XREF: BANK3:E0F6o
BANK3:E6A1 byte_3000_E6A1: .BYTE $6C, $6C, $6C, $F1, $15, $5C, $F3, $14, $6E, $6E, $6E, $6E, $64, 0
BANK3:E6A1                                         ; DATA XREF: BANK3:E0FEo
BANK3:E6AF byte_3000_E6AF: .BYTE $6C, $6C, $6C, $F1, $15, $5C, $F3, $85, $6E, $6E, $6E, $6E, $64, 0
BANK3:E6AF                                         ; DATA XREF: BANK3:E100o
BANK3:E6BD byte_3000_E6BD: .BYTE $6C, $6C, $F1, $15, $5C, $F3, $15, $6E, $6E, $64, 0
BANK3:E6BD                                         ; DATA XREF: BANK3:E102o
BANK3:E6C8 byte_3000_E6C8: .BYTE $E1, 3, $E2, $89, $20, 0 ; DATA XREF: BANK3:E0FCo
BANK3:E6CE byte_3000_E6CE: .BYTE $B, $B, $D, $D, $D, $F4, $D, $F4, $52, $F4, $52, $F4, $52, $F4, $52, $F1, $15, $5C, $F3, 4, $53, $53, $E6, $53
BANK3:E6CE                                         ; DATA XREF: BANK3:E0F8o
BANK3:E6CE                 .BYTE $53, $53, $53, $53, $53, $53, $1D, $1D, 0
BANK3:E6EF byte_3000_E6EF: .BYTE $85, $E0, 0, $85, $85, $85, $85, $85, $85, $E0, $20, $86, $E2, $80, $50, $87, $F5, $E0, $20, $86, $E2, $80, $50
BANK3:E6EF                                         ; DATA XREF: BANK3:E106o
BANK3:E6EF                 .BYTE $87, $F5
BANK3:E708 byte_3000_E708: .BYTE $85, $E0, 0, $85, $85, $85, $85, $85, $85, $E1, 3, $E0, $60, $85, $86, $86, $E2, $84, $20, $87, $87, $87, $87
BANK3:E708                                         ; DATA XREF: BANK3:E104o
BANK3:E708                 .BYTE $87, $87, $86, $86, $86, 0
BANK3:E725 byte_3000_E725: .BYTE $B9, $E1, 4, $E0, $80, $B9, $B9, $B9, $B9, $B9, $B9, $B9, $B9, $E0, $20, $E1, 2, $B9, $F1, $15, $2E, $BA, $BA
BANK3:E725                                         ; DATA XREF: BANK3:E108o
BANK3:E725                 .BYTE $E1, 1, $BA, $BA, $E1, 1, $BA, $BA, $BA, 0
BANK3:E746 byte_3000_E746: .BYTE $C6, $E0, 1, $B8, $B8, $B8, $B8, $B8, $B8, $B8, $E0, $F0, $E1, 3, $E2, $84, $20, $C6, $E2, $84, $20, $C6, $E2
BANK3:E746                                         ; DATA XREF: BANK3:E10Ao
BANK3:E746                 .BYTE $84, $20, $C6, $E2, $84, $20, $C6, $E2, $84, $20, $C6, $E2, $84, $20, $E0, $40, $C6, 0
BANK3:E76F byte_3000_E76F: .BYTE $E2, $89, $A0, 0  ; DATA XREF: BANK3:E10Co
BANK3:E773 byte_3000_E773: .BYTE $B, $B, $B, $1D, $1D, $1D, $E1, 2, $F, $F, $F, $F, $1D, $1D, $1D, $1D, 0
BANK3:E773                                         ; DATA XREF: BANK3:E118o
BANK3:E784 byte_3000_E784: .BYTE $61, $E0, $80, $61, $61, $61, $F0, $18, $E2, $4C, $80, $5F, $E0, $40, $5F, $5F, 0
BANK3:E784                                         ; DATA XREF: BANK3:E11Ao
BANK3:E795 byte_3000_E795: .BYTE $D7, $E0, $F0, $D7, $D7, $E2, $4C, $20, $D7, $D7, $E2, $4C, $20, $D7, $E0, $40, $D7, $D7, $D7, $D7, $D7, $D7, $D7
BANK3:E795                                         ; DATA XREF: BANK3:E11Co
BANK3:E795                 .BYTE $D7, $D7, $D7, $D7, 0
BANK3:E7B1 byte_3000_E7B1: .BYTE $67, $E0, $A0, $EC, $67, $67, $EC, $67, $67, $E0, $20, $67, $E2, $80, $50, $68, $68, $68, $F5, $67, $E0, $F0, $EC
BANK3:E7B1                                         ; DATA XREF: BANK3:E11Eo
BANK3:E7B1                 .BYTE $67, $67, $67, $EC, $67, $67, $67, $E2, $83, $30, $68, $68, $68, $F5, 0
BANK3:E7D7 byte_3000_E7D7: .BYTE $6F, $6F, $E2, $84, $20, $71, $71, $71, $71, $71, $71, $71, $71, $71, $71, 0
BANK3:E7D7                                         ; DATA XREF: BANK3:E122o
BANK3:E7E7 byte_3000_E7E7: .BYTE $73, $73, $73, $E2, $89, $20, $74, $74, $74, $74, $74, $74, $74, $74, $74, $74, $74, $74, $74, 0
BANK3:E7E7                                         ; DATA XREF: BANK3:E124o
BANK3:E7FB byte_3000_E7FB: .BYTE $78, $78, $F3, 6, $78, $78, $F3, 6, $78, $78, $F3, 6, $78, $78, 0
BANK3:E7FB                                         ; DATA XREF: BANK3:E126o
BANK3:E80A byte_3000_E80A: .BYTE 1, 1, $E0, $40, $E2, $80, $70, $F5, 2, 2, 2, 1, 1, 1, $E0, $40, $E2, $80, $70, $F5, 2, 2, 2, 1, $E0, $A0, $E1
BANK3:E80A                                         ; DATA XREF: BANK3:E128o
BANK3:E80A                 .BYTE 3, 1, 1, $E2, $82, $30, 2, 2, 2, 2, 2, 2, 2, 2, 0
--- Конец кода ---
Roket:

--- Цитата: Ti_ ---Попробуй проверь объекты $08 и $09 ну и другие которые в списке обозначены как loc_.
--- Конец цитаты ---

  Не, лок, это эффекты, когда взрываются стены и из них выходят свиньи. Их можно заменить на рядового врага.
Мне бы попытаться первого босса заменить на босса из пятого уровня, но поскольку у босса первого другой блок, то если вставить из пятого уровня босса, то у него будет бажная графика. 
Да кстати в Боевых жабах последний атрибут отвечает за жизни. 00 - жизней нет -враг бьётся с одного мощного удара, 10 с двух, 20 с трёх и так далее.
Ti_:

--- Цитата: Roket от 07 Август 2012, 20:57:52 ---Мне бы попытаться первого босса заменить на босса из пятого уровня, но поскольку у босса первого другой блок, то если вставить из пятого уровня босса, то у него будет бажная графика. 
Да кстати в Боевых жабах последний атрибут отвечает за жизни. 00 - жизней нет -враг бьётся с одного мощного удара, 10 с двух, 20 с трёх и так далее.

--- Конец цитаты ---
В БТ и ДД  СМД-шном так:   
кажется 2 и 7 это два номера блоков графики - один для задников, другой для спрайтов; давно делал сейчас проверять не хочу :)

--- Код: ---ROM:00035220                 dc.w 3, $B58, 2, 7, 0, 0 ; gfx reload?
--- Конец кода ---
Roket:
Дай, всё равно если замочить такого босса то уровень не завершить. Так что я думаю первого босса пока не изменить. <_<
Ti_:

--- Цитата: Roket от 07 Август 2012, 21:39:13 ---Дай, всё равно если замочить такого босса то уровень не завершить. Так что я думаю первого босса пока не изменить. <_<

--- Конец цитаты ---
Почему нельзя? А как же объект $7F ?
Roket:
Ti_, а ну только если.  ;) Дай всё равно без нужного блока будет каша из спрайтов бывшего босса. Блок бы сменить на боссе уровня 1 на блок босса уровня 5 - тогда может чего и получится я думаю.
feos:
Непонятно, откуда берется это значение 0x7F для записи в 0x03C4.
Команда в дебаггере выглядит так:

--- Код: ---07:D349:9D C1 03  STA $03C1,X @ $03C4 = #$7F
--- Конец кода ---

В РОМе:

--- Код: ---0001D359: 9DC103 STA $03C1,X
--- Конец кода ---
Я так понимаю, он берет адрес первого объекта, отступает на X (=3) и пишет в этот адрес 0x7F из аккумулятора. Но с кодом не дружу и как прокрутить дебаггер вверх, соблюдя текущие значения, не понимаю.

Зато помониторил $B7-B8.
Желтым отмечены кадры, в которые меняется значение этого "слова". Коричневым приписано, какое значение оно принимает (то есть, откуда начинается чтение массива объектов). В кадр, когда зарегестрировался инпут равный 7F (кадр 3528), только 2 адреса в РАМ принимают то же значение, что и объект номер 4 (его адрес $03C4). $2A и $2C. Причем чтение объектов с $2C происходит позже.
Ti_:

--- Цитата: feos от 08 Август 2012, 20:27:37 ---В РОМе:

--- Код: ---0001D359: 9DC103 STA $03C1,X
--- Конец кода ---
Я так понимаю, он берет адрес первого объекта, отступает на X (=3) и пишет в этот адрес 0x7F из аккумулятора. Но с кодом не дружу и как прокрутить дебаггер вверх, соблюдя текущие значения, не понимаю.

--- Конец цитаты ---
Вначале надо найти свободную ячейчку в памяти. Ячейка считается пустой если объект_ID (номер объекта нулевой), для этого используется цикл проверки первой пустой (начиная с 3-ей, так как 1 и 2 заняты игроками всегда).   X- счетчик цикла.



--- Код: ---BANK3:FF38 get_obj_free_mem:                       ; CODE XREF: level_objects_load:loc_3000_D340p
BANK3:FF38                 LDX     #2
BANK3:FF3A
BANK3:FF3A loc_3000_FF3A:                          ; CODE XREF: get_obj_free_mem+Aj
BANK3:FF3A                 LDA     obj_id_memory,X
BANK3:FF3D                 BEQ     locret_3000_FF45
BANK3:FF3F                 INX
BANK3:FF40                 CPX     #$F
BANK3:FF42                 BNE     loc_3000_FF3A
BANK3:FF44                 DEX
BANK3:FF45
BANK3:FF45 locret_3000_FF45:                       ; CODE XREF: get_obj_free_mem+5j
BANK3:FF45                 RTS
BANK3:FF45 ; End of function get_obj_free_mem
--- Конец кода ---

Далее мы читаем число из адреса текущего конфиг поинтера в A.  (первое число - ID объекта)
 LDA     (lvl_cfg_adr),Y
Далее записываем из A в память объекта: STA     obj_id_memory,X  (тоже что ты написал sta $3C1,X); $3C1 - адрес нулевого объекта, а X- наше полученное добавчное значение номера. (например x=3= 4-ый объект )



--- Код: ---BANK3:D340                 JSR     get_obj_free_mem
BANK3:D343                 BNE     locret_3000_D391
BANK3:D345
BANK3:D345 loc_3000_D345:                          ; CODE XREF: level_objects_load+7Ej
BANK3:D345                 LDY     #0
BANK3:D347                 LDA     (lvl_cfg_adr),Y
BANK3:D349                 STA     obj_id_memory,X
--- Конец кода ---

Чтобы найти из какой ячейки памяти считывается $7F, просто поставь брейкпоинт на предыдущую строчку:
LDA     (lvl_cfg_adr),Y  , таким образом увидишь адрес lvl_cfg_adr - текущий адрес поинтера откуда читать конфиги левелов.

 

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

--- Цитата: feos от 08 Август 2012, 20:27:37 ---Коричневым приписано, какое значение оно принимает (то есть, откуда начинается чтение массива объектов).

--- Конец цитаты ---
Ну это можно было и не рисовать - т.к. длина строчки объекта = 11  ($0B) байт. Поэтому и получается так:
00 0B 16 21 2С 37 42 4D
Правда есть еще объект $FE - который состоит из одного байта, и может сместить всю строчку.

Объектов читается много, но создается меньше, потому что многие объекты получаются с нулевым ID. (то есть считаются пустышками и просто перезаписываются в одну и ту же ячейку)
То есть лучшим вариантом будет конечно если объект $7F создатся в первой же ячейке поскольку поинтер у нас сбивается на ($0000), а после него еще и что-то вроде  $ff или $fe будет, чтобы другие объекты не создавались и не вызывали баги и лаги.


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

--- Цитата: feos от 08 Август 2012, 20:27:37 ---Причем чтение объектов с $2C происходит позже.

--- Конец цитаты ---
Ну значит с $2C и проходит чтение =$7F.  Так как $2A не является кратной длине строчки - то не является номером ID объекта.  А одним из параметров объекта с адреса $21.     С $2C понятно что позже у нас же объекты по порядку читаются, а не от балды.
Навигация
Главная страница сообщений
Следующая страница

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