From 450397a2c47aa25e67c0735fce37cb62eb78b51f Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 27 Mar 2022 21:20:01 -0700 Subject: [PATCH] player asm stuff --- asm/src/code_08001A7C.s | 3 + asm/src/player.s | 119 +++++++++++++++++++--------------------- src/player.c | 4 +- 3 files changed, 62 insertions(+), 64 deletions(-) diff --git a/asm/src/code_08001A7C.s b/asm/src/code_08001A7C.s index 6e0d3a95..3785a39c 100644 --- a/asm/src/code_08001A7C.s +++ b/asm/src/code_08001A7C.s @@ -1009,6 +1009,9 @@ _080027E6: movs r0, #4 bx lr + // r0 = Entity* + // r1 = speed + // r2 = direction non_word_aligned_thumb_func_start sub_080027EA sub_080027EA: @ 0x080027EA push {r4, r5, r6, r7, lr} diff --git a/asm/src/player.s b/asm/src/player.s index 7b91e704..05f6ed35 100644 --- a/asm/src/player.s +++ b/asm/src/player.s @@ -7,12 +7,13 @@ thumb_func_start sub_0800857C sub_0800857C: @ 0x0800857C - push {r4, r5, r6, r7, lr} + push {r4 - r7, lr} mov r4, r8 - mov r5, sb - mov r6, sl - mov r7, fp - push {r4, r5, r6, r7} + mov r5, r9 + mov r6, r10 + mov r7, r11 + push {r4 - r7} + ldrb r1, [r0, #0xb] lsrs r1, r1, #8 bhs _0800859C @@ -26,28 +27,29 @@ _0800859C: ldrh r1, [r0, #0x24] ldrb r2, [r0, #0x15] bl sub_080027EA - pop {r4, r5, r6, r7} + + pop {r4 - r7} mov r8, r4 - mov sb, r5 - mov sl, r6 - mov fp, r7 - pop {r4, r5, r6, r7, pc} + mov r9, r5 + mov r10, r6 + mov r11, r7 + pop {r4 - r7, pc} thumb_func_start sub_080085B0 sub_080085B0: @ 0x080085B0 - push {r3, r4, r5, r6, r7, lr} + push {r3 - r7, lr} mov r4, r8 - mov r5, sb - mov r6, sl - mov r7, fp - push {r4, r5, r6, r7} + mov r5, r9 + mov r6, r10 + mov r7, r11 + push {r4 - r7} bl sub_080085CC - pop {r4, r5, r6, r7} + pop {r4 - r7} mov r8, r4 - mov sb, r5 - mov sl, r6 - mov fp, r7 - pop {r3, r4, r5, r6, r7, pc} + mov r9, r5 + mov r10, r6 + mov r11, r7 + pop {r3 - r7, pc} thumb_func_start sub_080085CC sub_080085CC: @ 0x080085CC @@ -92,7 +94,7 @@ _080085E6: bne _0800861A ldr r1, _080088B0 @ =gUnk_080082DC _0800861A: - mov fp, r1 + mov r11, r1 movs r7, #0 mov r8, r0 movs r2, #0x2e @@ -118,7 +120,7 @@ _0800861A: adds r0, r0, r2 ldrb r4, [r5, #3] movs r6, #2 - mov sl, r1 + mov r10, r1 _08008650: lsls r7, r7, #1 lsls r7, r7, #1 @@ -126,14 +128,14 @@ _08008650: bl sub_080086D8 orrs r7, r2 lsls r7, r7, #1 - mov r1, sl + mov r1, r10 subs r1, r1, r4 bl sub_080086D8 orrs r7, r2 lsls r7, r7, #1 subs r6, #1 beq _08008678 - mov r1, sl + mov r1, r10 ldrb r3, [r5, #2] subs r0, r0, r3 subs r0, r0, r3 @@ -144,7 +146,7 @@ _08008678: adds r1, r1, r2 ldrb r4, [r5, #4] movs r6, #2 - mov sb, r0 + mov r9, r0 _08008684: lsls r7, r7, #1 lsls r7, r7, #1 @@ -152,14 +154,14 @@ _08008684: bl sub_080086D8 orrs r7, r2 lsls r7, r7, #1 - mov r0, sb + mov r0, r9 subs r0, r0, r4 bl sub_080086D8 orrs r7, r2 lsls r7, r7, #1 subs r6, #1 beq _080086AC - mov r0, sb + mov r0, r9 ldrb r3, [r5, #5] subs r1, r1, r3 subs r1, r1, r3 @@ -174,19 +176,19 @@ _080086AC: sub_080086B4: @ 0x080086B4 push {r3, r4, r5, r6, r7, lr} mov r4, r8 - mov r5, sb - mov r6, sl - mov r7, fp + mov r5, r9 + mov r6, r10 + mov r7, r11 push {r4, r5, r6, r7} - mov fp, r2 + mov r11, r2 ldr r2, _080088BC @ =gPlayerEntity mov r8, r2 bl sub_080086D8 pop {r4, r5, r6, r7} mov r8, r4 - mov sb, r5 - mov sl, r6 - mov fp, r7 + mov r9, r5 + mov r10, r6 + mov r11, r7 adds r0, r2, #0 pop {r3, r4, r5, r6, r7, pc} @@ -243,7 +245,7 @@ _0800872E: beq _08008754 push {r4} subs r2, #0x10 - mov r3, fp + mov r3, r11 ldrb r2, [r2, r3] lsls r2, r2, #2 ldr r3, _080088CC @ =gUnk_0800823C @@ -303,9 +305,11 @@ sub_08008790: @ 0x08008790 b sub_08008796 // r0: Entity* -// r1: Entity* +// r1: tile filter? // r2: x // r3: y + +// Somehow involved in trampling tiles, digging with claws, picking up tiles.. non_word_aligned_thumb_func_start sub_08008796 sub_08008796: @ 0x08008796 push {r4, r5, r6, r7, lr} @@ -481,18 +485,17 @@ _08008924: non_word_aligned_thumb_func_start sub_08008926 sub_08008926: @ 0x08008926 - push {r4, r5, r6, lr} + push {r4 - r6, lr} bl sub_08008942 - pop {r4, r5, r6, pc} + pop {r4 - r6, pc} - non_word_aligned_thumb_func_start sub_0800892E -sub_0800892E: @ 0x0800892E - push {r4, r5, r6, lr} - bl sub_08008936 - pop {r4, r5, r6, pc} + non_word_aligned_thumb_func_start UpdateIcePlayerVelocity +UpdateIcePlayerVelocity: @ 0x0800892E + push {r4 - r6, lr} + bl _UpdateIcePlayerVelocity + pop {r4 - r6, pc} - non_word_aligned_thumb_func_start sub_08008936 -sub_08008936: @ 0x08008936 +_UpdateIcePlayerVelocity: push {lr} ldrb r2, [r0, #0x14] lsrs r2, r2, #1 @@ -699,7 +702,7 @@ sub_08008AA0: @ 0x08008AA0 cmp r2, #0xff beq _08008AC4 lsls r2, r2, #4 - ldr r3, _08008B44 @ =gSineTable + ldr r3, =gSineTable ldrsh r4, [r3, r2] adds r3, #0x80 ldrsh r5, [r3, r2] @@ -714,14 +717,14 @@ _08008AC4: non_word_aligned_thumb_func_start sub_08008AC6 sub_08008AC6: @ 0x08008AC6 push {r0, lr} - ldr r1, _08008B48 @ =gPlayerState + ldr r1, =gPlayerState movs r3, #0x26 ldrb r2, [r1, r3] movs r3, #0xf ands r2, r3 bne _08008AEC ldr r2, [r1, #0x30] - ldr r3, _08008B4C @ =gUnk_02000020 + ldr r3, =gUnk_02000020 ands r2, r3 bne _08008AEC bl GetNonCollidedSide @@ -757,10 +760,10 @@ CheckNEastTile: @ 0x08008B02 movs r2, #0 bl GetRelativeCollisionTile // check if north east collision? - ldr r1, _08008B50 @ =0x00004000 + ldr r1, =0x4000 tst r0, r1 bne _08008B1E - ldr r1, _08008B54 @ =gUnk_08007CAC + ldr r1, =gUnk_08007CAC bl sub_08007DE0 movs r2, #1 cmp r3, #1 @@ -774,7 +777,7 @@ _08008B20: non_word_aligned_thumb_func_start PlayerCheckNEastTile PlayerCheckNEastTile: @ 0x08008B22 push {lr} - ldr r0, _08008B58 @ =gPlayerEntity + ldr r0, =gPlayerEntity bl CheckNEastTile adds r0, r2, #0 pop {pc} @@ -786,15 +789,7 @@ _play_snd: bl EnqueueSFX pop {r0, pc} .align 2, 0 -_08008B38: .4byte 0x00000180 -_08008B3C: .4byte 0xFFFFFE80 + +_08008B38: .4byte 0x180 +_08008B3C: .4byte -0x180 _08008B40: .4byte gPlayerState -_08008B44: .4byte gSineTable -_08008B48: .4byte gPlayerState -_08008B4C: .4byte gUnk_02000020 -_08008B50: .4byte 0x00004000 -_08008B54: .4byte gUnk_08007CAC -_08008B58: .4byte gPlayerEntity - - - diff --git a/src/player.c b/src/player.c index ace9b023..23250474 100644 --- a/src/player.c +++ b/src/player.c @@ -278,7 +278,7 @@ extern void sub_08079744(Entity*); extern void sub_0807AE20(Entity*); extern u32 sub_0807A894(Entity*); extern u32 sub_080797C4(void); -extern void sub_0800892E(Entity*); +extern void UpdateIcePlayerVelocity(Entity*); extern void sub_08078F24(void); extern void sub_0807B068(Entity*); extern u32 sub_0807A2F8(u32); @@ -2140,7 +2140,7 @@ static void PlayerRollUpdate(Entity* this) { if (gPlayerState.floor_type == SURFACE_ICE) { // roll in place when on ice - sub_0800892E(this); + UpdateIcePlayerVelocity(this); } else { switch (this->frame & 0xf) { case 0: