ResetPlayer decompile

This commit is contained in:
Tal Hayon 2022-01-06 14:18:27 +02:00
parent e27bfa5a8b
commit ba5155b3ac
5 changed files with 41 additions and 69 deletions

View File

@ -1,63 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ResetPlayer
ResetPlayer: @ 0x08077B2C
push {r4, r5, lr}
movs r4, #0
ldr r5, _08077B88 @ =gUnk_03000B80
_08077B32:
adds r0, r5, #0
adds r1, r4, #0
bl sub_08077E78
adds r5, #0x1c
adds r4, #1
cmp r4, #2
bls _08077B32
ldr r2, _08077B8C @ =gPlayerState
adds r0, r2, #0
adds r0, #0x3d
movs r3, #0
strb r3, [r0]
strb r3, [r2, #0x1c]
subs r0, #0x1c
strb r3, [r0]
strb r3, [r2, #1]
strb r3, [r2, #0xe]
strb r3, [r2, #0x1e]
strb r3, [r2, #0x1b]
strb r3, [r2, #3]
strb r3, [r2, #5]
ldr r0, [r2, #0x30]
ldr r1, _08077B90 @ =0xF7FBFFFF
ands r0, r1
str r0, [r2, #0x30]
ldr r0, _08077B94 @ =gPlayerEntity
str r3, [r0, #0x70]
ldrb r1, [r2, #2]
movs r0, #0xc0
ands r0, r1
cmp r0, #0
bne _08077B76
strb r3, [r2, #2]
_08077B76:
adds r1, r2, #0
adds r1, #0xa8
ldrb r0, [r1]
cmp r0, #4
bgt _08077B86
cmp r0, #2
blt _08077B86
strb r3, [r1]
_08077B86:
pop {r4, r5, pc}
.align 2, 0
_08077B88: .4byte gUnk_03000B80
_08077B8C: .4byte gPlayerState
_08077B90: .4byte 0xF7FBFFFF
_08077B94: .4byte gPlayerEntity

View File

@ -86,10 +86,7 @@ extern u16 gBG1Buffer[0x400];
extern u16 gBG2Buffer[0x400];
extern u16 gBG3Buffer[0x800];
struct {
u8 filler[0x70];
} extern gUnk_03000B80;
// TODO extern ItemBehavior gUnk_03000B80[4];
extern ItemBehavior gUnk_03000B80[4];
static_assert(sizeof(gUnk_03000B80) == 0x70);
typedef struct {

View File

@ -624,7 +624,7 @@ SECTIONS {
src/item/itemMoleMitts.o(.text);
src/item/itemJarEmpty.o(.text);
asm/playerUtils.o(.text);
asm/respawnPlayer.o(.text);
src/respawnPlayer.o(.text);
src/code_08077B98.o(.text);
asm/code_08077B98.o(.text);
src/code_08078778.o(.text);

View File

@ -1256,7 +1256,7 @@ static void PlayerTalkEzlo(Entity* this) {
static void PlayerTalkEzloInit(Entity* this) {
ResetPlayer();
gUnk_03000B80.filler[0x63] = 0;
gUnk_03000B80[3].field_0xf = 0;
this->iframes = 0;
gPriorityHandler.sys_priority = PRIO_PLAYER_EVENT;
this->updatePriority = PRIO_PLAYER_EVENT;

38
src/respawnPlayer.c Normal file
View File

@ -0,0 +1,38 @@
#include "player.h"
#include "functions.h"
void ResetPlayer() {
u32 index = 0;
ItemBehavior* ptr = gUnk_03000B80;
do {
sub_08077E78(ptr, index);
ptr++;
index++;
} while (index <= 2);
gPlayerState.field_0x3c[1] = 0;
gPlayerState.field_0x1c = 0;
gPlayerState.field_0x1f[2] = 0;
gPlayerState.field_0x0[1] = 0;
gPlayerState.field_0xe = 0;
gPlayerState.dash_state = 0;
gPlayerState.sword_state = 0;
gPlayerState.field_0x3[0] = 0;
gPlayerState.heldObject = 0;
gPlayerState.flags &= 0xf7fbffff;
gPlayerEntity.field_0x70.WORD = 0;
if ((gPlayerState.jump_status & 0xc0) == 0) {
gPlayerState.jump_status = 0;
}
switch (gPlayerState.framestate) {
case 2:
case 3:
case 4: {
gPlayerState.framestate = 0;
break;
}
}
}