metalDoor.c OK

This commit is contained in:
theo3 2020-07-12 16:28:53 -07:00
parent 4cffc35604
commit 370c63e21e
7 changed files with 122 additions and 308 deletions

View File

@ -1,301 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start MetalDoor
MetalDoor: @ 0x080A066C
push {lr}
ldr r2, _080A0680 @ =gUnk_0812493C
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_080A0680: .4byte gUnk_0812493C
thumb_func_start sub_080A0684
sub_080A0684: @ 0x080A0684
push {r4, r5, lr}
adds r4, r0, #0
adds r2, r4, #0
adds r2, #0x84
ldrh r1, [r2]
ldr r0, _080A070C @ =0x0000FFFF
cmp r1, r0
beq _080A06A2
adds r0, r1, #0
bl CheckFlags
cmp r0, #0
beq _080A06A2
bl DeleteThisEntity
_080A06A2:
movs r0, #1
strb r0, [r4, #0xc]
movs r2, #0
movs r0, #0xc0
lsls r0, r0, #2
strh r0, [r4, #0x24]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
strb r2, [r4, #0x1e]
movs r1, #0x80
orrs r0, r1
strb r0, [r4, #0x18]
ldr r0, _080A0710 @ =gUnk_080FD180
str r0, [r4, #0x48]
adds r2, r4, #0
adds r2, #0x29
ldrb r1, [r2]
movs r0, #8
rsbs r0, r0, #0
ands r0, r1
movs r1, #5
orrs r0, r1
strb r0, [r2]
ldrh r1, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x70
strh r1, [r0]
ldrh r0, [r4, #0x32]
adds r1, r4, #0
adds r1, #0x72
strh r0, [r1]
movs r0, #0x2e
ldrsh r1, [r4, r0]
ldr r2, _080A0714 @ =gRoomControls
ldrh r0, [r2, #6]
subs r1, r1, r0
asrs r1, r1, #4
movs r3, #0x3f
ands r1, r3
movs r5, #0x32
ldrsh r0, [r4, r5]
ldrh r2, [r2, #8]
subs r0, r0, r2
asrs r0, r0, #4
ands r0, r3
lsls r0, r0, #6
orrs r1, r0
adds r0, r4, #0
adds r0, #0x74
strh r1, [r0]
pop {r4, r5, pc}
.align 2, 0
_080A070C: .4byte 0x0000FFFF
_080A0710: .4byte gUnk_080FD180
_080A0714: .4byte gRoomControls
thumb_func_start sub_080A0718
sub_080A0718: @ 0x080A0718
push {r4, lr}
adds r4, r0, #0
movs r1, #2
bl sub_08083734
cmp r0, #0
beq _080A074A
movs r2, #0
movs r0, #2
strb r0, [r4, #0xc]
movs r0, #0xc
strb r0, [r4, #0xe]
ldrb r1, [r4, #0x18]
subs r0, #0x10
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r4, #0x18]
strb r2, [r4, #0x15]
ldrh r0, [r4, #0x32]
adds r0, #0x24
strh r0, [r4, #0x32]
adds r0, r4, #0
bl sub_080A080C
_080A074A:
pop {r4, pc}
thumb_func_start sub_080A074C
sub_080A074C: @ 0x080A074C
push {r4, lr}
adds r4, r0, #0
bl sub_0806F69C
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
lsrs r1, r0, #0x18
cmp r1, #0
bne _080A07B6
movs r0, #3
strb r0, [r4, #0xc]
strh r1, [r4, #0x36]
adds r0, r4, #0
adds r0, #0x70
ldrh r0, [r0]
strh r0, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x72
ldrh r0, [r0]
strh r0, [r4, #0x32]
adds r0, r4, #0
movs r1, #0x11
movs r2, #0x40
bl CreateFx
adds r1, r0, #0
cmp r1, #0
beq _080A0794
ldrh r0, [r1, #0x2e]
adds r0, #0xc
strh r0, [r1, #0x2e]
ldrh r0, [r1, #0x32]
subs r0, #0xc
strh r0, [r1, #0x32]
_080A0794:
adds r0, r4, #0
movs r1, #0x11
movs r2, #0x40
bl CreateFx
adds r1, r0, #0
cmp r1, #0
beq _080A07B0
ldrh r0, [r1, #0x2e]
subs r0, #0xc
strh r0, [r1, #0x2e]
ldrh r0, [r1, #0x32]
subs r0, #0xc
strh r0, [r1, #0x32]
_080A07B0:
ldr r0, _080A07B8 @ =0x0000010B
bl sub_08004488
_080A07B6:
pop {r4, pc}
.align 2, 0
_080A07B8: .4byte 0x0000010B
thumb_func_start sub_080A07BC
sub_080A07BC: @ 0x080A07BC
push {r4, lr}
adds r4, r0, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
beq _080A07EA
movs r0, #4
strb r0, [r4, #0xc]
movs r0, #0xc
strb r0, [r4, #0xe]
movs r0, #0x10
strb r0, [r4, #0x15]
ldrh r0, [r4, #0x32]
adds r0, #2
strh r0, [r4, #0x32]
adds r0, r4, #0
bl sub_080A0870
ldr r0, _080A07EC @ =0x0000010B
bl PlaySFX
_080A07EA:
pop {r4, pc}
.align 2, 0
_080A07EC: .4byte 0x0000010B
thumb_func_start sub_080A07F0
sub_080A07F0: @ 0x080A07F0
push {r4, lr}
adds r4, r0, #0
bl sub_0806F69C
ldrb r0, [r4, #0xe]
subs r0, #1
strb r0, [r4, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _080A0808
bl DeleteThisEntity
_080A0808:
pop {r4, pc}
.align 2, 0
thumb_func_start sub_080A080C
sub_080A080C: @ 0x080A080C
push {r4, r5, r6, lr}
adds r4, r0, #0
adds r6, r4, #0
adds r6, #0x74
ldrh r0, [r6]
subs r0, #1
adds r5, r4, #0
adds r5, #0x38
ldrb r1, [r5]
bl sub_080001DA
adds r1, r4, #0
adds r1, #0x76
strh r0, [r1]
ldrh r0, [r6]
ldrb r1, [r5]
bl sub_080001DA
adds r1, r4, #0
adds r1, #0x78
strh r0, [r1]
ldrh r0, [r6]
adds r0, #1
ldrb r1, [r5]
bl sub_080001DA
adds r1, r4, #0
adds r1, #0x7a
strh r0, [r1]
ldr r4, _080A086C @ =0x00004022
ldrh r1, [r6]
subs r1, #1
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
ldrh r1, [r6]
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
ldrh r1, [r6]
adds r1, #1
ldrb r2, [r5]
adds r0, r4, #0
bl SetTile
pop {r4, r5, r6, pc}
.align 2, 0
_080A086C: .4byte 0x00004022
thumb_func_start sub_080A0870
sub_080A0870: @ 0x080A0870
push {r4, r5, r6, lr}
adds r6, r0, #0
adds r0, #0x76
ldrh r0, [r0]
adds r5, r6, #0
adds r5, #0x74
ldrh r1, [r5]
subs r1, #1
adds r4, r6, #0
adds r4, #0x38
ldrb r2, [r4]
bl SetTile
adds r0, r6, #0
adds r0, #0x78
ldrh r0, [r0]
ldrh r1, [r5]
ldrb r2, [r4]
bl SetTile
adds r0, r6, #0
adds r0, #0x7a
ldrh r0, [r0]
ldrh r1, [r5]
adds r1, #1
ldrb r2, [r4]
bl SetTile
pop {r4, r5, r6, pc}
.align 2, 0

View File

@ -140,7 +140,7 @@ typedef struct Entity {
/*0x6c*/ u8 field_0x6c; /*0x6c*/ u8 field_0x6c;
/*0x6d*/ u8 field_0x6d; /*0x6d*/ u8 field_0x6d;
/*0x6e*/ u8 filler4[2]; /*0x6e*/ u8 filler4[2];
/*0x70*/ u32 field_0x70; /*0x70*/ union SplitWord field_0x70;
/*0x74*/ u16 field_0x74; /*0x74*/ u16 field_0x74;
/*0x76*/ u16 field_0x76; /*0x76*/ u16 field_0x76;
/*0x78*/ union SplitHWord field_0x78; /*0x78*/ union SplitHWord field_0x78;

View File

@ -842,7 +842,7 @@ SECTIONS {
asm/objectAD.o(.text); asm/objectAD.o(.text);
asm/floatingBlock.o(.text); asm/floatingBlock.o(.text);
asm/objectAF.o(.text); asm/objectAF.o(.text);
asm/metalDoor.o(.text); src/metalDoor.o(.text);
asm/jailBars.o(.text); asm/jailBars.o(.text);
asm/objectB2.o(.text); asm/objectB2.o(.text);
asm/objectB3.o(.text); asm/objectB3.o(.text);

View File

@ -64,9 +64,9 @@ void sub_08018CBC(Entity *this)
this->field_0x44 = gUnk_080B3DE0[(this->entityType).form * 2 + 1]; this->field_0x44 = gUnk_080B3DE0[(this->entityType).form * 2 + 1];
this->field_0x40 = 0x1b; this->field_0x40 = 0x1b;
this->boundingBox = gUnk_080B3DE8[(this->entityType).form]; this->boundingBox = gUnk_080B3DE8[(this->entityType).form];
(u32 *)gLinkEntity.field_0x70 = this; (u32 *)gLinkEntity.field_0x70.WORD = this;
sub_08078CD0(&gLinkEntity); sub_08078CD0(&gLinkEntity);
(u32 *)gLinkEntity.field_0x70 = pEVar3; (u32 *)gLinkEntity.field_0x70.WORD = pEVar3;
InitializeAnimation(this, (this->entityType).form + 10); InitializeAnimation(this, (this->entityType).form + 10);
sub_08018FA0(this); sub_08018FA0(this);
} }

115
src/metalDoor.c Normal file
View File

@ -0,0 +1,115 @@
#include "global.h"
#include "entity.h"
#include "room.h"
#include "flags.h"
extern u32 sub_08083734(Entity*, u32);
extern void sub_080A080C(Entity*);
extern void sub_0806F69C(Entity*);
extern void sub_08004488(u32);
extern void sub_080A0870(Entity*);
extern void PlaySFX(u32);
extern u32 sub_080001DA(u32, u32);
extern void SetTile(u32, u32, u32);
extern void (*const gUnk_0812493C[])(Entity*);
extern BoundingBox gUnk_080FD180;
void MetalDoor(Entity* this) {
gUnk_0812493C[this->action](this);
}
void sub_080A0684(Entity *this)
{
if ((this->cutsceneBeh.HWORD != 0xffff) && CheckFlags(this->cutsceneBeh.HWORD)) {
DeleteThisEntity();
}
this->action = 1;
this->nonPlanarMovement = 0x300;
this->spriteSettings.b.draw = 0;
this->frameIndex = 0;
this->spriteSettings.b.flipY = 1;
this->boundingBox = &gUnk_080FD180;
this->spritePriority.b0 = 5;
this->field_0x70.HALF.LO = this->x.HALF.HI;
this->field_0x70.HALF.HI = this->y.HALF.HI;
this->field_0x74 = COORD_TO_TILE(this);
}
void sub_080A0718(Entity *this)
{
if (sub_08083734(this, 2) != 0) {
this->action = 2;
this->actionDelay = 0xc;
this->spriteSettings.b.draw = TRUE;
this->direction = 0;
this->y.HALF.HI += 0x24;
sub_080A080C(this);
}
}
void sub_080A074C(Entity *this)
{
u8 bVar1;
Entity *ent;
sub_0806F69C(this);
if (--this->actionDelay == 0) {
this->action = 3;
this->height.HALF.HI = 0;
this->x.HALF.HI = this->field_0x70.HALF.LO;
this->y.HALF.HI = this->field_0x70.HALF.HI;
ent = CreateFx(this, 0x11, 0x40);
if (ent != NULL) {
ent->x.HALF.HI += 0xc;
ent->y.HALF.HI -= 0xc;
}
ent = CreateFx(this, 0x11, 0x40);
if (ent != NULL) {
ent->x.HALF.HI -= 0xc;
ent->y.HALF.HI -= 0xc;
}
sub_08004488(0x10b);
}
}
void sub_080A07BC(Entity *this)
{
if (CheckFlags(this->field_0x86)) {
this->action = 4;
this->actionDelay = 0xc;
this->direction = 0x10;
this->y.HALF.HI += 2;
sub_080A0870(this);
PlaySFX(0x10b);
}
}
void sub_080A07F0(Entity *this)
{
sub_0806F69C(this);
if (--this->actionDelay == 0) {
DeleteThisEntity();
}
}
void sub_080A080C(Entity *this)
{
this->field_0x76 = sub_080001DA(this->field_0x74 - 1, this->collisionLayer);
this->field_0x78.HWORD = sub_080001DA(this->field_0x74, this->collisionLayer);
this->field_0x7a = sub_080001DA(this->field_0x74 + 1, this->collisionLayer);
SetTile(0x4022, this->field_0x74 - 1, this->collisionLayer);
SetTile(0x4022, this->field_0x74, this->collisionLayer);
SetTile(0x4022, this->field_0x74 + 1, this->collisionLayer);
}
void sub_080A0870(Entity *this)
{
SetTile(this->field_0x76, this->field_0x74 - 1, this->collisionLayer);
SetTile(this->field_0x78.HWORD, this->field_0x74, this->collisionLayer);
SetTile(this->field_0x7a, this->field_0x74 + 1, this->collisionLayer);
}

View File

@ -112,7 +112,7 @@ void sub_0808F244(Entity *this)
this->height.WORD = 0; this->height.WORD = 0;
*(u32 *)&this->field_0x74 = 0x80 - this->parent->height.HALF.HI; *(u32 *)&this->field_0x74 = 0x80 - this->parent->height.HALF.HI;
*(u32 *)&this->field_0x78 = 0x100 - this->parent->height.HALF.HI; *(u32 *)&this->field_0x78 = 0x100 - this->parent->height.HALF.HI;
*(u32 *)&this->field_0x70 = *((u8 *)&this->parent->field_0x7c + 3); *(u32 *)&this->field_0x70.WORD = *((u8 *)&this->parent->field_0x7c + 3);
sub_0808F2B0(this); sub_0808F2B0(this);
if ((this->parent->field_0x6d & 2) != 0) { if ((this->parent->field_0x6d & 2) != 0) {
DeleteThisEntity(); DeleteThisEntity();
@ -121,7 +121,7 @@ void sub_0808F244(Entity *this)
void sub_0808F2B0(Entity *this) void sub_0808F2B0(Entity *this)
{ {
sub_0805EC9C(this, *(u32 *)&this->field_0x74, *(u32 *)&this->field_0x78, this->field_0x70); sub_0805EC9C(this, *(u32 *)&this->field_0x74, *(u32 *)&this->field_0x78, this->field_0x70.WORD);
} }
void sub_0808F2C0(Entity *this) void sub_0808F2C0(Entity *this)

View File

@ -40,7 +40,7 @@ void sub_080851AC(Entity* this) {
} }
} }
InitializeAnimation(this, this->animationState); InitializeAnimation(this, this->animationState);
this->field_0x70 = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2); this->field_0x70.WORD = (u32)GetLayerByIndex(this->collisionLayer) + 4 + (COORD_TO_TILE(this) * 2);
sub_08085394(this); sub_08085394(this);
} }