postman.c

This commit is contained in:
theo3 2020-07-13 13:44:50 -07:00
parent 73b72d6696
commit c47f16e5e7
5 changed files with 280 additions and 448 deletions

View File

@ -83,7 +83,7 @@ endif
#$(C_BUILDDIR)/need_interworking_file_name.o: CFLAGS += -mthumb-interwork
C_SRCS := $(wildcard $(C_SUBDIR)/*.c)
C_SRCS := $(wildcard $(C_SUBDIR)/*.c $(C_SUBDIR)/*/*.c)
C_OBJS := $(patsubst $(C_SUBDIR)/%.c,$(C_BUILDDIR)/%.o,$(C_SRCS))
ASM_SRCS := $(wildcard $(ASM_SUBDIR)/*.s)

View File

@ -0,0 +1,51 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
push {r4, r5, lr}
ldr r3, _0806074C @ =gUnk_0810A918
adds r2, r0, #0
adds r2, #0x68
ldrb r2, [r2]
lsls r2, r2, #0x18
asrs r2, r2, #0x18
lsls r2, r2, #2
adds r2, r2, r3
ldr r2, [r2]
adds r3, r0, #0
adds r3, #0x69
ldrb r3, [r3]
lsls r3, r3, #0x18
asrs r3, r3, #0x18
adds r2, r2, r3
movs r3, #0
ldrsb r3, [r2, r3]
lsls r3, r3, #2
ldr r2, _08060750 @ =gUnk_0810A66C
adds r3, r3, r2
ldr r4, _08060754 @ =gRoomControls
movs r5, #0
ldrsh r2, [r3, r5]
ldrh r5, [r4, #6]
adds r2, r2, r5
movs r5, #2
ldrsh r3, [r3, r5]
ldrh r4, [r4, #8]
adds r3, r3, r4
bl sub_0807DEDC
ldr r2, _08060758 @ =gUnk_02033280
ldrb r1, [r2, #7]
movs r0, #1
orrs r0, r1
strb r0, [r2, #7]
pop {r4, r5, pc}
.align 2, 0
_0806074C: .4byte gUnk_0810A918
_08060750: .4byte gUnk_0810A66C
_08060754: .4byte gRoomControls
_08060758: .4byte gUnk_02033280
.syntax divided

View File

@ -6,453 +6,6 @@
.text
thumb_func_start Postman
Postman: @ 0x080603FC
push {lr}
adds r2, r0, #0
ldrb r1, [r2, #0x10]
movs r0, #2
ands r0, r1
cmp r0, #0
beq _08060412
adds r0, r2, #0
bl sub_08060528
b _08060422
_08060412:
ldr r0, _08060424 @ =gUnk_0810AA24
ldrb r1, [r2, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
_08060422:
pop {pc}
.align 2, 0
_08060424: .4byte gUnk_0810AA24
thumb_func_start sub_08060428
sub_08060428: @ 0x08060428
push {r4, lr}
adds r4, r0, #0
movs r0, #0x5a
strb r0, [r4, #0xe]
movs r0, #0xc0
lsls r0, r0, #1
strh r0, [r4, #0x24]
ldrb r0, [r4, #0xb]
cmp r0, #0
beq _08060444
bl GetCurrentRoomProperty
adds r1, r0, #0
b _08060446
_08060444:
movs r1, #0
_08060446:
adds r0, r4, #0
movs r2, #0
bl sub_0806EE04
movs r0, #1
strb r0, [r4, #0xc]
adds r0, r4, #0
movs r1, #4
bl InitAnimationForceUpdate
pop {r4, pc}
thumb_func_start sub_0806045C
sub_0806045C: @ 0x0806045C
push {r4, lr}
adds r4, r0, #0
bl UpdateAnimationSingleFrame
adds r0, r4, #0
bl sub_080604DC
adds r0, r4, #0
adds r0, #0x39
ldrb r0, [r0]
lsls r0, r0, #0x18
asrs r0, r0, #0x18
cmp r0, #2
bgt _08060488
cmp r0, #1
blt _08060488
movs r0, #2
strb r0, [r4, #0xc]
movs r0, #0
bl TextboxNoOverlapFollow
b _080604C0
_08060488:
adds r0, r4, #0
adds r0, #0x3e
ldrb r1, [r0]
ldrb r0, [r4, #0x14]
cmp r1, r0
beq _0806049E
strb r1, [r4, #0x14]
adds r1, #4
adds r0, r4, #0
bl InitAnimationForceUpdate
_0806049E:
adds r0, r4, #0
movs r1, #0x18
movs r2, #0x18
bl sub_0806ED9C
movs r1, #0
cmp r0, #0
blt _080604B6
ldrb r2, [r4, #0x14]
cmp r0, r2
bne _080604B6
movs r1, #1
_080604B6:
cmp r1, #0
bne _080604C0
adds r0, r4, #0
bl sub_0806EE20
_080604C0:
adds r0, r4, #0
bl sub_0806ED78
pop {r4, pc}
thumb_func_start sub_080604C8
sub_080604C8: @ 0x080604C8
push {r4, lr}
adds r4, r0, #0
bl UpdateAnimationSingleFrame
adds r0, r4, #0
bl sub_080604DC
movs r0, #1
strb r0, [r4, #0xc]
pop {r4, pc}
thumb_func_start sub_080604DC
sub_080604DC: @ 0x080604DC
push {r4, r5, lr}
adds r5, r0, #0
ldrb r0, [r5, #0x18]
lsls r0, r0, #0x1e
lsrs r4, r0, #0x1e
cmp r4, #1
bne _08060524
adds r0, r5, #0
bl sub_080040A8
cmp r0, #0
beq _08060524
adds r2, r5, #0
adds r2, #0x5a
ldrb r1, [r2]
ands r4, r1
cmp r4, #0
beq _08060524
movs r0, #0xfe
ands r0, r1
strb r0, [r2]
adds r0, r5, #0
movs r1, #0x11
movs r2, #0x40
bl CreateFx
adds r1, r0, #0
cmp r1, #0
beq _08060524
ldrh r0, [r1, #0x32]
adds r0, #1
strh r0, [r1, #0x32]
adds r0, r1, #0
movs r1, #3
bl sub_0805E3A0
_08060524:
pop {r4, r5, pc}
.align 2, 0
thumb_func_start sub_08060528
sub_08060528: @ 0x08060528
push {r4, r5, r6, lr}
adds r4, r0, #0
ldrb r3, [r4, #0xc]
cmp r3, #1
beq _08060582
cmp r3, #1
bgt _0806053C
cmp r3, #0
beq _08060546
b _080605EC
_0806053C:
cmp r3, #2
beq _080605F6
cmp r3, #3
beq _08060618
b _080605EC
_08060546:
movs r2, #1
movs r0, #1
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #5
ands r0, r1
orrs r0, r2
strb r0, [r4, #0x18]
adds r0, r4, #0
adds r0, #0x68
strb r3, [r0]
adds r0, #1
strb r3, [r0]
adds r5, r4, #0
adds r5, #0x6a
movs r0, #0
strh r3, [r5]
adds r6, r4, #0
adds r6, #0x6d
strb r0, [r6]
adds r0, r4, #0
bl sub_0801E99C
adds r1, r4, #0
adds r1, #0x6c
strb r0, [r1]
adds r0, r4, #0
bl sub_0807DD50
b _08060634
_08060582:
adds r2, r4, #0
adds r2, #0x39
movs r0, #0
ldrsb r0, [r2, r0]
cmp r0, #2
bne _080605B8
movs r1, #0
movs r0, #3
strb r0, [r4, #0xc]
strb r1, [r2]
adds r0, r4, #0
bl sub_0806F118
ldr r1, _080605B4 @ =gLinkEntity
adds r0, r4, #0
bl GetFacingDirection
bl sub_0806F5A4
adds r1, r0, #0
adds r0, r4, #0
bl InitAnimationForceUpdate
b _080605EC
.align 2, 0
_080605B4: .4byte gLinkEntity
_080605B8:
cmp r0, #0
beq _080605E4
movs r1, #0
movs r0, #2
strb r0, [r4, #0xc]
strb r1, [r2]
adds r0, r4, #0
bl sub_080606D8
ldr r1, _080605E0 @ =gLinkEntity
adds r0, r4, #0
bl GetFacingDirection
bl sub_0806F5A4
adds r1, r0, #0
adds r0, r4, #0
bl InitAnimationForceUpdate
b _080605EC
.align 2, 0
_080605E0: .4byte gLinkEntity
_080605E4:
adds r0, r4, #0
movs r1, #0
bl sub_0807DD94
_080605EC:
adds r5, r4, #0
adds r5, #0x6a
adds r6, r4, #0
adds r6, #0x6d
b _08060634
_080605F6:
adds r0, r4, #0
bl UpdateAnimationSingleFrame
ldr r0, _08060614 @ =gTextBox
ldrb r1, [r0]
movs r0, #0x7f
ands r0, r1
adds r5, r4, #0
adds r5, #0x6a
adds r6, r4, #0
adds r6, #0x6d
cmp r0, #0
bne _08060634
b _08060630
.align 2, 0
_08060614: .4byte gTextBox
_08060618:
adds r0, r4, #0
bl UpdateAnimationSingleFrame
adds r0, r4, #0
bl UpdateFuseInteraction
adds r5, r4, #0
adds r5, #0x6a
adds r6, r4, #0
adds r6, #0x6d
cmp r0, #0
beq _08060634
_08060630:
movs r0, #1
strb r0, [r4, #0xc]
_08060634:
adds r0, r4, #0
bl sub_080604DC
adds r1, r5, #0
ldrh r3, [r1]
movs r0, #0
ldrsh r2, [r1, r0]
cmp r2, #0
ble _08060670
ldr r0, _08060668 @ =0x0000012B
cmp r2, r0
ble _0806066C
movs r0, #0
strh r0, [r1]
movs r0, #0x80
lsls r0, r0, #0xa
str r0, [r4, #0x20]
movs r0, #1
strb r0, [r6]
adds r0, r4, #0
bl sub_080788E0
movs r0, #0x7c
bl sub_08004488
b _08060670
.align 2, 0
_08060668: .4byte 0x0000012B
_0806066C:
subs r0, r3, #1
strh r0, [r5]
_08060670:
movs r1, #0xc0
lsls r1, r1, #5
adds r0, r4, #0
bl sub_08003FC4
ldrb r0, [r6]
cmp r0, #0
beq _08060694
ldr r0, [r4, #0x20]
cmp r0, #0
bne _08060694
ldr r0, [r4, #0x34]
cmp r0, #0
bne _08060694
strb r0, [r6]
adds r0, r4, #0
bl sub_080606C0
_08060694:
ldr r0, [r4, #0x34]
cmp r0, #0
blt _080606B4
ldr r0, _080606BC @ =gLinkEntity
adds r0, #0x38
ldrb r1, [r0]
cmp r1, #0
beq _080606AE
adds r0, r4, #0
adds r0, #0x38
ldrb r0, [r0]
cmp r0, r1
bne _080606B4
_080606AE:
adds r0, r4, #0
bl sub_0806ED78
_080606B4:
adds r0, r4, #0
bl sub_0800451C
pop {r4, r5, r6, pc}
.align 2, 0
_080606BC: .4byte gLinkEntity
thumb_func_start sub_080606C0
sub_080606C0: @ 0x080606C0
push {r4, lr}
adds r4, r0, #0
bl sub_0801E99C
adds r1, r4, #0
adds r1, #0x6c
strb r0, [r1]
ldrb r1, [r1]
adds r0, r4, #0
bl sub_08078784
pop {r4, pc}
thumb_func_start sub_080606D8
sub_080606D8: @ 0x080606D8
push {lr}
adds r2, r0, #0
ldr r0, _080606F8 @ =gUnk_02002A40
ldrb r0, [r0, #8]
subs r0, #2
cmp r0, #0
bge _080606E8
movs r0, #0
_080606E8:
lsls r1, r0, #3
ldr r0, _080606FC @ =gUnk_0810AA30
adds r1, r1, r0
adds r0, r2, #0
bl ShowNPCDialogue
pop {pc}
.align 2, 0
_080606F8: .4byte gUnk_02002A40
_080606FC: .4byte gUnk_0810AA30
thumb_func_start sub_08060700
sub_08060700: @ 0x08060700
push {r4, r5, lr}
ldr r3, _0806074C @ =gUnk_0810A918
adds r2, r0, #0
adds r2, #0x68
ldrb r2, [r2]
lsls r2, r2, #0x18
asrs r2, r2, #0x18
lsls r2, r2, #2
adds r2, r2, r3
ldr r2, [r2]
adds r3, r0, #0
adds r3, #0x69
ldrb r3, [r3]
lsls r3, r3, #0x18
asrs r3, r3, #0x18
adds r2, r2, r3
movs r3, #0
ldrsb r3, [r2, r3]
lsls r3, r3, #2
ldr r2, _08060750 @ =gUnk_0810A66C
adds r3, r3, r2
ldr r4, _08060754 @ =gRoomControls
movs r5, #0
ldrsh r2, [r3, r5]
ldrh r5, [r4, #6]
adds r2, r2, r5
movs r5, #2
ldrsh r3, [r3, r5]
ldrh r4, [r4, #8]
adds r3, r3, r4
bl sub_0807DEDC
ldr r2, _08060758 @ =gUnk_02033280
ldrb r1, [r2, #7]
movs r0, #1
orrs r0, r1
strb r0, [r2, #7]
pop {r4, r5, pc}
.align 2, 0
_0806074C: .4byte gUnk_0810A918
_08060750: .4byte gUnk_0810A66C
_08060754: .4byte gRoomControls
_08060758: .4byte gUnk_02033280
thumb_func_start sub_0806075C
sub_0806075C: @ 0x0806075C
adds r2, r0, #0
adds r2, #0x68
movs r1, #0xb
strb r1, [r2]
adds r0, #0x69
movs r1, #0xff
strb r1, [r0]
bx lr
thumb_func_start sub_0806076C
sub_0806076C: @ 0x0806076C
push {r4, r5, r6, r7, lr}

View File

@ -537,6 +537,7 @@ SECTIONS {
src/festari.o(.text);
asm/festari.o(.text);
src/forestMinish.o(.text);
src/postman.o(.text);
asm/postman.o(.text);
asm/npc5.o(.text);
asm/townsperson.o(.text);

227
src/postman.c Normal file
View File

@ -0,0 +1,227 @@
#include "global.h"
#include "entity.h"
#include "npc.h"
#include "textbox.h"
#include "link.h"
typedef struct {
u8 filler[7];
u8 unk;
} struct_02033280;
extern void sub_08060528(Entity*);
extern void* GetCurrentRoomProperty(u32);
extern void sub_0806EE04(Entity*, void*, u32);
extern void sub_080604DC(Entity*);
extern s32 sub_0806ED9C(Entity*, u32, u32);
extern void sub_0806EE20(Entity*);
extern void sub_0806ED78(Entity*);
extern u32 sub_080040A8(Entity*);
extern void sub_0805E3A0(Entity*, u32);
extern u32 sub_0801E99C(Entity*);
extern void sub_0807DD50(Entity*);
extern void sub_0806F118(Entity*);
extern u32 sub_0806F5A4(u32);
extern u32 GetFacingDirection(Entity*, Entity*);
extern void sub_080606D8(Entity*);
extern void sub_0807DD94(Entity*, u32);
extern void sub_080788E0(Entity*);
extern void sub_08004488(u32);
extern void sub_08003FC4(Entity*, u32);
extern void sub_080606C0(Entity*);
extern void sub_0800451C(Entity*);
extern void sub_08078784(Entity*, u32);
extern void sub_0807DEDC(Entity*, u32, u32, u32);
extern void (*const gUnk_0810AA24[])(Entity*);
extern u32 gUnk_0810AA30[];
extern u32** gUnk_0810A66C;
extern u32 gUnk_0810A918[];
extern struct_02033280 gUnk_02033280;
void Postman(Entity* this) {
if ((this->flags & 2) != 0) {
sub_08060528(this);
} else {
gUnk_0810AA24[this->action](this);
}
}
void sub_08060428(Entity* this) {
u8 bVar1;
void* data;
this->actionDelay = 0x5a;
this->nonPlanarMovement = 0x180;
if (this->entityType.parameter != 0) {
data = GetCurrentRoomProperty(this->entityType.parameter);
} else {
data = NULL;
}
sub_0806EE04(this, data, 0);
this->action = 1;
InitAnimationForceUpdate(this, 4);
}
void sub_0806045C(Entity* this) {
u8 bVar1;
u32 uVar2;
u32 bVar3;
s32 temp;
UpdateAnimationSingleFrame(this);
sub_080604DC(this);
switch (this->interactType) {
case 1:
case 2:
this->action = 2;
TextboxNoOverlapFollow(0);
break;
default:
bVar1 = this->field_0x3e;
if (bVar1 != this->animationState) {
this->animationState = bVar1;
InitAnimationForceUpdate(this, 4 + bVar1);
}
temp = sub_0806ED9C(this, 0x18, 0x18);
if ((temp > -1) && (temp == this->animationState)) {
bVar3 = 1;
} else {
bVar3 = 0;
}
if (!bVar3) {
sub_0806EE20(this);
}
}
sub_0806ED78(this);
}
void sub_080604C8(Entity* this) {
UpdateAnimationSingleFrame(this);
sub_080604DC(this);
this->action = 1;
}
void sub_080604DC(Entity* this) {
u8 bVar1;
int iVar2;
Entity* ent;
if (((u32)(this->spriteSettings.raw << 0x1e) >> 0x1e == 1) && sub_080040A8(this)) {
if ((this->frames.all & 1) != 0) {
this->frames.all &= 0xfe;
ent = CreateFx(this, 0x11, 0x40);
if (ent != NULL) {
ent->y.HALF.HI++;
sub_0805E3A0(ent, 3);
}
}
}
}
void sub_08060528(Entity *this)
{
switch (this->action) {
case 0:
this->action = 1;
this->spriteSettings.b.draw = TRUE;
this->field_0x68 = 0;
this->field_0x69 = 0;
this->field_0x6a.HWORD = 0;
this->field_0x6d = 0;
this->field_0x6c = sub_0801E99C(this);
sub_0807DD50(this);
break;
case 1:
if (this->interactType == 2) {
this->action = 3;
this->interactType = 0;
sub_0806F118(this);
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
}
else {
if (this->interactType != 0) {
this->action = 2;
this->interactType = 0;
sub_080606D8(this);
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gLinkEntity)));
}
else {
sub_0807DD94(this, 0);
}
}
break;
case 2:
UpdateAnimationSingleFrame(this);
if ((gTextBox.doTextBox & 0x7f) != 0) {
break;
}
this->action = 1;
break;
case 3:
UpdateAnimationSingleFrame(this);
if (!UpdateFuseInteraction(this)) {
break;
}
this->action = 1;
}
sub_080604DC(this);
if (0 < (s16)this->field_0x6a.HWORD) {
if ((s16)this->field_0x6a.HWORD > 0x12b) {
this->field_0x6a.HWORD = 0;
this->field_0x20 = 0x20000;
this->field_0x6d = 1;
sub_080788E0(this);
sub_08004488(0x7c);
}
else {
this->field_0x6a.HWORD -= 1;
}
}
sub_08003FC4(this, 0x1800);
if (((this->field_0x6d != 0) && (this->field_0x20 == 0)) && this->height.WORD == 0) {
this->field_0x6d = 0;
sub_080606C0(this);
}
if ((-1 < this->height.WORD) &&
((gLinkEntity.collisionLayer == 0 || (this->collisionLayer == gLinkEntity.collisionLayer)))) {
sub_0806ED78(this);
}
sub_0800451C(this);
}
void sub_080606C0(Entity *this)
{
this->field_0x6c = sub_0801E99C(this);
sub_08078784(this, this->field_0x6c);
}
void sub_080606D8(Entity* this)
{
s32 iVar1;
iVar1 = gUnk_02002A40.unk - 2;
if (iVar1 < 0) {
iVar1 = 0;
}
ShowNPCDialogue(this, &gUnk_0810AA30[iVar1 * 2]);
}
#if 0
void sub_08060700(Entity *arg0, u32 arg1)
{
sub_0807DEDC(arg0,arg1,
gUnk_0810A918[gUnk_0810A66C[arg0->field_0x69][arg0->field_0x68] * 4 + gRoomControls.roomOriginX],
gUnk_0810A918[gUnk_0810A66C[arg0->field_0x69][arg0->field_0x68] * 4 + gRoomControls.roomOriginY + 2]);
gUnk_02033280.unk |= 1;
}
#endif
NAKED void sub_08060700(Entity *arg0, u32 arg1) {
asm(".include \"asm/non_matching/postman/sub_08060700.inc\"");
}
void sub_0806075C(Entity *this)
{
this->field_0x68 = 0xb;
this->field_0x69 = 0xff;
}