mirror of https://github.com/zeldaret/tmc.git
metalDoor.c OK
This commit is contained in:
parent
4cffc35604
commit
370c63e21e
301
asm/metalDoor.s
301
asm/metalDoor.s
|
@ -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
|
|
@ -140,7 +140,7 @@ typedef struct Entity {
|
|||
/*0x6c*/ u8 field_0x6c;
|
||||
/*0x6d*/ u8 field_0x6d;
|
||||
/*0x6e*/ u8 filler4[2];
|
||||
/*0x70*/ u32 field_0x70;
|
||||
/*0x70*/ union SplitWord field_0x70;
|
||||
/*0x74*/ u16 field_0x74;
|
||||
/*0x76*/ u16 field_0x76;
|
||||
/*0x78*/ union SplitHWord field_0x78;
|
||||
|
|
|
@ -842,7 +842,7 @@ SECTIONS {
|
|||
asm/objectAD.o(.text);
|
||||
asm/floatingBlock.o(.text);
|
||||
asm/objectAF.o(.text);
|
||||
asm/metalDoor.o(.text);
|
||||
src/metalDoor.o(.text);
|
||||
asm/jailBars.o(.text);
|
||||
asm/objectB2.o(.text);
|
||||
asm/objectB3.o(.text);
|
||||
|
|
|
@ -64,9 +64,9 @@ void sub_08018CBC(Entity *this)
|
|||
this->field_0x44 = gUnk_080B3DE0[(this->entityType).form * 2 + 1];
|
||||
this->field_0x40 = 0x1b;
|
||||
this->boundingBox = gUnk_080B3DE8[(this->entityType).form];
|
||||
(u32 *)gLinkEntity.field_0x70 = this;
|
||||
(u32 *)gLinkEntity.field_0x70.WORD = this;
|
||||
sub_08078CD0(&gLinkEntity);
|
||||
(u32 *)gLinkEntity.field_0x70 = pEVar3;
|
||||
(u32 *)gLinkEntity.field_0x70.WORD = pEVar3;
|
||||
InitializeAnimation(this, (this->entityType).form + 10);
|
||||
sub_08018FA0(this);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -112,7 +112,7 @@ void sub_0808F244(Entity *this)
|
|||
this->height.WORD = 0;
|
||||
*(u32 *)&this->field_0x74 = 0x80 - 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);
|
||||
if ((this->parent->field_0x6d & 2) != 0) {
|
||||
DeleteThisEntity();
|
||||
|
@ -121,7 +121,7 @@ void sub_0808F244(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)
|
||||
|
|
|
@ -40,7 +40,7 @@ void sub_080851AC(Entity* this) {
|
|||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue