diff options
| author | theo3 <arisstephenson2@gmail.com> | 2023-12-31 17:29:08 -0800 |
|---|---|---|
| committer | theo3 <arisstephenson2@gmail.com> | 2023-12-31 17:34:02 -0800 |
| commit | 37ac9cb0fb2d9ccb64286bab2cdf648e6f2541c5 (patch) | |
| tree | 1556b8aba35a82f1cc0d538b93251a1b401f32f5 /asm/src | |
| parent | 5049daabc59d113152143d123aea2798d9487a0c (diff) | |
document tile asm functions
Diffstat (limited to 'asm/src')
| -rw-r--r-- | asm/src/code_08001A7C.s | 22 | ||||
| -rw-r--r-- | asm/src/code_08003FC4.s | 48 | ||||
| -rw-r--r-- | asm/src/code_080043E8.s | 65 | ||||
| -rw-r--r-- | asm/src/code_08007CAC.s | 14 | ||||
| -rw-r--r-- | asm/src/enemy.s | 14 | ||||
| -rw-r--r-- | asm/src/intr.s | 4 | ||||
| -rw-r--r-- | asm/src/player.s | 164 | ||||
| -rw-r--r-- | asm/src/script.s | 106 | ||||
| -rw-r--r-- | asm/src/veneer.s | 22 |
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 |
