summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xhome.asm182
-rwxr-xr-xhome/text.asm5
-rwxr-xr-xhram.asm7
-rwxr-xr-xmacros.asm6
-rwxr-xr-xmain.asm314
-rwxr-xr-xwram.asm23
6 files changed, 229 insertions, 308 deletions
diff --git a/home.asm b/home.asm
index 2444529..d22cf46 100755
--- a/home.asm
+++ b/home.asm
@@ -4004,16 +4004,19 @@ Func_208c: ; 0x208c
scf
ret
-Func_20ab: ; 0x20ab
+MultiplyBbyCUnsigned: ; 0x20ab
+ ; u16 bc = (u8)b * (u8)c
push af
xor a
- ld [$ffb6], a
- jr .asm_20c6
+ ld [hSignedMathSignBuffer], a
+ jr asm_20c6
+MultiplyBbyCSigned:
+ ; s16 bc = (s8)b * (s8)c
push af
ld a, b
xor c
- ld [$ffb6], a
+ ld [hSignedMathSignBuffer], a
bit 7, b
jr z, .asm_20be
ld a, b
@@ -4022,24 +4025,26 @@ Func_20ab: ; 0x20ab
ld b, a
.asm_20be
bit 7, c
- jr z, .asm_20c6
+ jr z, asm_20c6
ld a, c
cpl
inc a
ld c, a
-.asm_20c6
+asm_20c6
+ ; b*c == (b**2 + c**2 - (b - c)**2) / 2
push de
push hl
ld a, b
cp c
- jr nc, .asm_20ce
+ jr nc, .c_le_b
ld b, c
ld c, a
-.asm_20ce
- ld h, $3e
+.c_le_b
+ ; hl = b**2 + c**2
+ ld h, SquaresLow / $100
ld l, c
ld e, [hl]
- inc h
+ inc h ; SquaresHigh / $100
ld d, [hl]
ld l, b
ld a, [hl]
@@ -4048,13 +4053,14 @@ Func_20ab: ; 0x20ab
ld h, a
add hl, de
push af
- ld d, $3e
+ ; hl -= (b - c) ** 2
+ ld d, SquaresLow / $100
ld a, b
sub c
ld e, a
ld a, [de]
ld c, a
- inc d
+ inc d ; SquaresHigh / $100
ld a, [de]
ld b, a
ld a, l
@@ -4063,21 +4069,22 @@ Func_20ab: ; 0x20ab
ld a, h
sbc b
ld h, a
- jr nc, .asm_20f1
+ jr nc, .no_carry
pop af
ccf
- jr .asm_20f2
+ jr .check_sign
-.asm_20f1
+.no_carry
pop af
-.asm_20f2
+.check_sign
+ ; hl /= 2
rr h
rr l
ld b, h
ld c, l
- ld a, [$ffb6]
+ ld a, [hSignedMathSignBuffer]
rlca
- jr nc, .asm_2107
+ jr nc, .done
ld a, c
cpl
add $1
@@ -4086,20 +4093,22 @@ Func_20ab: ; 0x20ab
cpl
adc $0
ld b, a
-.asm_2107
+.done
pop hl
pop de
pop af
ret
-Func_210b: ; 0x210b
+MultiplyBCByEAndRoundToMostSignificantShort: ; 0x210b
+; bc = round(bc * e / 256)
+; b^d = sign of output
push af
push hl
ld a, b
xor d
- ld [$ffb7], a
+ ld [hSignedMathSignBuffer2], a
bit 7, b
- jr z, .asm_211f
+ jr z, .positive1
ld a, c
cpl
add $1
@@ -4108,10 +4117,10 @@ Func_210b: ; 0x210b
cpl
adc $0
ld b, a
-.asm_211f
+.positive1
push bc
ld b, e
- call Func_20ab
+ call MultiplyBbyCUnsigned
ld l, c
ld h, b
ld bc, $0080
@@ -4120,11 +4129,11 @@ Func_210b: ; 0x210b
ld h, $0
pop bc
ld c, e
- call Func_20ab
+ call MultiplyBbyCUnsigned
add hl, bc
- ld a, [$ffb7]
+ ld a, [hSignedMathSignBuffer2]
rlca
- jr nc, .asm_2142
+ jr nc, .positive2
ld a, l
cpl
add $1
@@ -4133,33 +4142,35 @@ Func_210b: ; 0x210b
cpl
adc $0
ld h, a
-.asm_2142
+.positive2
ld c, l
ld b, h
pop hl
pop af
ret
-Func_2147: ; 0x2147
+Cosine: ; 0x2147
+ ; cos(a)
add $40
; fall through
-Func_2149: ; 0x2149
+Sine: ; 0x2149
+ ; sin(a)
push hl
- ld [$ffb6], a
+ ld [hSignedMathSignBuffer], a
and $7f
cp $40
- jr c, .asm_2155
+ jr c, .positive
cpl
- add $81
-.asm_2155
- ld hl, Data_26be
+ add $80+1
+.positive
+ ld hl, SineTable
ld e, a
ld d, $0
add hl, de
ld e, [hl]
pop hl
ld d, $0
- ld a, [$ffb6]
+ ld a, [hSignedMathSignBuffer]
sla a
ret nc
ld d, $ff
@@ -4253,51 +4264,53 @@ AddVelocityToPosition: ; 0x21c3
ld [hl], a
ret
-Func_21e5: ; 0x21e5
+NegateAngleAndApplyCollisionForce: ; 0x21e5
cpl
inc a
; fall through
-Func_21e7: ; 0x21e7
+ApplyCollisionForce: ; 0x21e7
push hl
+ ; bc_ret = bc * cos(a) + de * sin(x)
+ ; de_ret = bc * cos(a) - de * sin(x)
push bc
push de
- ld [$ff8c], a
- call Func_2147
+ ld [hSineOrCosineArgumentBuffer], a
+ call Cosine
ld a, e
- ld [$ff8d], a
+ ld [hCosineResultBuffer], a
ld a, d
- ld [$ff8e], a
- call Func_210b
+ ld [hCosineResultBuffer + 1], a
+ call MultiplyBCByEAndRoundToMostSignificantShort
ld l, c
ld h, b
pop bc
push bc
- ld a, [$ff8c]
- call Func_2149
+ ld a, [hSineOrCosineArgumentBuffer]
+ call Sine
ld a, e
- ld [$ff8f], a
+ ld [hSineResultBuffer], a
ld a, d
- ld [$ff90], a
- call Func_210b
+ ld [hSineResultBuffer + 1], a
+ call MultiplyBCByEAndRoundToMostSignificantShort
add hl, bc
pop de
pop bc
push hl
push de
- ld a, [$ff8f]
+ ld a, [hSineResultBuffer]
ld e, a
- ld a, [$ff90]
+ ld a, [hSineResultBuffer + 1]
cpl
ld d, a
- call Func_210b
+ call MultiplyBCByEAndRoundToMostSignificantShort
ld l, c
ld h, b
pop bc
- ld a, [$ff8d]
+ ld a, [hCosineResultBuffer]
ld e, a
- ld a, [$ff8e]
+ ld a, [hCosineResultBuffer + 1]
ld d, a
- call Func_210b
+ call MultiplyBCByEAndRoundToMostSignificantShort
add hl, bc
ld d, h
ld e, l
@@ -4305,7 +4318,7 @@ Func_21e7: ; 0x21e7
pop hl
ret
-Func_222b: ; 0x222b
+ApplyTorque: ; 0x222b
push hl
ld hl, wd7f8
ld [hl], $ff
@@ -4410,7 +4423,7 @@ SetBallVelocity: ; 0x22a7
pop hl
ret
-Func_22b5: ; 0x22b5
+CheckObjectCollision: ; 0x22b5
ld a, [wBallXPos + 1]
sub $4
push af
@@ -4439,9 +4452,9 @@ Func_22b5: ; 0x22b5
ld b, $0
add hl, bc
ld a, l
- ld [wd7f3], a
+ ld [wBallPositionPointerOffsetFromStageTopLeft], a
ld a, h
- ld [wd7f4], a
+ ld [wBallPositionPointerOffsetFromStageTopLeft + 1], a
ld a, [wStageCollisionMapPointer]
ld c, a
ld a, [wStageCollisionMapPointer + 1]
@@ -4622,19 +4635,19 @@ Func_22b5: ; 0x22b5
ret z
ld a, [hLoadedROMBank]
push af
- ld a, Bank(Data_8817)
+ ld a, Bank(CollisionForceAngles)
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
push de
ld e, d
ld d, $0
- ld hl, Data_8817
+ ld hl, CollisionForceAngles
add hl, de
ld a, [hl]
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
sla e
rl d
- ld hl, Data_8917
+ ld hl, CollisionYDeltas
add hl, de
ld a, [wBallYPos]
add [hl]
@@ -4643,7 +4656,7 @@ Func_22b5: ; 0x22b5
ld a, [wBallYPos + 1]
adc [hl]
ld [wBallYPos + 1], a
- ld hl, Data_8b17
+ ld hl, CollisionXDeltas
add hl, de
ld a, [wBallXPos]
add [hl]
@@ -4672,7 +4685,7 @@ Func_22b5: ; 0x22b5
and $1e
ld c, a
ld b, $0
- ld hl, Data_250e
+ ld hl, SubTileBallPosDeltas
add hl, bc
ld a, [wSubTileBallXPos]
add $4
@@ -4694,12 +4707,12 @@ Func_22b5: ; 0x22b5
add hl, bc
ld a, [hl]
ld [wCurCollisionAttribute], a
- ld hl, Data_250a
+ ld hl, BallPositionPointerOffsetDeltas
add hl, bc
- ld a, [wd7f3]
+ ld a, [wBallPositionPointerOffsetFromStageTopLeft]
add [hl]
ld [wd7f6], a
- ld a, [wd7f4]
+ ld a, [wBallPositionPointerOffsetFromStageTopLeft + 1]
adc $0
ld [wd7f7], a
ret
@@ -4787,11 +4800,27 @@ Func_248a: ; 0x248a
scf
ret
-Data_250a:
- dr $250a, $250e
-
-Data_250e:
- dr $250e, $252e
+BallPositionPointerOffsetDeltas:
+ db $00, $20
+ db $01, $21
+
+SubTileBallPosDeltas:
+ db 4, 0
+ db 4, 1
+ db 3, 3
+ db 1, 4
+ db 0, 4
+ db -1, 4
+ db -3, 3
+ db -4, 1
+ db -4, 0
+ db -4, -1
+ db -3, -3
+ db -1, -4
+ db 0, -4
+ db 1, -4
+ db 3, -3
+ db 4, -1
SubTileXPos_CollisionDataPointers: ; 0x252e
dw SubTileXPos_CollisionData0
@@ -4947,8 +4976,11 @@ SubTileXPos_CollisionData7: ; 0x268e
db $18, $10, $04
db $18, $08, $03
-Data_26be:
- dr $26be, $2720
+SineTable:
+ dr $26be, $26ff
+
+Data_26ff:
+ dr $26ff, $2720
CheckGameObjectCollisions: ; 0x2720
ld a, $ff
@@ -5595,7 +5627,7 @@ ApplyTiltForces: ; 0x36c1
ld l, a
bit 7, h
ret nz
- ld a, [wd7ea]
+ ld a, [wCollisionForceAngle]
ld c, a
ld b, $0
sla c
diff --git a/home/text.asm b/home/text.asm
index 9549408..97de605 100755
--- a/home/text.asm
+++ b/home/text.asm
@@ -674,10 +674,7 @@ Func_3475: ; 0x3475
call HandleTilts
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(HandleFlippers)
- ld hl, HandleFlippers
- call nz, BankSwitch
+ callba nz, HandleFlippers
callba Func_84b7
call Func_33e3
call Func_926
diff --git a/hram.asm b/hram.asm
index 36e2800..0bebc0a 100755
--- a/hram.asm
+++ b/hram.asm
@@ -36,6 +36,13 @@ hNumFramesSinceLastVBlank EQU $FFB2
hNumFramesDropped EQU $FFB3
hVBlankCount EQU $FFB4
+hSignedMathSignBuffer EQU $FFB6
+hSignedMathSignBuffer2 EQU $FFB7
+
+hSineOrCosineArgumentBuffer EQU $FF8C
+hCosineResultBuffer EQU $FF8D
+hSineResultBuffer EQU $FF8F
+
hFlipperYCollisionAttribute EQU $FFBF ; Vertical collision attribute for when ball collides with a flipper.
hFFC4 = $FFC4
diff --git a/macros.asm b/macros.asm
index 51091bc..02d2e1f 100755
--- a/macros.asm
+++ b/macros.asm
@@ -60,9 +60,15 @@ bigdw: MACRO ; big-endian word
callba: MACRO
ld [hFarCallTempA], a
+ IF _NARG > 1
+ ld a, BANK(\2)
+ ld hl, \2
+ call \1, BankSwitch
+ ELSE
ld a, BANK(\1)
ld hl, \1
call BankSwitch
+ ENDC
ENDM
bigBCD6: MACRO
diff --git a/main.asm b/main.asm
index fa48692..3b0cc30 100755
--- a/main.asm
+++ b/main.asm
@@ -1203,7 +1203,7 @@ DrawInGameMenu: ; 0x87ed
call LoadVRAMData
ret
-Data_8817: ; 0x8817
+CollisionForceAngles: ; 0x8817
; This data has something to do with collisions.
db $C0
db $C5
@@ -1462,7 +1462,7 @@ Data_8817: ; 0x8817
db $2B
db $B6
-Data_8917: ; 0x8917
+CollisionYDeltas: ; 0x8917
; This has to do with y-collision data
dw $0000
dw $FFE0
@@ -1721,7 +1721,7 @@ Data_8917: ; 0x8917
dw $FBA3
dw $003E
-Data_8b17: ; 0x8b17
+CollisionXDeltas: ; 0x8b17
; This data has to do with x-collision data
dw $FF00
dw $FEFB
@@ -5958,18 +5958,15 @@ Func_d909: ; 0xd909
call HandleTilts
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(HandleFlippers)
- ld hl, HandleFlippers
- call nz, BankSwitch ; only perform flipper routines on the lower-half of stages
+ callba nz, HandleFlippers ; only perform flipper routines on the lower-half of stages
ld a, [wFlipperCollision]
and a
- ld a, [wd7ea]
+ ld a, [wCollisionForceAngle]
push af
- call Func_22b5 ; collision stuff
+ call CheckObjectCollision ; collision stuff
pop af
jr z, .noFlipperCollision
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
.noFlipperCollision
call CheckGameObjectCollisions
call Func_281c ; not collision-related
@@ -5983,16 +5980,17 @@ Func_d909: ; 0xd909
.didntPressMenuKey
ld a, [wd7e9] ; check for collision flag
and a
- jr z, .asm_d9a2
+ jr z, .skip_collision
call ApplyTiltForces
- call LoadBallVelocity
- ld a, [wd7ea]
- call Func_21e7
- call Func_222b
+ call LoadBallVelocity ; bc = x velocity, de = y velocity
+ ld a, [wCollisionForceAngle]
+ call ApplyCollisionForce
+ call ApplyTorque
ld a, [wFlipperCollision]
and a
- jr z, .asm_d993
- ld hl, wd7bc
+ jr z, .not_flippers_2
+ ; de -= *wFlipperYForce
+ ld hl, wFlipperYForce
ld a, [hli]
ld h, [hl]
ld l, a
@@ -6002,7 +6000,8 @@ Func_d909: ; 0xd909
ld a, d
sbc h
ld d, a
- ld hl, wd7ba
+ ; bc += *wFlipperXForce
+ ld hl, wFlipperXForce
ld a, [hli]
ld h, [hl]
ld l, a
@@ -6012,17 +6011,17 @@ Func_d909: ; 0xd909
ld a, b
adc h
ld b, a
- jr .asm_d999
+ jr .next
-.asm_d993
+.not_flippers_2
ld a, [wd7f8]
and a
- jr nz, .asm_d9a2
-.asm_d999
- ld a, [wd7ea]
- call Func_21e5
+ jr nz, .skip_collision
+.next
+ ld a, [wCollisionForceAngle]
+ call NegateAngleAndApplyCollisionForce
call SetBallVelocity
-.asm_d9a2
+.skip_collision
call MoveBallPosition
callba CheckStageTransition
callba Func_84b7
@@ -6039,10 +6038,7 @@ Func_d909: ; 0xd909
.asm_d9e9
ld a, [wd57d]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_86a4)
- ld hl, Func_86a4
- call nz, BankSwitch
+ callba nz, Func_86a4
ld a, [wd4ae]
and a
ret z
@@ -6088,10 +6084,7 @@ Func_da36: ; 0xda36
call HandleTilts
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(HandleFlippers)
- ld hl, HandleFlippers
- call nz, BankSwitch
+ callba nz, HandleFlippers
callba Func_84b7
call Func_33e3
callba Func_85c7
@@ -6948,8 +6941,8 @@ HandleFlippers: ; 0xe0fe
xor a
ld [wFlipperCollision], a
ld [hFlipperYCollisionAttribute], a
- ld [wd7ba], a
- ld [wd7bb], a
+ ld [wFlipperXForce], a
+ ld [wFlipperXForce + 1], a
call Func_e118
call CheckFlipperCollision
ld a, [wFlipperCollision]
@@ -7549,8 +7542,8 @@ HandleFlipperCollision: ; 0xe442
ld a, $1
ld [wd7e9], a
xor a
- ld [wd7f3], a
- ld [wd7f4], a
+ ld [wBallPositionPointerOffsetFromStageTopLeft], a
+ ld [wBallPositionPointerOffsetFromStageTopLeft + 1], a
ld [wCurCollisionAttribute], a
ld [wd7f6], a
ld [wd7f7], a
@@ -7574,9 +7567,9 @@ HandleFlipperCollision: ; 0xe442
rl d ; multiplied de by 4
call Func_e379
ld a, b
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, l
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, [wBallXPos + 1]
cp $50 ; which flipper did the ball hit?
ld a, [wFlipperXCollisionAttribute]
@@ -7584,15 +7577,15 @@ HandleFlipperCollision: ; 0xe442
cpl ; invert the x collision attribute
inc a
.asm_e48b
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
ld a, $1
ld [wd7eb], a
- ld a, [wd7bd]
+ ld a, [wFlipperYForce + 1]
bit 7, a
ret z
xor a
- ld [wd7bc], a
- ld [wd7bd], a
+ ld [wFlipperYForce], a
+ ld [wFlipperYForce + 1], a
ret
Func_e4a1: ; 0xe4a1
@@ -8847,10 +8840,7 @@ SlotBonusMultiplier: ; 0xf0c1
call .DivideBy25
ld a, c
cp b
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call nz, BankSwitch
+ callba nz, Func_30164
callba Func_16f95
ld a, [wd60c]
callba Func_f154 ; no need for BankSwitch here...
@@ -10739,10 +10729,7 @@ CapturePokemon: ; 0x1052d
jr nc, .asm_105d1
ld c, $a
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_105d1
call SetPokemonOwnedFlag
ld a, [wd624]
@@ -11183,10 +11170,7 @@ Func_10871: ; 0x10871
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_102bc)
- ld hl, Func_102bc
- call nz, BankSwitch
+ callba nz, Func_102bc
ret
Func_108f5: ; 0x108f5
@@ -11295,10 +11279,7 @@ Func_1098c: ; 0x1098c
call BankSwitch
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_102bc)
- ld hl, Func_102bc
- call nz, BankSwitch
+ callba nz, Func_102bc
ret
Func_109fc: ; 0x109fc
@@ -12011,10 +11992,7 @@ Func_10ebb: ; 0x10ebb
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_102bc)
- ld hl, Func_102bc
- call nz, BankSwitch
+ callba nz, Func_102bc
ret
IndicatorStatesPointerTable_10f3b: ; 0x10f3b
@@ -12150,10 +12128,7 @@ Func_11061: ; 0x11061
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_102bc)
- ld hl, Func_102bc
- call nz, BankSwitch
+ callba nz, Func_102bc
ret
IndicatorStatesPointerTable_110ed: ; 0x110ed
@@ -13917,10 +13892,7 @@ Func_1414b: ; 0x1414b
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_10301)
- ld hl, Func_10301
- call nz, BankSwitch
+ callba nz, Func_10301
ld a, [wd5f3]
and a
ret z
@@ -14004,10 +13976,7 @@ Func_14210: ; 0x14210
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_102bc)
- ld hl, Func_102bc
- call nz, BankSwitch
+ callba nz, Func_102bc
ret
Func_14234: ; 0x14234
@@ -14952,10 +14921,7 @@ Func_14920: ; 0x14920
jr nc, .asm_14937
ld c, $a
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_14937
ld a, $1
ld [wd55a], a
@@ -14968,10 +14934,7 @@ Func_14947: ; 0x14947
jr nc, .asm_1495e
ld c, $a
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_1495e
xor a
ld [wd55a], a
@@ -15120,9 +15083,9 @@ Func_14dc9: ; 0x14dc9
ld [wd804], a
ld hl, $0200
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $0e
@@ -16332,10 +16295,7 @@ Func_15e93: ; 0x15e93
ret nc
ld c, $19
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
ret
.asm_15f35
@@ -16438,9 +16398,9 @@ Func_15fda: ; 0x15fda
ld [wd804], a
ld hl, $0200
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wWhichBumperId]
@@ -16449,9 +16409,9 @@ Func_15fda: ; 0x15fda
ld b, $0
ld hl, Data_1600e
add hl, bc
- ld a, [wd7ea]
+ ld a, [wCollisionForceAngle]
add [hl]
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
lb de, $00, $0b
call PlaySoundEffect
ret
@@ -16933,10 +16893,7 @@ Func_164e3: ; 0x164e3
.asm_16506
ld hl, wCurrentStage
bit 0, [hl]
- ld [hFarCallTempA], a
- ld a, Bank(Func_30256)
- ld hl, Func_30256
- call nz, BankSwitch
+ callba nz, Func_30256
ld a, [wd604]
and a
ret nz
@@ -17001,10 +16958,7 @@ Func_1652d: ; 0x1652d
Func_1658f: ; 0x1658f
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(LoadGreyBillboardPaletteData)
- ld hl, LoadGreyBillboardPaletteData
- call nz, BankSwitch
+ callba nz, LoadGreyBillboardPaletteData
.showNextMap
ld a, [wInitialMapSelectionIndex]
inc a
@@ -17155,10 +17109,7 @@ Func_1669e: ; 0x1669e
jr nc, .asm_166f0
ld c, $a
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_166f0
lb de, $16, $10
call PlaySoundEffect
@@ -17495,10 +17446,7 @@ Func_16d9d: ; 016d9d
jr nc, .asm_16e24
ld c, $19
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_16e24
ld a, [wd60c]
ld [wd614], a
@@ -18703,7 +18651,7 @@ CheckSingleGastlyCollision: ; 0x1820d
bit 7, a
jr nz, .noCollision
sla a
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
@@ -18780,7 +18728,7 @@ CheckSingleHaunterCollision: ; 0x18298
bit 7, a
jr nz, .noCollision
sla a
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
@@ -18843,7 +18791,7 @@ CheckGiantGengarCollision: ; 0x18308
bit 7, a
jr nz, .noCollision
sla a
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
@@ -18984,9 +18932,9 @@ Func_18464: ; 0x18464
ld [wd804], a
ld hl, $0100
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $2c
@@ -19203,9 +19151,9 @@ Func_1860b: ; 0x1860b
ld [wd804], a
ld hl, $0100
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $2d
@@ -19442,9 +19390,9 @@ Func_187b1: ; 0x187b1
ld [wd804], a
ld hl, $0200
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wGengarYPos]
@@ -19773,9 +19721,9 @@ Func_18d34: ; 0x18d34
ld [wd804], a
ld hl, $0100
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld de, $002f
@@ -21313,9 +21261,9 @@ Func_19c52: ; 0x19c52
call PlaySoundEffect
ld hl, $0100
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wd73c]
@@ -21626,9 +21574,9 @@ Func_1aad4: ; 0x1aad4
ld [wd804], a
ld hl, $0200
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
.asm_1ab2c
@@ -22218,10 +22166,7 @@ Func_1c305: ; 0x1c305
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_10301)
- ld hl, Func_10301
- call nz, BankSwitch
+ callba nz, Func_10301
ld a, [wd5f3]
and a
ret z
@@ -22305,10 +22250,7 @@ Func_1c3ca: ; 0x1c3ca
callba Func_10184
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_102bc)
- ld hl, Func_102bc
- call nz, BankSwitch
+ callba nz, Func_102bc
ret
Func_1c3ee: ; 0x1c3ee
@@ -22850,10 +22792,7 @@ Func_1c7d7: ; 0x1c7d7
Func_1c839: ; 0x1c839
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(LoadGreyBillboardPaletteData)
- ld hl, LoadGreyBillboardPaletteData
- call nz, BankSwitch
+ callba nz, LoadGreyBillboardPaletteData
.showNextMap
ld a, [wInitialMapSelectionIndex]
inc a
@@ -23106,9 +23045,9 @@ Func_1ca29: ; 0x1ca29
ld [wd804], a
ld hl, $0200
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
lb de, $00, $0e
@@ -23331,9 +23270,9 @@ Func_1ce94: ; 0x1ce94
ld [wd804], a
ld hl, $0200
ld a, l
- ld [wd7bc], a
+ ld [wFlipperYForce], a
ld a, h
- ld [wd7bd], a
+ ld [wFlipperYForce + 1], a
ld a, $80
ld [wFlipperCollision], a
ld a, [wWhichBumperId]
@@ -23342,9 +23281,9 @@ Func_1ce94: ; 0x1ce94
ld b, $0
ld hl, Data_1cec8
add hl, bc
- ld a, [wd7ea]
+ ld a, [wCollisionForceAngle]
add [hl]
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
lb de, $00, $0b
call PlaySoundEffect
ret
@@ -23572,10 +23511,7 @@ Func_1d133: ; 0x1d133
jr nc, .asm_1d185
ld c, $a
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_1d185
lb de, $16, $10
call PlaySoundEffect
@@ -23721,10 +23657,7 @@ Func_1d216: ; 0x1d216
ret nc
ld c, $19
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
ret
.asm_1d2b6
@@ -23832,10 +23765,7 @@ HandleEnteringCloyster: ; 0x1d32d
ret nc
ld c, $19
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
ret
.asm_1d3cb
@@ -23952,10 +23882,7 @@ Func_1d438: ; 0x1d438
jr nc, .asm_1d4e9
ld c, $19
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_1d4e9
ld a, [wd60c]
ld [wd614], a
@@ -24505,10 +24432,7 @@ Func_1ddc7: ; 0x1ddc7
jr nc, .asm_1dde4
ld c, $a
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_1dde4
xor a
ld [wd55a], a
@@ -24524,10 +24448,7 @@ Func_1ddf4: ; 0x1ddf4
jr nc, .asm_1de11
ld c, $a
call Func_e55
- ld [hFarCallTempA], a
- ld a, Bank(Func_30164)
- ld hl, Func_30164
- call z, BankSwitch
+ callba z, Func_30164
.asm_1de11
ld a, $1
ld [wd55a], a
@@ -25477,10 +25398,7 @@ Func_1e9c0: ; 0x1e9c0
.asm_1e9e3
ld hl, wCurrentStage
bit 0, [hl]
- ld [hFarCallTempA], a
- ld a, Bank(Func_30256)
- ld hl, Func_30256
- call nz, BankSwitch
+ callba nz, Func_30256
ld a, [wd604]
and a
ret nz
@@ -26697,10 +26615,7 @@ Func_2006b: ; 0x2006b
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_10301)
- ld hl, Func_10301
- call nz, BankSwitch
+ callba nz, Func_10301
.asm_20098
ld a, $1
ld [wd5c6], a
@@ -27000,10 +26915,7 @@ Func_2032c: ; 0x2032c
callba Func_10362
ld a, [hGameBoyColorFlag]
and a
- ld [hFarCallTempA], a
- ld a, Bank(Func_10301)
- ld hl, Func_10301
- call nz, BankSwitch
+ callba nz, Func_10301
.asm_20333
ld a, $1
ld [wd5c6], a
@@ -27317,10 +27229,7 @@ Func_205e0: ; 0x205e0
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_14135)
- ld hl, Func_14135
- call nz, BankSwitch
+ callba nz, Func_14135
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
@@ -27743,10 +27652,7 @@ Func_20977: ; 0x20977
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_14135)
- ld hl, Func_14135
- call nz, BankSwitch
+ callba nz, Func_14135
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_209bf
@@ -27794,10 +27700,7 @@ Func_209eb: ; 0x209eb
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_14135)
- ld hl, Func_14135
- call nz, BankSwitch
+ callba nz, Func_14135
ld a, $58
ld [wd556], a
ld a, $2
@@ -27872,10 +27775,7 @@ asm_20a9f:
ld [wIndicatorStates + 10], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_14135)
- ld hl, Func_14135
- call nz, BankSwitch
+ callba nz, Func_14135
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20ada
@@ -28058,10 +27958,7 @@ Func_20c08: ; 0x20c08
ld [wIndicatorStates + 3], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_1c2cb)
- ld hl, Func_1c2cb
- call nz, BankSwitch
+ callba nz, Func_1c2cb
ld bc, OneMillionPoints
callba AddBigBCD6FromQueue
call FillBottomMessageBufferWithBlackTile
@@ -28464,10 +28361,7 @@ Func_20f75: ; 0x20f75
ld [wIndicatorStates + 3], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_1c2cb)
- ld hl, Func_1c2cb
- call nz, BankSwitch
+ callba nz, Func_1c2cb
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_20fc3
@@ -28516,10 +28410,7 @@ Func_20fef: ; 0x20fef
ld [wIndicatorStates + 3], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_1c2cb)
- ld hl, Func_1c2cb
- call nz, BankSwitch
+ callba nz, Func_1c2cb
ld a, $58
ld [wd556], a
ld a, $2
@@ -28614,10 +28505,7 @@ asm_210c7:
ld [wIndicatorStates + 2], a
ld a, [wCurrentStage]
bit 0, a
- ld [hFarCallTempA], a
- ld a, Bank(Func_1c2cb)
- ld hl, Func_1c2cb
- call nz, BankSwitch
+ callba nz, Func_1c2cb
ld a, [hGameBoyColorFlag]
and a
jr z, .asm_21102
@@ -28922,7 +28810,7 @@ CheckMeowthCollision: ; 0x24170
bit 7, a
jr nz, .noCollision
sla a
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
ld a, [wd6ec]
@@ -29070,7 +28958,7 @@ CheckJewelCollision: ; 0x24272
bit 7, a
jr nz, .noCollision
sla a
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
@@ -31284,7 +31172,7 @@ CheckSeelHeadCollision: ; 0x25c12
bit 7, a
jr nz, .noCollision
sla a
- ld [wd7ea], a
+ ld [wCollisionForceAngle], a
ld a, $1
ld [wd7e9], a
scf
diff --git a/wram.asm b/wram.asm
index bd732ec..794f2d3 100755
--- a/wram.asm
+++ b/wram.asm
@@ -1744,17 +1744,11 @@ wFlipperXCollisionAttribute:: ; 0xd7b8
wFlipperCollision:: ; 0xd7b9
ds $1
-wd7ba:: ; 0xd7ba
- ds $1
+wFlipperXForce:: ; 0xd7ba
+ dw
-wd7bb:: ; 0xd7bb
- ds $1
-
-wd7bc:: ; 0xd7bc
- ds $1
-
-wd7bd:: ; 0xd7bd
- ds $1
+wFlipperYForce:: ; 0xd7bc
+ dw
wd7be:: ; 0xd7be
ds $1
@@ -1798,7 +1792,7 @@ wd7d9:: ; 0xd7d9
wd7e9:: ; 0xd7e9
ds $1
-wd7ea:: ; 0xd7ea
+wCollisionForceAngle:: ; 0xd7ea
ds $1
wd7eb:: ; 0xd7eb
@@ -1819,11 +1813,8 @@ wStageCollisionMasksBank:: ; 0xd7f1
wd7f2:: ; 0xd7f2
ds $1
-wd7f3:: ; 0xd7f3
- ds $1
-
-wd7f4:: ; 0xd7f4
- ds $1
+wBallPositionPointerOffsetFromStageTopLeft:: ; 0xd7f3
+ dw
wCurCollisionAttribute:: ; 0xd7f5
ds $1