From da4e2bbd49eadfa084341dd11df39a392047e404 Mon Sep 17 00:00:00 2001 From: chaos-lord Date: Wed, 12 Jul 2017 18:59:28 +0100 Subject: labelled collision handlers --- .../catchem_mode/catchem_mode_blue_field.asm | 4 +-- .../catchem_mode/catchem_mode_red_field.asm | 4 +-- engine/pinball_game/evolution_mode.asm | 16 +++++----- .../evolution_mode/evolution_mode_blue_field.asm | 4 +-- .../evolution_mode/evolution_mode_red_field.asm | 26 ++++++++-------- engine/pinball_game/map_move.asm | 24 +++++++-------- .../blue_stage_resolve_collision.asm | 28 ++++++++--------- .../red_stage_resolve_collision.asm | 36 +++++++++++----------- home/random.asm | 20 ++++++------ main.asm | 26 ++++++++-------- wram.asm | 20 ++++++++++-- 11 files changed, 112 insertions(+), 96 deletions(-) diff --git a/engine/pinball_game/catchem_mode/catchem_mode_blue_field.asm b/engine/pinball_game/catchem_mode/catchem_mode_blue_field.asm index 10a9fc3..d331b61 100644 --- a/engine/pinball_game/catchem_mode/catchem_mode_blue_field.asm +++ b/engine/pinball_game/catchem_mode/catchem_mode_blue_field.asm @@ -1,5 +1,5 @@ -Func_202bc: ; 0x202bc - ld a, [wd54c] +HandleBlueCatchEmCollision: ; 0x202bc + ld a, [wSpecialModeCollisionID] cp $4 jp z, Func_204f1 cp $c diff --git a/engine/pinball_game/catchem_mode/catchem_mode_red_field.asm b/engine/pinball_game/catchem_mode/catchem_mode_red_field.asm index 4bdeda1..25e9f9f 100644 --- a/engine/pinball_game/catchem_mode/catchem_mode_red_field.asm +++ b/engine/pinball_game/catchem_mode/catchem_mode_red_field.asm @@ -1,5 +1,5 @@ -Func_20000: ; 0x20000 - ld a, [wd54c] +HandleRedCatchEmCollision: ; 0x20000 + ld a, [wSpecialModeCollisionID] cp $4 jp z, Func_20230 ;if collided with voltorb cp $c diff --git a/engine/pinball_game/evolution_mode.asm b/engine/pinball_game/evolution_mode.asm index a6c594b..226ba48 100755 --- a/engine/pinball_game/evolution_mode.asm +++ b/engine/pinball_game/evolution_mode.asm @@ -1,13 +1,13 @@ -Func_10a95: ; 0x19a95 +HandleEvoModeCollision: ; 0x19a95 ld a, [wCurrentStage] call CallInFollowingTable -PointerTable_10a9b: ; 0x10a9b - padded_dab Func_20581 ; STAGE_RED_FIELD_TOP - padded_dab Func_20581 ; STAGE_RED_FIELD_BOTTOM - padded_dab Func_20581 - padded_dab Func_20581 - padded_dab Func_20bae ; STAGE_BLUE_FIELD_TOP - padded_dab Func_20bae ; STAGE_BLUE_FIELD_BOTTOM +HandleEvoModeCollisionPointerTable: ; 0x10a9b + padded_dab HandleRedEvoModeCollision ; STAGE_RED_FIELD_TOP + padded_dab HandleRedEvoModeCollision ; STAGE_RED_FIELD_BOTTOM + padded_dab HandleRedEvoModeCollision + padded_dab HandleRedEvoModeCollision + padded_dab HandleBlueEvoModeCollision ; STAGE_BLUE_FIELD_TOP + padded_dab HandleBlueEvoModeCollision ; STAGE_BLUE_FIELD_BOTTOM StartEvolutionMode: ; 0x10ab3 ld a, [wInSpecialMode] diff --git a/engine/pinball_game/evolution_mode/evolution_mode_blue_field.asm b/engine/pinball_game/evolution_mode/evolution_mode_blue_field.asm index 128ea12..afcb9ea 100644 --- a/engine/pinball_game/evolution_mode/evolution_mode_blue_field.asm +++ b/engine/pinball_game/evolution_mode/evolution_mode_blue_field.asm @@ -1,5 +1,5 @@ -Func_20bae: ; 0x20bae - ld a, [wd54c] +HandleBlueEvoModeCollision: ; 0x20bae + ld a, [wSpecialModeCollisionID] cp $4 jp z, Func_20e34 cp $1 diff --git a/engine/pinball_game/evolution_mode/evolution_mode_red_field.asm b/engine/pinball_game/evolution_mode/evolution_mode_red_field.asm index a78ceae..5bbf336 100644 --- a/engine/pinball_game/evolution_mode/evolution_mode_red_field.asm +++ b/engine/pinball_game/evolution_mode/evolution_mode_red_field.asm @@ -1,21 +1,21 @@ -Func_20581: ; 0x20581 - ld a, [wd54c] +HandleRedEvoModeCollision: ; 0x20581 + ld a, [wSpecialModeCollisionID] cp $4 - jp z, Func_2080f + jp z, Func_2080f ;voltorb cp $3 jp z, Func_20839 cp $5 - jp z, Func_2085a + jp z, Func_2085a ;bellsprout cp $6 - jp z, Func_20887 + jp z, Func_20887 ;staryu cp $7 - jp z, Func_208a8 + jp z, Func_208a8 ;diglett cp $8 - jp z, Func_208c9 + jp z, Func_208c9 ;diglett cp $9 - jp z, Func_208ea + jp z, Func_208ea ;right rail? cp $a - jp z, Func_2090b + jp z, Func_2090b ;right rail? cp $b jp z, Func_2092c cp $c @@ -355,16 +355,16 @@ Func_20887: ; 0x20887 Func_208a8: ; 0x208a8 ld a, [wd551] and a - jr nz, .asm_208c7 + jr nz, .asm_208c7 ;if ??? is NZ, skip ld a, [wIndicatorStates + 13] and a - jr z, .asm_208c7 + jr z, .asm_208c7 ;if indicator is off, skip xor a - ld [wIndicatorStates + 13], a + ld [wIndicatorStates + 13], a ;flick off indicator ld a, [wd55d] and a ld a, $0 - ld [wd55d], a + ld [wd55d], a ;make ??? 0 jp nz, Func_20977 jp Func_209eb diff --git a/engine/pinball_game/map_move.asm b/engine/pinball_game/map_move.asm index 30973fa..888388a 100755 --- a/engine/pinball_game/map_move.asm +++ b/engine/pinball_game/map_move.asm @@ -1,13 +1,13 @@ -Func_301ce: ; 0x301ce +HandleMapModeCollision: ; 0x301ce ld a, [wCurrentStage] call CallInFollowingTable -PointerTable_301d4: ; 0x301d4 - padded_dab Func_314ae ; STAGE_RED_FIELD_TOP - padded_dab Func_314ae ; STAGE_RED_FIELD_BOTTOM - padded_dab Func_314ae - padded_dab Func_314ae - padded_dab Func_3161b ; STAGE_BLUE_FIELD_TOP - padded_dab Func_3161b ; STAGE_BLUE_FIELD_BOTTOM +HandleMapModeCollisionPointerTable: ; 0x301d4 + padded_dab HandleRedMapModeCollision ; STAGE_RED_FIELD_TOP + padded_dab HandleRedMapModeCollision ; STAGE_RED_FIELD_BOTTOM + padded_dab HandleRedMapModeCollision + padded_dab HandleRedMapModeCollision + padded_dab HandleBlueMapModeCollision ; STAGE_BLUE_FIELD_TOP + padded_dab HandleBlueMapModeCollision ; STAGE_BLUE_FIELD_BOTTOM StartMapMoveMode: ; 0x301ec ld a, [wInSpecialMode] @@ -424,10 +424,10 @@ SecondMapMoveSet_BlueField: db SAFFRON_CITY db CINNABAR_ISLAND -Func_314ae: ; 0x314ae +HandleRedMapModeCollision: ; 0x314ae ld a, [wTimerActive] and a - ld a, [wd54c] + ld a, [wSpecialModeCollisionID] jr z, .asm_314d0 cp $1 jp z, OpenRedMapMoveSlotFromLeft @@ -574,10 +574,10 @@ ResolveSucsessfulRedMapMove: ; 0x315d5 scf ret -Func_3161b: ; 0x3161b +HandleBlueMapModeCollision: ; 0x3161b ld a, [wTimerActive] and a - ld a, [wd54c] + ld a, [wSpecialModeCollisionID] jr z, .asm_3163d cp $1 jp z, Func_31708 diff --git a/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm index fd5992c..e2ac723 100644 --- a/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm +++ b/engine/pinball_game/object_collision/blue_stage_resolve_collision.asm @@ -19,7 +19,7 @@ ResolveBlueFieldTopGameObjectCollisions: ; 0x1c715 call UpdateMapMoveCounters_BlueFieldTop callba ShowExtraBallMessage ld a, $0 - callba Func_10000 + callba CheckSpecialModeColision ret ResolveBlueFieldBottomGameObjectCollisions: ; 0x1c769 @@ -44,7 +44,7 @@ ResolveBlueFieldBottomGameObjectCollisions: ; 0x1c769 call UpdateMapMoveCounters_BlueFieldBottom callba ShowExtraBallMessage ld a, $0 - callba Func_10000 + callba CheckSpecialModeColision ret InitBlueFieldCollisionAttributes: ; 0x1c7c7 @@ -339,7 +339,7 @@ ResolveShellderCollision: ; 0x1c9c1 sub $3 ld [wWhichAnimatedShellder], a ld a, $4 - callba Func_10000 + callba CheckSpecialModeColision ld bc, FiveHundredPoints callba AddBigBCD6FromQueueWithBallMultiplier ret @@ -398,7 +398,7 @@ ResolveBlueStageSpinnerCollision: ; 0x1ca5f ld a, b ld [wd50c], a ld a, $c - callba Func_10000 + callba CheckSpecialModeColision ; fall through UpdateBlueStageSpinner: ; 0x1ca85 @@ -659,7 +659,7 @@ HandleSecondaryLeftAlleyTrigger_BlueField: ; 0x1d010 xor a ld [wLeftAlleyTrigger], a ld a, $1 - callba Func_10000 + callba CheckSpecialModeColision ret c ld a, [wLeftAlleyCount] cp $3 @@ -688,7 +688,7 @@ HandleSecondaryRightAlleyTrigger_BlueField: ; 0x1d047 xor a ld [wRightAlleyTrigger], a ld a, $2 - callba Func_10000 + callba CheckSpecialModeColision ret c ld a, [wRightAlleyCount] cp $3 @@ -1003,7 +1003,7 @@ ResolveSlowpokeCollision: ; 0x1d216 cp $0 jr nz, .asm_1d2f8 ld a, $f - callba Func_10000 + callba CheckSpecialModeColision .asm_1d2f8 xor a ld [wd642], a @@ -1122,7 +1122,7 @@ ResolveCloysterCollision: ; 0x1d32d lb de, $00, $06 call PlaySoundEffect ld a, $e - callba Func_10000 + callba CheckSpecialModeColision xor a ld [wBlueFieldForceFieldFrameCounter], a ld [wBlueFieldForceFieldSecondsCounter], a @@ -1176,7 +1176,7 @@ ResolveBonusMultiplierCollision_BlueField: ; 0x1d438 ld a, $3c ld [wBonusMultiplierRailingEndLightDuration], a ld a, $9 - callba Func_10000 + callba CheckSpecialModeColision ld a, [wd610] cp $3 jp nz, asm_1d4fa @@ -1203,7 +1203,7 @@ ResolveBonusMultiplierCollision_BlueField: ; 0x1d438 ld a, $1e ld [wBonusMultiplierRailingEndLightDuration], a ld a, $a - callba Func_10000 + callba CheckSpecialModeColision ld a, [wd611] cp $3 jr nz, asm_1d4fa @@ -1539,7 +1539,7 @@ ResolvePsyduckPoliwagCollision: ; 0x1dbd2 ld a, [wLeftMapMoveCounter] cp $3 ld a, $7 - callba Func_10000 + callba CheckSpecialModeColision ld a, $2 ld [wPoliwagState], a ld a, $78 @@ -1576,7 +1576,7 @@ ResolvePsyduckPoliwagCollision: ; 0x1dbd2 ld a, [wRightMapMoveCounter] cp $3 ld a, $8 - callba Func_10000 + callba CheckSpecialModeColision ld a, [wRightMapMoveCounter] cp $3 ccf @@ -2043,7 +2043,7 @@ ResolveBallUpgradeTriggersCollision_BlueField: ; 0x1e356 ld [wLeftAlleyTrigger], a ld [wSecondaryLeftAlleyTrigger], a ld a, $b - callba Func_10000 + callba CheckSpecialModeColision ld a, [wWhichPinballUpgradeTriggerId] sub $13 ld c, a @@ -2594,7 +2594,7 @@ DoSlotLogic_BlueField: ; 0x1e830 xor a ld [wIndicatorStates + 4], a ld a, $d - callba Func_10000 + callba CheckSpecialModeColision jr nc, .asm_1e84b ld a, $1 ld [wPinballIsVisible], a diff --git a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm index df0118b..7d9774e 100644 --- a/engine/pinball_game/object_collision/red_stage_resolve_collision.asm +++ b/engine/pinball_game/object_collision/red_stage_resolve_collision.asm @@ -18,7 +18,7 @@ ResolveRedFieldTopGameObjectCollisions: ; 0x1460e call UpdateMapMoveCounters_RedFieldTop callba ShowExtraBallMessage ld a, $0 - callba Func_10000 + callba CheckSpecialModeColision ret ResolveRedFieldBottomGameObjectCollisions: ; 0x14652 @@ -43,7 +43,7 @@ ResolveRedFieldBottomGameObjectCollisions: ; 0x14652 call UpdatePokeballs_RedField callba ShowExtraBallMessage ld a, $0 - callba Func_10000 + callba CheckSpecialModeColision ret UpdateBallSaver: ; 0x146a2 @@ -259,7 +259,7 @@ ResolveDiglettCollision: ; 0x147aa add $4 call LoadDiglettNumberGraphics ld a, $8 - callba Func_10000 + callba CheckSpecialModeColision ld a, [wRightMapMoveCounter] cp $3 call z, HitRightDiglett3Times @@ -275,7 +275,7 @@ ResolveDiglettCollision: ; 0x147aa ld a, [wLeftMapMoveCounter] call LoadDiglettNumberGraphics ld a, $7 - callba Func_10000 + callba CheckSpecialModeColision ld a, [wLeftMapMoveCounter] cp $3 call z, HitLeftDiglett3Times @@ -566,7 +566,7 @@ ResolveVoltorbCollision: ; 0x14d85 sub $3 ld [wWhichAnimatedVoltorb], a ld a, $4 - callba Func_10000 + callba CheckSpecialModeColision ld bc, FiveHundredPoints callba AddBigBCD6FromQueueWithBallMultiplier ret @@ -613,7 +613,7 @@ ResolveRedStageSpinnerCollision: ; 0x14dea ld a, b ld [wd50c], a ld a, $c - callba Func_10000 + callba CheckSpecialModeColision ; fall through UpdateRedStageSpinner: ; 0x14e10 @@ -937,7 +937,7 @@ ResolveBallUpgradeTriggersCollision_RedField: ; 0x1535d ld [wSecondaryLeftAlleyTrigger], a call UpdateFieldStructures_RedField ld a, $b - callba Func_10000 + callba CheckSpecialModeColision ld a, [wWhichPinballUpgradeTriggerId] sub $e ld c, a @@ -1301,7 +1301,7 @@ HandleSecondaryLeftAlleyTrigger_RedField: ; 0x1587c xor a ld [wLeftAlleyTrigger], a ld a, $1 - callba Func_10000 + callba CheckSpecialModeColision ret c ld a, [wLeftAlleyCount] cp $3 @@ -1331,7 +1331,7 @@ HandleThirdLeftAlleyTrigger_RedField: ; 0x158c0 xor a ld [wLeftAlleyTrigger], a ld a, $1 - callba Func_10000 + callba CheckSpecialModeColision ret c ld a, [wLeftAlleyCount] cp $3 @@ -1360,7 +1360,7 @@ HandleSecondaryStaryuAlleyTrigger_RedField: ; 0x15904 xor a ld [wSecondaryLeftAlleyTrigger], a ld a, $3 - callba Func_10000 + callba CheckSpecialModeColision ret HandleLeftAlleyTrigger_RedField: ; 0x1591e @@ -1395,7 +1395,7 @@ HandleSecondaryRightAlleyTrigger_RedField: ; 0x15944 xor a ld [wRightAlleyTrigger], a ld a, $2 - callba Func_10000 + callba CheckSpecialModeColision ret c ld a, [wRightAlleyCount] cp $3 @@ -1434,7 +1434,7 @@ HandleThirdRightAlleyTrigger_RedField: ; 0x15990 xor a ld [wRightAlleyTrigger], a ld a, $2 - callba Func_10000 + callba CheckSpecialModeColision ret c ld a, [wRightAlleyCount] cp $3 @@ -1606,7 +1606,7 @@ ResolveBellsproutCollision: ; 0x15e93 lb de, $00, $06 call PlaySoundEffect ld a, $5 - callba Func_10000 + callba CheckSpecialModeColision ret BellsproutAnimationData: ; 0x15f69 @@ -2040,7 +2040,7 @@ DoSlotLogic_RedField: ; 0x16352 xor a ld [wIndicatorStates + 4], a ld a, $d - callba Func_10000 + callba CheckSpecialModeColision jr nc, .asm_1636d ld a, $1 ld [wPinballIsVisible], a @@ -2513,7 +2513,7 @@ ResolveStaryuCollision_Top: ; 0x16781 ld [wd503], a call LoadStaryuGraphics_Top ld a, $6 - callba Func_10000 + callba CheckSpecialModeColision ret .asm_167bd @@ -2562,7 +2562,7 @@ ResolveStaryuCollision_Bottom: ; 0x167ff ld [wd503], a call LoadStaryuGraphics_Bottom ld a, $6 - callba Func_10000 + callba CheckSpecialModeColision ret .noCollision @@ -2695,7 +2695,7 @@ ResolveRedStageBonusMultiplierCollision: ; 016d9d sub $21 jr nz, .hitRightRailing ld a, $9 - callba Func_10000 + callba CheckSpecialModeColision ld a, [wd610] cp $3 jr nz, .asm_16e35 @@ -2710,7 +2710,7 @@ ResolveRedStageBonusMultiplierCollision: ; 016d9d .hitRightRailing ld a, $a - callba Func_10000 + callba CheckSpecialModeColision ld a, [wd611] cp $3 jr nz, .asm_16e35 diff --git a/home/random.asm b/home/random.asm index 84e4571..e2b8c32 100644 --- a/home/random.asm +++ b/home/random.asm @@ -4,16 +4,16 @@ GenRandom: ; 0x959 push hl ld a, [wd811] ld c, a - ld b, $0 + ld b, $0 ;load ??? into c inc a - cp 54 + 1 + cp 54 + 1 ;inc ???, if ??? is 55 do alot of subtraction and make ??? 0 jr nz, .asm_96e call Func_9fa xor a ld bc, $0000 .asm_96e - ld [wd811], a - ld hl, wd812 + ld [wd811], a ;place wd811 + 1 back in + ld hl, wd812 ;choose number generated based on wd811 and all the subtraction add hl, bc ld a, [hl] pop hl @@ -79,11 +79,11 @@ Func_9fa: ; 0x9fa ld a, [wd810] ld d, a ld bc, wd812 - ld hl, wd812 + $1f + ld hl, wd812 + $1f ;d831 ld e, $18 .asm_a06 ld a, [bc] - sub [hl] + sub [hl] ;sub d831 from wd812, add wd810 if it does not carry, put result in wd812. repeat 24 times jr nc, .asm_a0b add d .asm_a0b @@ -109,11 +109,11 @@ Func_a21: ; 0xa21 push hl ld c, a ld b, $0 - ld hl, Data_a38 + ld hl, Data_a38 ;jump to c in table, load (twice c?) into l add hl, bc ld l, [hl] - call GenRandom - call Func_dd4 + call GenRandom ;a = a psuedo random number + call Func_dd4 ;a * l inc h srl h ld a, h @@ -121,7 +121,7 @@ Func_a21: ; 0xa21 pop bc ret -Data_a38: +Data_a38: ;starting from 0, go up 2 each byte x = 0 REPT 128 db x | ((x >> 7) & 1) diff --git a/main.asm b/main.asm index 8bc7f82..8c0807f 100644 --- a/main.asm +++ b/main.asm @@ -102,31 +102,31 @@ INCLUDE "engine/pinball_game/end_of_ball_bonus.asm" SECTION "bank4", ROMX -Func_10000: ; 0x10000 +CheckSpecialModeColision: ; 0x10000 ld c, a ld a, [wInSpecialMode] ;special mode in c and a ret z ;if mot in special mode, ret ld a, c - ld [wd54c], a + ld [wSpecialModeCollisionID], a ld a, [wSpecialMode] cp SPECIAL_MODE_CATCHEM ;branch based on mode - jp z, Func_10a95 + jp z, HandleEvoModeCollision ;call evo mode logic cp SPECIAL_MODE_EVOLUTION - jr nz, .next - callba Func_301ce + jr nz, .CatchMode ;call catch mode logic + callba HandleMapModeCollision ;call map move logic ret -.next +.CatchMode ld a, [wCurrentStage] call CallInFollowingTable -CallTable_10027: ; 0x10027 - padded_dab Func_20000 ; STAGE_RED_FIELD_TOP - padded_dab Func_20000 ; STAGE_RED_FIELD_BOTTOM - padded_dab Func_20000 - padded_dab Func_20000 - padded_dab Func_202bc ; STAGE_BLUE_FIELD_TOP - padded_dab Func_202bc ; STAGE_BLUE_FIELD_BOTTOM +HandleCatchEmCollisionCallTable: ; 0x10027 + padded_dab HandleRedCatchEmCollision ; STAGE_RED_FIELD_TOP + padded_dab HandleRedCatchEmCollision ; STAGE_RED_FIELD_BOTTOM + padded_dab HandleRedCatchEmCollision + padded_dab HandleRedCatchEmCollision + padded_dab HandleBlueCatchEmCollision ; STAGE_BLUE_FIELD_TOP + padded_dab HandleBlueCatchEmCollision ; STAGE_BLUE_FIELD_BOTTOM INCLUDE "engine/pinball_game/catchem_mode.asm" INCLUDE "engine/pinball_game/evolution_mode.asm" diff --git a/wram.asm b/wram.asm index f19f0c3..a753245 100644 --- a/wram.asm +++ b/wram.asm @@ -566,7 +566,23 @@ wInSpecialMode:: ; 0xd54b ; Set to 1 if currently in special game mode. See wSpecialMode. ds $1 -wd54c:: ; 0xd54c 10000 sets it to a input, records what the ball has collided with. 7 and 8 from the digletts, 4 from voltorb, b = upper cave lights?, 1 is upper left red trigger, 2 is a right trigger, 5 is bellsprout, d = slot, 6 = staryu, 9/a = right railing multiplier?, +wSpecialModeCollisionID:: ; 0xd54c 10000 sets it to a input, records what the ball has collided with +;0 nothing hit? +;1 upper left red trigger (under ditto) | secondary left trigger on blue +;2 second right trigger +;3 second staryu ally trigger +;4 any voltob | any shellder +;5 bellsprout | N/A +;6 staryu | N/A +;7 left diglett | poliwag +;8 right diglett | psyduck +;9 hit right railing (33 multiplier) +;a hit right railing (otherwise) +;b upper cave lights (ball upgrade) +;c Spinner +;d slot hole +;e N/A | cloyster +;f N/A | slowpoke ds $1 wd54d:: ; 0xd54d catch mode progress? @@ -1908,7 +1924,7 @@ wOBP1:: ; 0xd80e wd80f:: ; 0xd80f ds $1 -wd810:: ; 0xd810 +wd810:: ; 0xd810 loaded by Func_9fa, RNG related ds $1 wd811:: ; 0xd811 -- cgit v1.2.3