Two functions in townMinish.c OK

Also created npc.h and format.sh'd various files.
A third function is outlined in townMinish.c, but currently
non-matching.
This commit is contained in:
21aslade 2020-06-15 16:23:10 -06:00
parent a54ec31a56
commit 06f2cd289d
9 changed files with 103 additions and 67 deletions

View File

@ -6,68 +6,6 @@
.text .text
thumb_func_start sub_0806ABC8
sub_0806ABC8: @ 0x0806ABC8
push {r4, lr}
adds r4, r0, #0
ldrb r1, [r4, #0x10]
movs r0, #2
ands r0, r1
cmp r0, #0
bne _0806ABF4
ldr r0, _0806ABF0 @ =gUnk_081126E8
ldrb r1, [r4, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r4, #0
bl _call_via_r1
adds r0, r4, #0
bl sub_0806ED78
b _0806ABFA
.align 2, 0
_0806ABF0: .4byte gUnk_081126E8
_0806ABF4:
adds r0, r4, #0
bl sub_0806ACC4
_0806ABFA:
pop {r4, pc}
thumb_func_start sub_0806ABFC
sub_0806ABFC: @ 0x0806ABFC
push {r4, lr}
adds r4, r0, #0
ldrb r1, [r4, #0xa]
lsls r1, r1, #4
ldr r0, _0806AC38 @ =gUnk_08112674
adds r1, r1, r0
adds r0, r4, #0
bl sub_0806FDEC
cmp r0, #0
beq _0806AC36
adds r0, r4, #0
movs r1, #2
bl InitializeAnimation
movs r1, #0
movs r0, #1
strb r0, [r4, #0xc]
ldrb r0, [r4, #0xe]
adds r2, r4, #0
adds r2, #0x6a
strb r0, [r2]
lsls r0, r0, #1
strb r0, [r4, #0x14]
ldrb r0, [r4, #0x14]
lsls r0, r0, #2
subs r2, #1
strb r0, [r2]
strb r1, [r4, #0xe]
_0806AC36:
pop {r4, pc}
.align 2, 0
_0806AC38: .4byte gUnk_08112674
thumb_func_start sub_0806AC3C thumb_func_start sub_0806AC3C
sub_0806AC3C: @ 0x0806AC3C sub_0806AC3C: @ 0x0806AC3C
push {r4, r5, lr} push {r4, r5, lr}

13
include/npc.h Normal file
View File

@ -0,0 +1,13 @@
#include "global.h"
#include "entity.h"
#ifndef NPC_H
#define NPC_H
typedef struct {
u16 palette;
u8 animIndex;
u8 unk;
} SpriteLoadThing;
#endif

View File

@ -519,6 +519,7 @@ SECTIONS {
asm/dog.o(.text); asm/dog.o(.text);
asm/syrup.o(.text); asm/syrup.o(.text);
asm/rem.o(.text); asm/rem.o(.text);
src/townMinish.o(.text);
asm/townMinish.o(.text); asm/townMinish.o(.text);
asm/librari.o(.text); asm/librari.o(.text);
asm/percy.o(.text); asm/percy.o(.text);

View File

@ -108,4 +108,4 @@ void (*const gEnemyFunctions[])(Entity* ent) = {
TreeItem, TreeItem,
Enemy66 Enemy66
}; };
// clang-format on // clang-format on

View File

@ -16,4 +16,4 @@ void Object1C(Entity *this)
this->parent->field_0x20 &= ~(1 << this->entityType.parameter2); this->parent->field_0x20 &= ~(1 << this->entityType.parameter2);
DeleteThisEntity(); DeleteThisEntity();
} }
} }

View File

@ -15,4 +15,4 @@ void sub_080874F8(Entity* this)
DeleteThisEntity(); DeleteThisEntity();
} }
void nullsub_117(){} void nullsub_117(){}

View File

@ -33,4 +33,4 @@ void ObjectA8(Entity *this)
} }
gUnk_08124824[this->action](this); gUnk_08124824[this->action](this);
sub_08080CB4(this); sub_08080CB4(this);
} }

View File

@ -66,4 +66,4 @@ void sub_08031704(Entity *this)
{ {
sub_0804A720(this); sub_0804A720(this);
sub_080317F8(this); sub_080317F8(this);
} }

84
src/townMinish.c Normal file
View File

@ -0,0 +1,84 @@
#include "global.h"
#include "entity.h"
#include "npc.h"
extern void InitializeAnimation(Entity *, u32);
extern void sub_0806ED78(Entity *);
extern void (*gUnk_081126E8[])();
extern void sub_0806ACC4(Entity *);
extern u32 sub_0806FDEC(Entity *, SpriteLoadThing *);
extern SpriteLoadThing gUnk_08112674[];
void sub_0806ABC8(Entity *this)
{
if ((this->flags & 2) == 0) {
(*gUnk_081126E8[this->action])(this);
sub_0806ED78(this);
}
else {
sub_0806ACC4(this);
}
}
void sub_0806ABFC(Entity *this)
{
u8 animationState;
SpriteLoadThing* spriteLoadThing = &gUnk_08112674[this->entityType.parameter1 << 2];
if (!sub_0806FDEC(this, spriteLoadThing))
{
return;
}
InitializeAnimation(this, 2);
this->action = 1;
this->field_0x6a.HALF.LO = this->parameter3;
this->animationState = this->field_0x6a.HALF.LO << 1;
animationState = this->animationState;
this->field_0x69 = animationState << 2;
this->parameter3 = 0;
}
// Not matching yet, not 100% sure it's functionally identical
/*void sub_0806AC3C(Entity *this) {
if (this->field_0x58 <= 3) {
s32 unk;
u8 field_0x69;
Entity *link = &gLinkEntity;
if (sub_080041A0(this, link, 0x18, 0x18)) {
unk = sub_080045C4(this, link) & (u8)0x1e;
}
else {
unk = this->animationState << 2;
}
field_0x69 = this->field_0x69;
if (unk != field_0x69) {
s32 temp;
if (((unk - field_0x69) & 0x1f) <= 0xf) {
field_0x69--;
}
else {
field_0x69++;
}
temp = field_0x69;
this->field_0x69 = temp & 0x1f;
}
if (!(this->field_0x69 & 7)) {
this->animationState = sub_0806F5B0(this->field_0x69);
UpdateSprite(this, (this->animationState >> 1) ^ 2);
}
}
sub_080042B8(this);
}*/