mirror of
https://github.com/zeldaret/tmc
synced 2026-08-17 13:30:12 -04:00
label BounceUpdate asm
This commit is contained in:
+25
-21
@@ -67,7 +67,7 @@ sub_0800445C: @ 0x0800445C
|
||||
ldr r5, _080044D8 @ =gPlayerEntity
|
||||
adds r0, r4, #0
|
||||
adds r1, r5, #0
|
||||
bl sub_08004484
|
||||
bl CalcCollisionStaticEntity
|
||||
cmp r0, #0
|
||||
beq _08004482
|
||||
ldrb r0, [r5, #0xc]
|
||||
@@ -80,8 +80,8 @@ _08004480:
|
||||
_08004482:
|
||||
pop {r4, r5, pc}
|
||||
|
||||
thumb_func_start sub_08004484
|
||||
sub_08004484: @ 0x08004484
|
||||
thumb_func_start CalcCollisionStaticEntity
|
||||
CalcCollisionStaticEntity: @ 0x08004484
|
||||
ldr r2, _080044DC @ =ram_sub_080B227C
|
||||
bx r2
|
||||
|
||||
@@ -138,30 +138,34 @@ _080044E0: .4byte gUnk_02024048
|
||||
_080044E4: .4byte gUnk_02021F20
|
||||
_080044E8: .4byte gPlayerEntity
|
||||
|
||||
thumb_func_start sub_080044EC
|
||||
sub_080044EC: @ 0x080044EC
|
||||
// BounceUpdate
|
||||
// assumes initial velocity is set
|
||||
// r0: entity*
|
||||
// r1: acceleration
|
||||
thumb_func_start BounceUpdate
|
||||
BounceUpdate: @ 0x080044EC
|
||||
ldr r2, [r0, #0x34]
|
||||
ldr r3, [r0, #0x20]
|
||||
subs r2, r2, r3
|
||||
bpl _080044FE
|
||||
str r2, [r0, #0x34]
|
||||
subs r3, r3, r1
|
||||
str r3, [r0, #0x20]
|
||||
movs r0, #2
|
||||
subs r2, r3
|
||||
bpl grounded // if z is positive, entity is grounded
|
||||
str r2, [r0, #0x34] // entity.z = entity.z - entity.zVelocity
|
||||
subs r3, r1
|
||||
str r3, [r0, #0x20] // entity.zVelocity = entity.zVelocity - acceleration
|
||||
movs r0, #2 // return 2
|
||||
bx lr
|
||||
_080044FE:
|
||||
grounded:
|
||||
movs r2, #1
|
||||
str r2, [r0, #0x34]
|
||||
subs r3, r3, r1
|
||||
rsbs r3, r3, #0
|
||||
lsrs r3, r3, #1
|
||||
str r2, [r0, #0x34] // entity.z = 1 (note: player cant do certain actions at z!=0)
|
||||
subs r3, r1
|
||||
negs r3, r3
|
||||
lsrs r3, #1
|
||||
lsrs r1, r3, #2
|
||||
adds r3, r3, r1
|
||||
adds r3, r1 // calc next bounce velocity
|
||||
lsrs r1, r3, #0xc
|
||||
cmp r1, #0xc
|
||||
bhs _08004516
|
||||
movs r2, #0
|
||||
movs r3, #0
|
||||
bhs _08004516 // return 1 if bouncing
|
||||
movs r2, #0 // return 0 if not bouncing
|
||||
movs r3, #0 // set velocity to 0
|
||||
_08004516:
|
||||
str r3, [r0, #0x20]
|
||||
adds r0, r2, #0
|
||||
@@ -170,7 +174,7 @@ _08004516:
|
||||
thumb_func_start sub_0800451C
|
||||
sub_0800451C: @ 0x0800451C
|
||||
push {r0, lr}
|
||||
bl GetTileUnderEntity
|
||||
bl GetActTile
|
||||
adds r1, r0, #0
|
||||
pop {r0, r3}
|
||||
mov lr, r3
|
||||
|
||||
+40
-35
@@ -86,7 +86,7 @@ arm_sub_080B1A0C: @ 0x080B1A0C
|
||||
ldrb r2, [r0, #0x38]
|
||||
mov r0, r3
|
||||
b arm_GetTileTypeByPos
|
||||
arm_GetTileTypeByEntity:
|
||||
arm_GetTileTypeByEntity: // GetCell
|
||||
ldrb r2, [r0, #0x38]
|
||||
ldrh r1, [r0, #0x32]
|
||||
ldrh r0, [r0, #0x2e]
|
||||
@@ -129,7 +129,7 @@ arm_GetRelativeCollisionTile: @ 0x080B1A8C
|
||||
ldrb r2, [r0, #0x38]
|
||||
mov r0, r3
|
||||
b arm_sub_080B1AB4
|
||||
arm_GetTileUnderEntity:
|
||||
arm_GetActTile: // GetCellAct
|
||||
ldrb r2, [r0, #0x38]
|
||||
ldrh r1, [r0, #0x32]
|
||||
ldrh r0, [r0, #0x2e]
|
||||
@@ -148,42 +148,46 @@ arm_sub_080B1AD8:
|
||||
add r0, r0, r1, lsl #6
|
||||
mov r1, r2
|
||||
arm_sub_080B1AE0:
|
||||
ldr r2, _080B1C24 @ =gUnk_08000278
|
||||
ldr r2, _080B1C24 @ =gUnkDataPtrs
|
||||
ldr r2, [r2, r1, lsl #2]
|
||||
ldrb r0, [r2, r0]
|
||||
bx lr
|
||||
|
||||
arm_func_start arm_sub_080B1AF0
|
||||
arm_sub_080B1AF0: @ 0x080B1AF0
|
||||
ldrh r3, [r0, #0x2e]
|
||||
@ r0 = entity*
|
||||
@ r1 = x
|
||||
@ r2 = y
|
||||
|
||||
ldrh r3, [r0, #0x2e] @ ent.x + x
|
||||
add r3, r3, r1
|
||||
ldrh r1, [r0, #0x32]
|
||||
ldrh r1, [r0, #0x32] @ ent.y + y
|
||||
add r1, r1, r2
|
||||
ldrb r2, [r0, #0x38]
|
||||
ldrb r2, [r0, #0x38] @ ent.layer
|
||||
mov r0, r3
|
||||
b arm_sub_080B1B18
|
||||
arm_sub_080B1B0C:
|
||||
ldrb r2, [r0, #0x38]
|
||||
ldrh r1, [r0, #0x32]
|
||||
ldrh r0, [r0, #0x2e]
|
||||
arm_sub_080B1B0C: // GetCellAtt
|
||||
ldrb r2, [r0, #0x38] @ ent.layer
|
||||
ldrh r1, [r0, #0x32] @ ent.y
|
||||
ldrh r0, [r0, #0x2e] @ ent.x
|
||||
arm_sub_080B1B18:
|
||||
ldr ip, _080B1C28 @ =gRoomControls
|
||||
ldrh r3, [ip, #6]
|
||||
sub r0, r0, r3
|
||||
sub r0, r0, r3 @ ent.x - gRoomControls.origin_x
|
||||
ldrh r3, [ip, #8]
|
||||
sub r1, r1, r3
|
||||
sub r1, r1, r3 @ ent.y - gRoomControls.origin_y
|
||||
arm_sub_080B1B2C:
|
||||
lsl r0, r0, #0x16
|
||||
lsr r0, r0, #0x1a
|
||||
lsr r0, r0, #0x1a @ /= 16
|
||||
lsl r1, r1, #0x16
|
||||
lsr r1, r1, #0x1a
|
||||
lsr r1, r1, #0x1a @ /= 16
|
||||
arm_sub_080B1B3C:
|
||||
add r0, r0, r1, lsl #6
|
||||
add r0, r0, r1, lsl #6 @ convert coords to tile index
|
||||
mov r1, r2
|
||||
arm_sub_080B1B44:
|
||||
ldr r2, _080B1C2C @ =gUnk_08000248
|
||||
ldr r1, [r2, r1, lsl #2]
|
||||
ldrb r0, [r1, r0]
|
||||
ldrb r0, [r1, r0] @ load collision tile at my location
|
||||
bx lr
|
||||
|
||||
arm_func_start arm_sub_080B1B54
|
||||
@@ -242,7 +246,7 @@ sub_080B1BCC: @ 0x080B1BCC
|
||||
and r1, r1, #0x3f0
|
||||
and r2, r2, #0x3f0
|
||||
add r1, r1, r2, lsl #6
|
||||
ldr r2, _080B1C50 @ =gUnk_08000278
|
||||
ldr r2, _080B1C50 @ =gUnkDataPtrs
|
||||
ldrb r3, [r0, #0x38]
|
||||
ldr r2, [r2, r3, lsl #2]
|
||||
ldrb r0, [r2, r1, lsr #4]
|
||||
@@ -253,7 +257,7 @@ _080B1C14: .4byte gUnk_08000258
|
||||
_080B1C18: .4byte gRoomControls
|
||||
_080B1C1C: .4byte gUnk_08000228
|
||||
_080B1C20: .4byte gRoomControls
|
||||
_080B1C24: .4byte gUnk_08000278
|
||||
_080B1C24: .4byte gUnkDataPtrs
|
||||
_080B1C28: .4byte gRoomControls
|
||||
_080B1C2C: .4byte gUnk_08000248
|
||||
_080B1C30: .4byte gUnk_080B37A0
|
||||
@@ -264,7 +268,7 @@ _080B1C40: .4byte gUnk_080B7A3E
|
||||
_080B1C44: .4byte gUnk_08000360
|
||||
_080B1C48: .4byte gUnk_080B7A3E
|
||||
_080B1C4C: .4byte gRoomControls
|
||||
_080B1C50: .4byte gUnk_08000278
|
||||
_080B1C50: .4byte gUnkDataPtrs
|
||||
|
||||
arm_func_start UpdateCollision
|
||||
UpdateCollision: @ 0x080B1C54
|
||||
@@ -424,15 +428,15 @@ _080B1E74:
|
||||
mov ip, #0
|
||||
bl arm_CalcCollisionDirection
|
||||
mov r6, r0
|
||||
ldrb r1, [r5, #0x3f]
|
||||
ldrb r1, [r5, #0x3f] // hitType
|
||||
mov r0, #0x22
|
||||
mul r1, r0, r1
|
||||
ldrb r0, [r4, #0x40]
|
||||
ldrb r0, [r4, #0x40] // hurtType
|
||||
add r0, r0, r1
|
||||
mov r1, #0xc
|
||||
mul r2, r0, r1
|
||||
ldr r1, _080B2014 @ =gCollisionMtx
|
||||
add r3, r2, r1
|
||||
add r3, r2, r1 // gCollisionMtx + 12 * (34 * hurtType + hurtType)
|
||||
mov r1, #0
|
||||
ldrb r0, [r3]
|
||||
cmp r0, #0xff
|
||||
@@ -742,29 +746,30 @@ _080B2270: .4byte gUpdateContext
|
||||
_080B2274: .4byte gUnk_080026A4
|
||||
_080B2278: .4byte gUpdateContext
|
||||
|
||||
// calculating knockback?
|
||||
arm_func_start arm_sub_080B227C
|
||||
arm_sub_080B227C: @ 0x080B227C
|
||||
push {r4, r5, r6, r7, r8, lr}
|
||||
ldr r2, [r0, #0x48]
|
||||
push {r4-r8, lr}
|
||||
ldr r2, [r0, #0x48] // tgt.hitbox
|
||||
cmp r2, #0
|
||||
beq _080B236C
|
||||
ldr r3, [r1, #0x48]
|
||||
beq ret_false
|
||||
ldr r3, [r1, #0x48] // org.hitbox
|
||||
cmp r3, #0
|
||||
beq _080B236C
|
||||
beq ret_false
|
||||
ldrh r4, [r1, #0x2e]
|
||||
ldrsb r5, [r3]
|
||||
add r4, r4, r5
|
||||
ldrh r5, [r0, #0x2e]
|
||||
sub r4, r4, r5
|
||||
ldrsb r5, [r2]
|
||||
sub r4, r4, r5
|
||||
sub r4, r4, r5 // temp = (tgt.x + tgt.hitbox.x) - (org.x + org.hitbox.x)
|
||||
ldrb r5, [r2, #6]
|
||||
ldrb r6, [r3, #6]
|
||||
add r5, r5, r6
|
||||
add r6, r4, r5
|
||||
add r6, r4, r5 // temp = temp + (tgt.hitbox.width + org.hitbox.width)
|
||||
lsl r7, r5, #1
|
||||
cmp r7, r6
|
||||
blo _080B236C
|
||||
blo ret_false // not colliding
|
||||
cmp r4, #0
|
||||
movpl ip, #8
|
||||
movmi ip, #0x18
|
||||
@@ -783,7 +788,7 @@ arm_sub_080B227C: @ 0x080B227C
|
||||
add r5, r4, r3
|
||||
lsl r6, r3, #1
|
||||
cmp r6, r5
|
||||
blo _080B236C
|
||||
blo ret_false
|
||||
cmp r4, #0
|
||||
movpl r2, #0x10
|
||||
movmi r2, #0
|
||||
@@ -793,7 +798,7 @@ arm_sub_080B227C: @ 0x080B227C
|
||||
movhs r7, r8
|
||||
movhs r2, ip
|
||||
cmp r7, #0
|
||||
beq _080B236C
|
||||
beq ret_false
|
||||
cmp r7, #5
|
||||
movhs r7, #4
|
||||
mov r0, r1
|
||||
@@ -802,11 +807,11 @@ arm_sub_080B227C: @ 0x080B227C
|
||||
mov lr, pc
|
||||
bx r3
|
||||
_080B2360:
|
||||
pop {r4, r5, r6, r7, r8, lr}
|
||||
pop {r4-r8, lr}
|
||||
mov r0, #1
|
||||
bx lr
|
||||
_080B236C:
|
||||
pop {r4, r5, r6, r7, r8, lr}
|
||||
ret_false:
|
||||
pop {r4-r8, lr}
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
|
||||
+1
-1
@@ -106,7 +106,7 @@ _08016A64:
|
||||
sub_08016A6C: @ 0x08016A6C
|
||||
push {r4, r5, lr}
|
||||
adds r4, r0, #0
|
||||
bl GetTileUnderEntity
|
||||
bl GetActTile
|
||||
add r1, pc, #0x38
|
||||
_08016A76:
|
||||
adds r1, #4
|
||||
|
||||
+31
-33
@@ -107,7 +107,7 @@ _080001CC: .4byte gMapBottom+0x6004
|
||||
thumb_func_start sub_080001D0
|
||||
sub_080001D0: @ 0x080001D0
|
||||
lsls r2, r2, #2
|
||||
ldr r3, _08000220 @ =gUnk_08000278
|
||||
ldr r3, _08000220 @ =gUnkDataPtrs
|
||||
ldr r3, [r3, r2]
|
||||
strb r0, [r3, r1]
|
||||
bx lr
|
||||
@@ -135,37 +135,37 @@ _08000210: .4byte gUnk_080B7910
|
||||
_08000214: .4byte gUnk_080B79A7
|
||||
_08000218: .4byte gUnk_080B37A0
|
||||
_0800021C: .4byte gUnk_080B3E80
|
||||
_08000220: .4byte gUnk_08000278
|
||||
_08000220: .4byte gUnkDataPtrs
|
||||
_08000224: .4byte gUnk_08000228
|
||||
gUnk_08000228::
|
||||
.4byte gMapBottom+0x0004
|
||||
.4byte BOTTOM_TILEDATA
|
||||
gUnk_0800022C::
|
||||
.4byte gMapBottom+0x5004
|
||||
.4byte gMapBottom+0x0004
|
||||
.4byte gMapBottom+0x5004
|
||||
.4byte gMapTop+0x0004
|
||||
.4byte gMapTop+0x5004
|
||||
.4byte gMapBottom+0x0004
|
||||
.4byte gMapBottom+0x5004
|
||||
.4byte BOTTOM_METATILETYPES
|
||||
.4byte BOTTOM_TILEDATA
|
||||
.4byte BOTTOM_METATILETYPES
|
||||
.4byte TOP_TILEDATA
|
||||
.4byte TOP_METATILETYPES
|
||||
.4byte BOTTOM_TILEDATA
|
||||
.4byte BOTTOM_METATILETYPES
|
||||
gUnk_08000248::
|
||||
.4byte gMapBottom+0x2004
|
||||
.4byte gMapBottom+0x2004
|
||||
.4byte gMapTop+0x2004
|
||||
.4byte gMapBottom+0x2004
|
||||
.4byte BOTTOM_COLLISIONDATA
|
||||
.4byte BOTTOM_COLLISIONDATA
|
||||
.4byte TOP_COLLISIONDATA
|
||||
.4byte BOTTOM_COLLISIONDATA
|
||||
gUnk_08000258::
|
||||
.4byte gMapBottom+0x3004
|
||||
.4byte gMapBottom+0x5004
|
||||
.4byte gMapBottom+0x3004
|
||||
.4byte gMapBottom+0x5004
|
||||
.4byte gMapTop+0x3004
|
||||
.4byte gMapTop+0x5004
|
||||
.4byte gMapBottom+0x3004
|
||||
.4byte gMapBottom+0x5004
|
||||
gUnk_08000278::
|
||||
.4byte gMapBottom+0xb004
|
||||
.4byte gMapBottom+0xb004
|
||||
.4byte gMapTop+0xb004
|
||||
.4byte gMapBottom+0xb004
|
||||
.4byte BOTTOM_TILEDATACLONE
|
||||
.4byte BOTTOM_METATILETYPES
|
||||
.4byte BOTTOM_TILEDATACLONE
|
||||
.4byte BOTTOM_METATILETYPES
|
||||
.4byte TOP_TILEDATACLONE
|
||||
.4byte TOP_METATILETYPES
|
||||
.4byte BOTTOM_TILEDATACLONE
|
||||
.4byte BOTTOM_METATILETYPES
|
||||
gUnkDataPtrs::
|
||||
.4byte BOTTOM_UNKDATA3
|
||||
.4byte BOTTOM_UNKDATA3
|
||||
.4byte TOP_UNKDATA3
|
||||
.4byte BOTTOM_UNKDATA3
|
||||
|
||||
@ call 0x80B19CC
|
||||
@ ========
|
||||
@@ -277,9 +277,9 @@ GetRelativeCollisionTile: @ 0x080002B4
|
||||
@ return:
|
||||
@ ========
|
||||
@ Called every frame a pot is thrown, every frame the screen is sliding in a transition, and once when entering stairs.
|
||||
thumb_func_start GetTileUnderEntity
|
||||
GetTileUnderEntity: @ 0x080002B8
|
||||
ldr r3, _08000324 @ =ram_GetTileUnderEntity
|
||||
thumb_func_start GetActTile
|
||||
GetActTile: @ 0x080002B8
|
||||
ldr r3, _08000324 @ =ram_GetActTile
|
||||
bx r3
|
||||
|
||||
@ call 0x080B1AB4
|
||||
@@ -362,8 +362,6 @@ sub_080B1B3C: @ 0x080002DC
|
||||
bx r3
|
||||
|
||||
@ call 0x080B1B44
|
||||
@ ========
|
||||
@ Unused? Doesn't seem to be called by anything in Ghidra.
|
||||
thumb_func_start sub_080B1B44
|
||||
sub_080B1B44: @ 0x080002E0
|
||||
ldr r3, _0800034C @ =ram_sub_080B1B44
|
||||
@@ -413,7 +411,7 @@ _08000314: .4byte ram_sub_080B1A48
|
||||
_08000318: .4byte ram_sub_080B1A58
|
||||
_0800031C: .4byte ram_GetTileType
|
||||
_08000320: .4byte ram_GetRelativeCollisionTile
|
||||
_08000324: .4byte ram_GetTileUnderEntity
|
||||
_08000324: .4byte ram_GetActTile
|
||||
_08000328: .4byte ram_sub_080B1AB4
|
||||
_0800032C: .4byte ram_sub_080B1AC8
|
||||
_08000330: .4byte ram_sub_080B1AD8
|
||||
|
||||
Reference in New Issue
Block a user