summaryrefslogtreecommitdiff
path: root/asm/src
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2023-12-31 17:29:08 -0800
committertheo3 <arisstephenson2@gmail.com>2023-12-31 17:34:02 -0800
commit37ac9cb0fb2d9ccb64286bab2cdf648e6f2541c5 (patch)
tree1556b8aba35a82f1cc0d538b93251a1b401f32f5 /asm/src
parent5049daabc59d113152143d123aea2798d9487a0c (diff)
document tile asm functions
Diffstat (limited to 'asm/src')
-rw-r--r--asm/src/code_08001A7C.s22
-rw-r--r--asm/src/code_08003FC4.s48
-rw-r--r--asm/src/code_080043E8.s65
-rw-r--r--asm/src/code_08007CAC.s14
-rw-r--r--asm/src/enemy.s14
-rw-r--r--asm/src/intr.s4
-rw-r--r--asm/src/player.s164
-rw-r--r--asm/src/script.s106
-rw-r--r--asm/src/veneer.s22
9 files changed, 240 insertions, 219 deletions
diff --git a/asm/src/code_08001A7C.s b/asm/src/code_08001A7C.s
index dfaa3ad4..4568bf6c 100644
--- a/asm/src/code_08001A7C.s
+++ b/asm/src/code_08001A7C.s
@@ -931,8 +931,8 @@ _0800271A:
bne _0800270A
pop {r4, r5, r6, pc}
- thumb_func_start sub_08002724
-sub_08002724: @ 0x08002724
+ thumb_func_start UnpackTextNibbles
+UnpackTextNibbles: @ 0x08002724
push {r4, r5, lr}
movs r2, #0x10
movs r3, #0xf
@@ -1019,24 +1019,25 @@ _080027E6:
movs r0, #4
bx lr
+ // almost identical to LinearMoveDirection
// r0 = Entity*
// r1 = speed
// r2 = direction
- non_word_aligned_thumb_func_start sub_080027EA
-sub_080027EA: @ 0x080027EA
+ non_word_aligned_thumb_func_start LinearMoveDirectionOLD
+LinearMoveDirectionOLD: @ 0x080027EA
push {r4, r5, r6, r7, lr}
movs r3, #0x80
tst r2, r3
bne _08002860
movs r4, #0x2a
- ldrh r3, [r0, r4]
+ ldrh r3, [r0, r4] // collisions
movs r4, #7
tst r2, r4
bne _08002812
push {r0, r1, r2, r3}
adds r0, r2, #0
adds r1, r3, #0
- bl sub_08002864
+ bl CalcCollisionDirectionOLD
adds r4, r0, #0
pop {r0, r1, r2, r3}
cmp r2, r4
@@ -1063,7 +1064,7 @@ _08002812:
_08002834:
adds r4, r0, #0
pop {r0, r1, r2, r3}
- ldr r5, [r0, #0x2c]
+ ldr r5, [r0, #0x2c] // x
adds r5, r5, r4
str r5, [r0, #0x2c]
_0800283E:
@@ -1081,15 +1082,16 @@ _0800283E:
_08002856:
adds r4, r0, #0
pop {r0, r1, r2, r3}
- ldr r5, [r0, #0x30]
+ ldr r5, [r0, #0x30] // y
subs r5, r5, r4
str r5, [r0, #0x30]
_08002860:
adds r1, r6, #0
pop {r4, r5, r6, r7, pc}
- thumb_func_start sub_08002864
-sub_08002864: @ 0x08002864
+ // collision related, probably leftover from FS
+ thumb_func_start CalcCollisionDirectionOLD
+CalcCollisionDirectionOLD: @ 0x08002864
adds r2, r0, #0
lsrs r2, r2, #3
cmp r2, #0
diff --git a/asm/src/code_08003FC4.s b/asm/src/code_08003FC4.s
index 362f7d8d..ff872eb4 100644
--- a/asm/src/code_08003FC4.s
+++ b/asm/src/code_08003FC4.s
@@ -621,26 +621,26 @@ _0800439C: .4byte gSpritePtrs
_080043A0: .4byte gSpritePtrs
_080043A4: .4byte gGFXSlots+4
- thumb_func_start sub_080043A8
-sub_080043A8: @ 0x080043A8
- movs r1, #0xb
- b _080043B6
-
- thumb_func_start CreateChestSpawner
-CreateChestSpawner: @ 0x080043AC
- movs r1, #0xc
- b _080043B6
-
- thumb_func_start sub_080043B0
-sub_080043B0: @ 0x080043AC
- movs r1, #0x52
- b _080043B6
-
- thumb_func_start CreateItemOnGround
-CreateItemOnGround: @ 0x080043B4
- movs r1, #0
-
-_080043B6:
+ thumb_func_start CreateDrownFX
+CreateDrownFX: @ 0x080043A8
+ movs r1, #0xb // FX_WATER_SPLASH
+ b create_fx
+
+ thumb_func_start CreateLavaDrownFX
+CreateLavaDrownFX: @ 0x080043AC
+ movs r1, #0xc // FX_LAVA_SPLASH
+ b create_fx
+
+ thumb_func_start CreateSwampDrownFX
+CreateSwampDrownFX: @ 0x080043AC
+ movs r1, #0x52 // FX_GREEN_SPLASH
+ b create_fx
+
+ thumb_func_start CreatePitFallFX
+CreatePitFallFX: @ 0x080043B4
+ movs r1, #0 // FX_FALL_DOWN
+
+create_fx:
push {r4, lr}
adds r4, r0, #0
movs r0, #0xf
@@ -648,10 +648,10 @@ _080043B6:
bl CreateObject
cmp r0, #0
- beq _080043E0 @ Branch if entity could not be created
+ beq _080043E0
movs r1, #0x48
- ldr r1, [r4, r1] @ Unused?
+ ldr r1, [r4, r1] // load hitbox (unused)
ldrh r3, [r4, #0x2e]
strh r3, [r0, #0x2e]
@@ -664,11 +664,11 @@ _080043B6:
ldrb r3, [r4, #8]
- cmp r3, #3 @ Is the spawner an enemy?
+ cmp r3, #3 // is parent entity an enemy?
bne _080043E0
movs r1, #1
- strb r1, [r0, #0xb] @ Set base parameter
+ strb r1, [r0, #0xb] // copy entity.type2
_080043E0:
adds r0, r4, #0
diff --git a/asm/src/code_080043E8.s b/asm/src/code_080043E8.s
index 98048228..3d723136 100644
--- a/asm/src/code_080043E8.s
+++ b/asm/src/code_080043E8.s
@@ -5,57 +5,67 @@
.text
- thumb_func_start sub_080043E8
-sub_080043E8: @ 0x080043E8
+ .macro hazard_tile tile:req, hazard_type:req
+ .short \tile
+ .short \hazard_type
+ .endm
+
+ thumb_func_start GetTileHazardType
+GetTileHazardType: @ 0x080043E8
push {r4, lr}
ldrb r1, [r0, #0xc]
cmp r1, #0
- beq _08004414
+ beq no_hazard // action == 0
adds r4, r0, #0
- bl sub_08016AD2
+ bl UpdateCollisionLayer
movs r3, #0x36
ldrsh r2, [r4, r3]
cmp r2, #0
- bmi _08004414
- cmp r0, #0
- beq _08004414
- add r3, pc, #0x10
-_08004404:
+ bmi no_hazard // collisionLayer is negative
+ cmp r0, #0 // are we on a tile?
+ beq no_hazard
+ adr r3, hazard_list-4
+loop:
adds r3, #4
ldrh r1, [r3]
cmp r1, #0
- beq _08004414
+ beq no_hazard
cmp r0, r1
- bne _08004404
+ bne loop
ldrh r0, [r3, #2]
pop {r4, pc}
-_08004414:
+no_hazard:
movs r0, #0
pop {r4, pc}
-_08004418:
- .byte 0x0D, 0x00, 0x01, 0x00, 0x10, 0x00, 0x02, 0x00
- .byte 0x11, 0x00, 0x02, 0x00, 0x5A, 0x00, 0x03, 0x00, 0x13, 0x00, 0x04, 0x00, 0x00, 0x00
+
+hazard_list:
+ hazard_tile 0xD, 0x1
+ hazard_tile 0x10, 0x2
+ hazard_tile 0x11, 0x2
+ hazard_tile 0x5A, 0x3
+ hazard_tile 0x13, 0x4
+ .short 0x0000
non_word_aligned_thumb_func_start sub_0800442E
sub_0800442E: @ 0x0800442E
push {r0, lr}
- bl sub_080043E8
+ bl GetTileHazardType
cmp r0, #0
- beq _08004448
- lsls r0, r0, #2
- add r1, pc, #0xC
+ beq not_hazard
+ lsls r0, #2
+ adr r1, _0800444C - 4
ldr r1, [r1, r0]
pop {r0}
bl _call_via_r1
movs r0, #1
pop {pc}
-_08004448:
+not_hazard:
movs r0, #0
pop {r1, pc}
-_0800444C: .4byte CreateItemOnGround
-_08004450: .4byte sub_080043A8
-_08004454: .4byte CreateChestSpawner
-_08004458: .4byte sub_080043B0
+_0800444C: .4byte CreatePitFallFX
+_08004450: .4byte CreateDrownFX
+_08004454: .4byte CreateLavaDrownFX
+_08004458: .4byte CreateSwampDrownFX
thumb_func_start sub_0800445C
sub_0800445C: @ 0x0800445C
@@ -171,6 +181,7 @@ _08004516:
adds r0, r2, #0
bx lr
+ // r0 = Entity*
thumb_func_start sub_0800451C
sub_0800451C: @ 0x0800451C
push {r0, lr}
@@ -196,17 +207,17 @@ sub_0800451C: @ 0x0800451C
sub_08004542: @ 0x08004542
movs r1, #0x38
movs r2, #2
- strb r2, [r0, r1]
+ strb r2, [r0, r1] // entity->collisionLayer = 2
movs r2, #0xc0
ldrb r1, [r0, #0x1b]
bics r1, r2
adds r1, #0x40
- strb r1, [r0, #0x1b]
+ strb r1, [r0, #0x1b] // update spriteOrientation
movs r2, #0xc0
ldrb r1, [r0, #0x19]
bics r1, r2
adds r1, #0x40
- strb r1, [r0, #0x19]
+ strb r1, [r0, #0x19] // update spriteRendering
bx lr
non_word_aligned_thumb_func_start ResetCollisionLayer
diff --git a/asm/src/code_08007CAC.s b/asm/src/code_08007CAC.s
index c457c0a2..146e4ac7 100644
--- a/asm/src/code_08007CAC.s
+++ b/asm/src/code_08007CAC.s
@@ -29,22 +29,22 @@ gUnk_08007CAC:: @ 08007CAC
.endif
.endif
- non_word_aligned_thumb_func_start sub_08007DD6
-sub_08007DD6: @ 0x08007DD6
+ non_word_aligned_thumb_func_start ActTileToTile
+ActTileToTile: @ 0x08007DD6
push {lr}
- bl sub_08007DE0
+ bl ActTileConv
adds r0, r3, #0
pop {pc}
- thumb_func_start sub_08007DE0
-sub_08007DE0: @ 0x08007DE0
+ thumb_func_start ActTileConv
+ActTileConv: @ 0x08007DE0
subs r1, #4
_08007DE2:
adds r1, #4
ldrh r3, [r1]
- cmp r3, #0
+ cmp r3, #0 // reached end
beq _08007DF2
- cmp r0, r3
+ cmp r0, r3 // equal
bne _08007DE2
ldrh r3, [r1, #2]
movs r2, #1
diff --git a/asm/src/enemy.s b/asm/src/enemy.s
index 52aacf91..d2dcd5ff 100644
--- a/asm/src/enemy.s
+++ b/asm/src/enemy.s
@@ -71,7 +71,7 @@ _08001230:
ldr r3, _0800135C @ =UpdateAnimationVariableFrames
bx r3
_0800123E:
- ldr r3, _08001360 @ =CreateItemOnGround
+ ldr r3, _08001360 @ =CreatePitFallFX
bx r3
non_word_aligned_thumb_func_start GenericConfused
@@ -155,19 +155,19 @@ _080012BA:
gUnk_080012C8::
.4byte 0x00000000
_080012CC: .4byte sub_08001214
-_080012D0: .4byte sub_080043A8
-_080012D4: .4byte CreateChestSpawner
-_080012D8: .4byte sub_080043B0
+_080012D0: .4byte CreateDrownFX
+_080012D4: .4byte CreateLavaDrownFX
+_080012D8: .4byte CreateSwampDrownFX
thumb_func_start sub_080012DC
sub_080012DC: @ 0x080012DC
push {r4, r5, lr}
adds r4, r0, #0
movs r5, #0x3a
- ldrb r1, [r4, r5]
+ ldrb r1, [r4, r5] // gust jar state
lsrs r1, r1, #3
bhs _08001302
- bl sub_080043E8
+ bl GetTileHazardType
cmp r0, #4
beq _08001302
cmp r0, #0
@@ -241,7 +241,7 @@ _08001352:
.align 2, 0
_08001358: .4byte gEnemyFunctions
_0800135C: .4byte UpdateAnimationVariableFrames
-_08001360: .4byte CreateItemOnGround
+_08001360: .4byte CreatePitFallFX
_08001364: .4byte 0x00001800
_08001368: .4byte gUnk_080012C8
_0800136C: .4byte gUnk_080012C8
diff --git a/asm/src/intr.s b/asm/src/intr.s
index 4f65fa09..c2dab21d 100644
--- a/asm/src/intr.s
+++ b/asm/src/intr.s
@@ -120,8 +120,8 @@ _080B1A64:
ldrh r0, [r1, r0]
bx lr
- arm_func_start arm_GetRelativeCollisionTile
-arm_GetRelativeCollisionTile: @ 0x080B1A8C
+ arm_func_start arm_GetActTileRelative
+arm_GetActTileRelative: @ 0x080B1A8C
ldrh r3, [r0, #0x2e]
add r3, r3, r1
ldrh r1, [r0, #0x32]
diff --git a/asm/src/player.s b/asm/src/player.s
index 05f6ed35..fefcf695 100644
--- a/asm/src/player.s
+++ b/asm/src/player.s
@@ -26,7 +26,7 @@ sub_0800857C: @ 0x0800857C
_0800859C:
ldrh r1, [r0, #0x24]
ldrb r2, [r0, #0x15]
- bl sub_080027EA
+ bl LinearMoveDirectionOLD
pop {r4 - r7}
mov r8, r4
@@ -57,11 +57,11 @@ sub_080085CC: @ 0x080085CC
ldr r2, _0800888C @ =gPlayerState
ldr r1, _08008890 @ =gUnk_080083FC
movs r3, #0x26
- ldrb r3, [r2, r3]
+ ldrb r3, [r2, r3] // swim_state
orrs r3, r3
beq _080085E6
ldr r2, [r2, #0x30]
- movs r3, #0x80
+ movs r3, #0x80 // flags & PL_MINISH
ands r2, r3
beq _0800861A
ldr r1, _08008894 @ =gUnk_0800839C
@@ -70,12 +70,12 @@ _080085E6:
ldr r1, _08008898 @ =gUnk_0800845C
ldrb r3, [r2, #2]
orrs r3, r3
- bne _0800861A
- ldr r2, [r2, #0x30]
+ bne _0800861A // jump_status != 0
+ ldr r2, [r2, #0x30] // flags & PL_PARACHUTE
ldr r3, _0800889C @ =0x01000000
tst r2, r3
bne _0800861A
- movs r3, #0x80
+ movs r3, #0x80 // // flags & PL_MINISH
ldr r1, _080088A0 @ =gUnk_0800833C
ands r2, r3
bne _0800861A
@@ -83,15 +83,15 @@ _080085E6:
ldr r3, _080088A8 @ =gPlayerState
ldrb r2, [r3, #0x1c]
orrs r2, r2
- bne _0800861A
+ bne _0800861A // field_0x1c != 0
ldrb r2, [r3, #5]
orrs r2, r2
- bne _0800861A
+ bne _0800861A // heldObject != 0
ldr r1, _080088AC @ =gUnk_0800851C
movs r2, #0xaa
ldrb r2, [r3, r2]
orrs r2, r2
- bne _0800861A
+ bne _0800861A // attachedBeetleCount != 0
ldr r1, _080088B0 @ =gUnk_080082DC
_0800861A:
mov r11, r1
@@ -169,7 +169,7 @@ _08008684:
_080086AC:
mov r0, r8
movs r2, #0x2a
- strh r7, [r0, r2]
+ strh r7, [r0, r2] // collisions
pop {pc}
thumb_func_start sub_080086B4
@@ -265,17 +265,17 @@ _08008754:
ands r2, r3
pop {pc}
- non_word_aligned_thumb_func_start sub_0800875A
-sub_0800875A: @ 0x0800875A
+ non_word_aligned_thumb_func_start DoItemTileInteraction
+DoItemTileInteraction: @ 0x0800875A
push {r2, r4, lr}
- ldrb r3, [r0, #0x14]
+ ldrb r3, [r0, #0x14] // item.animationState
movs r2, #6
ands r3, r2
ldr r4, _080088D0 @ =gUnk_08007DF4
ldrsb r2, [r4, r3]
adds r3, #1
ldrsb r3, [r4, r3]
- bl sub_08008782
+ bl DoTileInteractionOffset
pop {r2, r4}
cmp r0, #0
beq _08008780
@@ -288,21 +288,21 @@ sub_0800875A: @ 0x0800875A
_08008780:
pop {pc}
- non_word_aligned_thumb_func_start sub_08008782
-sub_08008782: @ 0x08008782
+ non_word_aligned_thumb_func_start DoTileInteractionOffset
+DoTileInteractionOffset: @ 0x08008782
push {r4}
ldrh r4, [r0, #0x2e]
adds r2, r2, r4
ldrh r4, [r0, #0x32]
adds r3, r3, r4
pop {r4}
- b sub_08008796
+ b DoTileInteraction
- thumb_func_start sub_08008790
-sub_08008790: @ 0x08008790
+ thumb_func_start DoTileInteractionHere
+DoTileInteractionHere: @ 0x08008790
ldrh r2, [r0, #0x2e]
ldrh r3, [r0, #0x32]
- b sub_08008796
+ b DoTileInteraction
// r0: Entity*
// r1: tile filter?
@@ -310,8 +310,8 @@ sub_08008790: @ 0x08008790
// r3: y
// Somehow involved in trampling tiles, digging with claws, picking up tiles..
- non_word_aligned_thumb_func_start sub_08008796
-sub_08008796: @ 0x08008796
+ non_word_aligned_thumb_func_start DoTileInteraction
+DoTileInteraction: @ 0x08008796
push {r4, r5, r6, r7, lr}
push {r2, r3}
ldr r2, _080088D4 @ =gRoomControls
@@ -319,17 +319,17 @@ sub_08008796: @ 0x08008796
movs r2, #1
cmp r2, r3
pop {r2, r3}
- beq _080087CE
+ beq _080087CE_return0
push {r0, r1, r2, r3}
pop {r4, r5, r6, r7}
adds r0, r6, #0
adds r1, r7, #0
movs r2, #0x38
- ldrb r2, [r4, r2]
+ ldrb r2, [r4, r2] // collision layer
bl GetTileTypeByPos
ldr r1, _080088D8 @ =gUnk_080046A4
- bl sub_08007DE0
- beq _080087CE
+ bl ActTileConv
+ beq _080087CE_return0
lsls r1, r3, #3
adds r3, r5, #0
ldr r0, _080088DC @ =gUnk_080047F6
@@ -338,51 +338,51 @@ sub_08008796: @ 0x08008796
lsrs r0, r3
lsrs r0, r0, #1
bhs _080087D2
-_080087CE:
+_080087CE_return0:
movs r0, #0
pop {r4, r5, r6, r7, pc}
_080087D2:
- ldrb r0, [r5, #2]
- ldrb r1, [r5, #3]
+ ldrb r0, [r5, #2] // object id
+ ldrb r1, [r5, #3] // object type
cmp r0, #0xff
- beq _0800883A
+ beq after_create_obj
cmp r3, #6
- beq _0800883A
+ beq after_create_obj
cmp r3, #0xe
- beq _0800883A
+ beq after_create_obj
cmp r3, #0xa
- beq _0800883A
+ beq after_create_obj
cmp r3, #0xb
- beq _0800883A
+ beq after_create_obj
cmp r3, #0xd
bne _080087F6
- cmp r0, #0xf
- bne _0800883A
- cmp r1, #0x17
- bne _0800883A
+ cmp r0, #0xf // SPECIAL_FX
+ bne after_create_obj
+ cmp r1, #0x17 // FX_GRASS_CUT
+ bne after_create_obj
_080087F6:
movs r2, #0
- cmp r0, #0xf
+ cmp r0, #0xf // SPECIAL_FX
bne _080087FE
movs r2, #0x80
_080087FE:
- bl CreateObject
+ bl CreateObject // r0 = id, r1 = type, r2 = type2
cmp r0, #0
- beq _0800883A
- ldrb r1, [r5, #2]
+ beq after_create_obj
+ ldrb r1, [r5, #2] // object id
cmp r1, #0
- beq _08008820
+ beq no_offset
movs r2, #0xf
adds r1, r6, #0
bics r1, r2
adds r1, #8
- strh r1, [r0, #0x2e]
+ strh r1, [r0, #0x2e] // x
adds r1, r7, #0
bics r1, r2
adds r1, #8
- strh r1, [r0, #0x32]
+ strh r1, [r0, #0x32] // y
b _0800882C
-_08008820:
+no_offset:
ldrh r1, [r4, #0x2e]
strh r1, [r0, #0x2e]
ldrh r1, [r4, #0x32]
@@ -391,12 +391,12 @@ _08008820:
strh r1, [r1, #0x36]
_0800882C:
movs r3, #0x50
- str r4, [r1, r3]
+ str r4, [r1, r3] // set parent to r4
movs r3, #0x38
- ldrb r1, [r4, r3]
+ ldrb r1, [r4, r3] // copy collision layer from parent
strb r1, [r0, r3]
bl UpdateSpriteForCollisionLayer
-_0800883A:
+after_create_obj:
ldr r1, _080088E0 @ =gRoomControls
ldrh r0, [r1, #6]
subs r2, r6, r0
@@ -417,7 +417,7 @@ _0800883A:
beq _08008876
push {r0, r1}
adds r0, r2, #0
- bl GetLayerByIndex
+ bl GetTileBuffer
adds r3, r0, #4
pop {r0, r1}
lsls r1, r1, #1
@@ -461,22 +461,22 @@ _080088DC: .4byte gUnk_080047F6
_080088E0: .4byte gRoomControls
_080088E4: .4byte 0x00004000
_080088E8: .4byte 0x0000FFFF
-_080088EC:
+velocities1:
.byte 0, -3, 3, -3
.byte 3, 0, 3, 3
.byte 0, 3, -3, 3
.byte -3, 0, -3, -3
-_080088FC:
+ice_velocities:
.byte 0, -10, 10, -10
.byte 10, 0, 10, 10
.byte 0, 10, -10, 10
.byte -10, 0, -10, -10
-_0800890C:
+velocities3:
.byte 0, 6, -6, 0
.byte 0, -6, 6, 0
.byte 19, 18, 18, 16
.byte 16, 17, 17, 19
-_0800891C:
+reset_vel:
push {r0}
bl ResetPlayerVelocity
pop {r0}
@@ -497,7 +497,7 @@ UpdateIcePlayerVelocity: @ 0x0800892E
_UpdateIcePlayerVelocity:
push {lr}
- ldrb r2, [r0, #0x14]
+ ldrb r2, [r0, #0x14] // animationState
lsrs r2, r2, #1
lsls r2, r2, #3
ldr r1, _08008A68 @ =gPlayerState
@@ -522,20 +522,20 @@ _08008956:
movs r3, #0x80
tst r2, r3
bne _080089C0
-_08008960:
- ldrb r3, [r1, #5]
+_08008960: // r1 = gPlayerState
+ ldrb r3, [r1, #5] // heldObject
cmp r3, #2
- beq _0800891C
+ beq reset_vel
cmp r3, #1
- beq _0800891C
- ldr r4, _08008A74 @ =_080088FC
+ beq reset_vel
+ ldr r4, _08008A74 @ =ice_velocities
ldrb r3, [r1, #2]
adds r1, r2, #0
- orrs r3, r3
+ orrs r3, r3 // jump_status != 0
beq _08008992
push {r2}
movs r3, #0x14
- ldrb r1, [r0, r3]
+ ldrb r1, [r0, r3] // field_0x14
lsrs r1, r1, #1
lsls r1, r1, #1
lsrs r2, r2, #2
@@ -544,7 +544,7 @@ _08008960:
adds r2, #2
movs r4, #7
ands r2, r4
- ldr r4, _08008A78 @ =_080088EC
+ ldr r4, _08008A78 @ =velocities1
cmp r2, #4
beq _08008992
bhs _080089A8
@@ -557,25 +557,25 @@ _08008992:
ldrsb r2, [r4, r3]
adds r3, #1
ldrsb r3, [r4, r3]
- bl sub_08008A46
+ bl AddPlayerVelocity
b _080089C0
_080089A8:
movs r3, #0x14
ldrb r3, [r0, r3]
lsrs r3, r3, #1
lsls r3, r3, #1
- ldr r4, _08008A7C @ =_0800890C
+ ldr r4, _08008A7C @ =velocities3
adds r4, r4, r3
movs r3, #0
ldrsb r2, [r4, r3]
adds r3, #1
ldrsb r3, [r4, r3]
- bl sub_08008A46
+ bl AddPlayerVelocity
_080089C0:
ldr r1, _08008A80 @ =gPlayerState
movs r4, #0x8c
movs r2, #8
- ldrsh r3, [r1, r4]
+ ldrsh r3, [r1, r4] // vel_x
orrs r3, r3
beq _080089E4
bpl _080089D2
@@ -585,7 +585,7 @@ _080089D2:
push {r0, r1}
adds r1, r3, #0
push {r2}
- bl sub_080027EA
+ bl LinearMoveDirectionOLD
pop {r0}
bl sub_0807A5B8
pop {r0, r1}
@@ -602,7 +602,7 @@ _080089F4:
push {r0, r1}
adds r1, r3, #0
push {r2}
- bl sub_080027EA
+ bl LinearMoveDirectionOLD
pop {r0}
bl sub_0807A5B8
pop {r0, r1}
@@ -646,18 +646,18 @@ _08008A3E:
beq _08008A3A
b _08008A38
- non_word_aligned_thumb_func_start sub_08008A46
-sub_08008A46: @ 0x08008A46
+ non_word_aligned_thumb_func_start AddPlayerVelocity
+AddPlayerVelocity: @ 0x08008A46
push {lr}
ldr r1, _08008A84 @ =gPlayerState
movs r4, #0x8c
- ldrsh r5, [r1, r4]
+ ldrsh r5, [r1, r4] // vel_x
adds r5, r5, r2
- bl sub_08008A88
- movs r4, #0x8e
+ bl ClampPlayerVelocity
+ movs r4, #0x8e // vel_y
ldrsh r5, [r1, r4]
adds r5, r5, r3
- bl sub_08008A88
+ bl ClampPlayerVelocity
pop {pc}
_08008A60:
eors r3, r3
@@ -667,14 +667,14 @@ _08008A60:
_08008A68: .4byte gPlayerState
_08008A6C: .4byte gPlayerState
_08008A70: .4byte gPlayerState
-_08008A74: .4byte _080088FC
-_08008A78: .4byte _080088EC
-_08008A7C: .4byte _0800890C
+_08008A74: .4byte ice_velocities
+_08008A78: .4byte velocities1
+_08008A7C: .4byte velocities3
_08008A80: .4byte gPlayerState
_08008A84: .4byte gPlayerState
- thumb_func_start sub_08008A88
-sub_08008A88: @ 0x08008A88
+ thumb_func_start ClampPlayerVelocity
+ClampPlayerVelocity: @ 0x08008A88
orrs r5, r5
bmi _08008A94
ldr r6, _08008B38 @ =0x00000180
@@ -758,13 +758,13 @@ CheckNEastTile: @ 0x08008B02
push {r0, r1, lr}
movs r1, #0
movs r2, #0
- bl GetRelativeCollisionTile
+ bl GetActTileRelative
// check if north east collision?
ldr r1, =0x4000
tst r0, r1
bne _08008B1E
ldr r1, =gUnk_08007CAC
- bl sub_08007DE0
+ bl ActTileConv
movs r2, #1
cmp r3, #1
beq _08008B20
diff --git a/asm/src/script.s b/asm/src/script.s
index f1fc3cfd..fd37d8f8 100644
--- a/asm/src/script.s
+++ b/asm/src/script.s
@@ -4,32 +4,33 @@
.syntax unified
.text
+ .thumb
+
+ .macro transition_tile tile:req, src_layer:req dest_layer:req
+ .short \tile
+ .byte \src_layer, \dest_layer
+ .endm
+
gUnk_08016984:: @ 08016984
.incbin "code_08016984/gUnk_08016984.bin"
- .text
-
- non_word_aligned_thumb_func_start GetNextScriptCommandHalfword
-GetNextScriptCommandHalfword: @ 0x08016986
+GetNextScriptCommandHalfword::
ldrh r0, [r0]
bx lr
- non_word_aligned_thumb_func_start GetNextScriptCommandHalfwordAfterCommandMetadata
-GetNextScriptCommandHalfwordAfterCommandMetadata: @ 0x0801698A
+GetNextScriptCommandHalfwordAfterCommandMetadata::
ldrh r0, [r0, #2]
bx lr
- non_word_aligned_thumb_func_start GetNextScriptCommandWord
-GetNextScriptCommandWord: @ 0x0801698E
+GetNextScriptCommandWord::
ldrh r1, [r0]
ldrh r0, [r0, #2]
lsls r0, r0, #0x10
orrs r0, r1
bx lr
- thumb_func_start GetNextScriptCommandWordAfterCommandMetadata
-GetNextScriptCommandWordAfterCommandMetadata: @ 0x08016998
+GetNextScriptCommandWordAfterCommandMetadata::
ldrh r1, [r0, #2]
ldrh r0, [r0, #4]
lsls r0, r0, #0x10
@@ -37,17 +38,15 @@ GetNextScriptCommandWordAfterCommandMetadata: @ 0x08016998
bx lr
.align 2, 0
-gUnk_080169A4::
- .byte 0x01, 0xFF, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x01, 0x00
- .byte 0xFF, 0x01, 0x00, 0x00, 0x02, 0xFF, 0x01, 0xFE, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x01, 0xFF, 0x02
- .byte 0x00, 0x00, 0x01, 0x01, 0x02, 0xFF, 0x02, 0xFE, 0xFE, 0x02, 0xFF, 0x03, 0xFD, 0xFF, 0xFE, 0x01
- .byte 0x01, 0xFD, 0xFF, 0xFF, 0x03, 0xFE, 0x02, 0x00, 0x00, 0xFF, 0xFE, 0x03, 0xFD, 0x02, 0xFF, 0x00
- .byte 0x00, 0xFD, 0x02, 0x00, 0x00, 0xFF, 0x00, 0xFE, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02
- .byte 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00
- .byte 0x00, 0x00, 0x01, 0x00
-
- thumb_func_start UpdateSpriteForCollisionLayer
-UpdateSpriteForCollisionLayer: @ 0x08016A04
+gShakeOffsets::
+ .byte 1, -1, 0, 1, 1, 0, 0, 1, -1, -1, 1, 0, -1, 1, 0, 0
+ .byte 2, -1, 1, -2, 0, -1, -1, 0, -1, 1, -1, 2, 0, 0, 1, 1
+ .byte 2, -1, 2, -2, -2, 2, -1, 3, -3, -1, -2, 1, 1, -3, -1, -1
+ .byte 3, -2, 2, 0, 0, -1, -2, 3, -3, 2, -1, 0, 0, -3, 2, 0
+ .byte 0, -1, 0, -2, 0, -1, 0, 0, 0, 1, 0, 2, 0, 0, 0, 1
+ .byte 2, 0, 1, 0, 0, 0, -1, 0, -1, 0, -1, 0, 0, 0, 1, 0
+
+UpdateSpriteForCollisionLayer::
movs r1, #0x38
ldrb r1, [r0, r1]
lsls r1, r1, #1
@@ -69,8 +68,7 @@ UpdateSpriteForCollisionLayer: @ 0x08016A04
_08016A28:
.byte 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40
- thumb_func_start ResolveCollisionLayer
-ResolveCollisionLayer: @ 0x08016A30
+ResolveCollisionLayer::
push {r4, r5, lr}
adds r4, r0, #0
movs r5, #0x38
@@ -102,41 +100,51 @@ _08016A64:
bl UpdateSpriteForCollisionLayer
pop {r4, r5, pc}
- thumb_func_start sub_08016A6C
-sub_08016A6C: @ 0x08016A6C
+CheckOnLayerTransition::
push {r4, r5, lr}
adds r4, r0, #0
- bl GetActTile
- add r1, pc, #0x38
-_08016A76:
- adds r1, #4
- ldrh r2, [r1]
+ bl GetActTile // tile under me
+ adr r1, gTransitionTiles-4
+loop:
+ adds r1, #4 // p += 4
+ ldrh r2, [r1] // *(u16*)(p)
cmp r2, #0
- beq _08016A90
+ beq not_found
cmp r2, r0
- bne _08016A76
+ bne loop // found the tile under me?
movs r2, #0x38
- ldrb r3, [r4, r2]
- ldrb r5, [r1, #2]
- cmp r3, r5
- beq _08016A90
- ldrb r5, [r1, #3]
- strb r5, [r4, r2]
-_08016A90:
+ ldrb r3, [r4, r2] // collision layer
+ ldrb r5, [r1, #2] // *(u8*)(p + 2)
+ cmp r3, r5 // am i on the right later?
+ beq not_found
+ ldrb r5, [r1, #3] // *(u8*)(p + 3)
+ strb r5, [r4, r2] // move to a new layer
+not_found:
pop {r4, r5, pc}
.align 2, 0
-_08016A94:
- .byte 0x2A, 0x00, 0x03, 0x03, 0x2D, 0x00, 0x03, 0x03, 0x2B, 0x00, 0x03, 0x03
- .byte 0x2C, 0x00, 0x03, 0x03, 0x4C, 0x00, 0x03, 0x03, 0x4E, 0x00, 0x03, 0x03, 0x4D, 0x00, 0x03, 0x03
- .byte 0x4F, 0x00, 0x03, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x09, 0x00, 0x02, 0x01, 0x0C, 0x00, 0x01, 0x02
- .byte 0x0B, 0x00, 0x01, 0x02, 0x52, 0x00, 0x03, 0x03, 0x27, 0x00, 0x03, 0x03, 0x26, 0x00, 0x03, 0x03
- .byte 0x00, 0x00
-
- non_word_aligned_thumb_func_start sub_08016AD2
-sub_08016AD2: @ 0x08016AD2
+
+ transition_tile 0x2A, 3, 3
+ transition_tile 0x2D, 3, 3
+ transition_tile 0x2B, 3, 3
+ transition_tile 0x2C, 3, 3
+ transition_tile 0x4C, 3, 3
+ transition_tile 0x4E, 3, 3
+ transition_tile 0x4D, 3, 3
+ transition_tile 0x4F, 3, 3
+gTransitionTiles:
+ transition_tile 0x0A, 2, 1
+ transition_tile 0x09, 2, 1
+ transition_tile 0x0C, 1, 2
+ transition_tile 0x0B, 1, 2
+ transition_tile 0x52, 3, 3
+ transition_tile 0x27, 3, 3
+ transition_tile 0x26, 3, 3
+ .short 0x0000
+
+UpdateCollisionLayer::
push {r4, lr}
adds r4, r0, #0
- bl sub_08016A6C
+ bl CheckOnLayerTransition
push {r0}
adds r0, r4, #0
bl UpdateSpriteForCollisionLayer
diff --git a/asm/src/veneer.s b/asm/src/veneer.s
index 2d484627..45ffb90a 100644
--- a/asm/src/veneer.s
+++ b/asm/src/veneer.s
@@ -54,8 +54,8 @@ CloneTile: @ 0x08000152
ldrh r0, [r3, r0]
lsrs r2, r2, #2
- non_word_aligned_thumb_func_start SetTile
-SetTile: @ r0 = tile type, r1, = tile position, r2 = layer
+ non_word_aligned_thumb_func_start SetBottomTile
+SetBottomTile: @ r0 = tile type, r1, = tile position, r2 = layer
push {r4-r7, lr}
lsls r3, r2, #3
ldr r4, _08000208 @ =gUnk_08000228
@@ -65,7 +65,7 @@ SetTile: @ r0 = tile type, r1, = tile position, r2 = layer
strh r0, [r5, r6]
ldr r6, _0800020C @ =0x00004000
cmp r0, r6
- blo _0800019A
+ blo tile_wrong_type
push {r1, r2}
subs r4, r0, r6
ldr r3, _08000210 @ =gUnk_080B7910
@@ -77,12 +77,12 @@ SetTile: @ r0 = tile type, r1, = tile position, r2 = layer
bl sub_08000148
pop {r0, r1} @ tilepos, layer
push {r0, r1}
- bl DeleteLoadedTileEntity
+ bl UnregisterInteractTile
adds r0, r7, #0
pop {r1, r2}
- bl sub_0801AF48
+ bl RegisterInteractTile
pop {r4, r5, r6, r7, pc}
-_0800019A:
+tile_wrong_type:
adds r3, #4
ldr r4, [r4, r3]
lsls r0, r0, #1
@@ -96,7 +96,7 @@ _0800019A:
lsrs r2, r2, #2
bl sub_08000148
pop {r0, r1}
- bl DeleteLoadedTileEntity
+ bl UnregisterInteractTile
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080001C0: .4byte gMapBottom+0x6004
@@ -265,9 +265,9 @@ GetTileType: @ 0x080002B0
@ r0: Entity*
@ r1: u32
@ r2: u32
- thumb_func_start GetRelativeCollisionTile
-GetRelativeCollisionTile: @ 0x080002B4
- ldr r3, _08000320 @ =ram_GetRelativeCollisionTile
+ thumb_func_start GetActTileRelative
+GetActTileRelative: @ 0x080002B4
+ ldr r3, _08000320 @ =ram_GetActTileRelative
bx r3
@ call 0x080B1AA8
@@ -410,7 +410,7 @@ _08000310: .4byte ram_GetTileTypeByPos
_08000314: .4byte ram_sub_080B1A48
_08000318: .4byte ram_sub_080B1A58
_0800031C: .4byte ram_GetTileType
-_08000320: .4byte ram_GetRelativeCollisionTile
+_08000320: .4byte ram_GetActTileRelative
_08000324: .4byte ram_GetActTile
_08000328: .4byte ram_sub_080B1AB4
_0800032C: .4byte ram_sub_080B1AC8