Merge pull request #83 from notyouraveragehooman/master

bigVortex.c OK
This commit is contained in:
notyouraveragehooman 2020-08-31 15:08:42 -07:00 committed by GitHub
commit cc5bb0133b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 204 additions and 424 deletions

View File

@ -1,259 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start BigVortex
BigVortex: @ 0x08098CF4
push {lr}
adds r2, r0, #0
ldrb r0, [r2, #0xa]
cmp r0, #0
bne _08098D14
ldr r0, _08098D10 @ =gUnk_0812367C
ldrb r1, [r2, #0xc]
lsls r1, r1, #2
adds r1, r1, r0
ldr r1, [r1]
adds r0, r2, #0
bl _call_via_r1
b _08098D1A
.align 2, 0
_08098D10: .4byte gUnk_0812367C
_08098D14:
adds r0, r2, #0
bl sub_08098E3C
_08098D1A:
pop {pc}
thumb_func_start sub_08098D1C
sub_08098D1C: @ 0x08098D1C
push {r4, r5, lr}
adds r4, r0, #0
movs r5, #1
strb r5, [r4, #0xc]
ldr r0, _08098D40 @ =0x0000FFF0
strh r0, [r4, #0x36]
adds r0, r4, #0
adds r0, #0x86
ldrh r0, [r0]
cmp r0, #0
beq _08098D44
bl CheckFlags
cmp r0, #0
bne _08098D44
strb r5, [r4, #0xc]
b _08098D5A
.align 2, 0
_08098D40: .4byte 0x0000FFF0
_08098D44:
movs r0, #3
strb r0, [r4, #0xc]
ldrb r1, [r4, #0x18]
subs r0, #7
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r4, #0x18]
adds r0, r4, #0
bl sub_08098E88
_08098D5A:
adds r0, r4, #0
movs r1, #6
bl sub_0805E3A0
adds r0, r4, #0
movs r1, #0
bl InitAnimationForceUpdate
pop {r4, r5, pc}
thumb_func_start sub_08098D6C
sub_08098D6C: @ 0x08098D6C
push {r4, lr}
adds r4, r0, #0
adds r0, #0x86
ldrh r0, [r0]
bl CheckFlags
cmp r0, #0
beq _08098D9A
movs r0, #2
strb r0, [r4, #0xc]
movs r0, #0x2d
strb r0, [r4, #0xe]
adds r0, r4, #0
movs r1, #0x43
movs r2, #0
bl CreateFx
adds r1, r0, #0
cmp r1, #0
beq _08098D9A
ldrh r0, [r1, #0x32]
adds r0, #8
strh r0, [r1, #0x32]
_08098D9A:
pop {r4, pc}
thumb_func_start sub_08098D9C
sub_08098D9C: @ 0x08098D9C
push {lr}
adds r2, r0, #0
ldrb r0, [r2, #0xe]
subs r0, #1
strb r0, [r2, #0xe]
lsls r0, r0, #0x18
cmp r0, #0
bne _08098DC2
movs r0, #3
strb r0, [r2, #0xc]
ldrb r1, [r2, #0x18]
subs r0, #7
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r2, #0x18]
adds r0, r2, #0
bl sub_08098E88
_08098DC2:
pop {pc}
thumb_func_start sub_08098DC4
sub_08098DC4: @ 0x08098DC4
push {r4, r5, r6, lr}
adds r5, r0, #0
ldr r6, _08098E2C @ =gPlayerEntity
adds r1, r6, #0
movs r2, #8
movs r3, #8
bl sub_0800419C
cmp r0, #0
beq _08098E24
adds r0, r5, #0
adds r1, r6, #0
bl CopyPosition
adds r0, r5, #0
bl sub_08004542
adds r0, r6, #0
bl sub_08004542
adds r0, r6, #0
adds r0, #0x38
movs r4, #1
strb r4, [r0]
adds r0, r5, #0
adds r1, r6, #0
bl ResolveEntityOnTop
ldr r1, _08098E30 @ =gPlayerState
movs r0, #0x1f
strb r0, [r1, #0xc]
adds r0, r1, #0
adds r0, #0x38
strb r4, [r0]
ldrb r0, [r5, #0xb]
adds r1, #0x39
strb r0, [r1]
movs r1, #4
strb r1, [r5, #0xc]
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
cmp r0, #1
bne _08098E20
movs r0, #0x23
bl SetGlobalFlag
_08098E20:
bl sub_08077B20
_08098E24:
adds r0, r5, #0
bl UpdateAnimationSingleFrame
pop {r4, r5, r6, pc}
.align 2, 0
_08098E2C: .4byte gPlayerEntity
_08098E30: .4byte gPlayerState
thumb_func_start sub_08098E34
sub_08098E34: @ 0x08098E34
push {lr}
bl UpdateAnimationSingleFrame
pop {pc}
thumb_func_start sub_08098E3C
sub_08098E3C: @ 0x08098E3C
push {r4, lr}
adds r4, r0, #0
ldrb r0, [r4, #0xc]
cmp r0, #0
bne _08098E5E
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]
ldrb r1, [r4, #0xa]
adds r0, r4, #0
bl InitAnimationForceUpdate
_08098E5E:
ldrb r1, [r4, #0xa]
movs r0, #2
ands r0, r1
lsls r0, r0, #0x18
lsrs r0, r0, #0x18
lsls r0, r0, #1
ldr r1, _08098E84 @ =gUnk_08123690
adds r0, r0, r1
ldrh r1, [r0]
ldrh r2, [r0, #2]
adds r0, r4, #0
movs r3, #0
bl sub_0805EC9C
adds r0, r4, #0
bl UpdateAnimationSingleFrame
pop {r4, pc}
.align 2, 0
_08098E84: .4byte gUnk_08123690
thumb_func_start sub_08098E88
sub_08098E88: @ 0x08098E88
push {r4, r5, lr}
adds r5, r0, #0
movs r0, #0x82
movs r1, #1
movs r2, #0
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _08098EB0
ldr r3, _08098ED8 @ =0xFFFF0000
adds r0, r5, #0
adds r1, r4, #0
movs r2, #0
bl PositionRelative
adds r1, r4, #0
adds r1, #0x63
movs r0, #8
strb r0, [r1]
_08098EB0:
movs r0, #0x82
movs r1, #2
movs r2, #0
bl CreateObject
adds r4, r0, #0
cmp r4, #0
beq _08098ED4
ldr r3, _08098EDC @ =0xFFFE0000
adds r0, r5, #0
adds r1, r4, #0
movs r2, #0
bl PositionRelative
adds r1, r4, #0
adds r1, #0x63
movs r0, #0x10
strb r0, [r1]
_08098ED4:
pop {r4, r5, pc}
.align 2, 0
_08098ED8: .4byte 0xFFFF0000
_08098EDC: .4byte 0xFFFE0000

View File

@ -6,119 +6,6 @@
.text
thumb_func_start Enemy4D
Enemy4D: @ 0x0803EAEC
push {lr}
ldr r1, _0803EAF8 @ =gUnk_080D0880
bl EnemyFunctionHandler
pop {pc}
.align 2, 0
_0803EAF8: .4byte gUnk_080D0880
thumb_func_start sub_0803EAFC
sub_0803EAFC: @ 0x0803EAFC
push {lr}
ldr r2, _0803EB10 @ =gUnk_080D0898
ldrb r1, [r0, #0xc]
lsls r1, r1, #2
adds r1, r1, r2
ldr r1, [r1]
bl _call_via_r1
pop {pc}
.align 2, 0
_0803EB10: .4byte gUnk_080D0898
thumb_func_start sub_0803EB14
sub_0803EB14: @ 0x0803EB14
push {lr}
ldr r1, _0803EB20 @ =gUnk_080D0880
bl sub_0804AA30
pop {pc}
.align 2, 0
_0803EB20: .4byte gUnk_080D0880
thumb_func_start sub_0803EB24
sub_0803EB24: @ 0x0803EB24
push {r4, lr}
adds r4, r0, #0
bl sub_08001324
thumb_func_start sub_0803EB2C
sub_0803EB2C: @ 0x0803EB2C
adds r0, r4, #0
bl sub_0803EAFC
pop {r4, pc}
thumb_func_start sub_0803EB34
sub_0803EB34: @ 0x0803EB34
push {lr}
movs r1, #0xff
movs r2, #0x57
bl CreateDeathFx
pop {pc}
thumb_func_start nullsub_21
nullsub_21: @ 0x0803EB40
bx lr
.align 2, 0
thumb_func_start sub_0803EB44
sub_0803EB44: @ 0x0803EB44
push {r4, lr}
adds r4, r0, #0
bl sub_0804A720
adds r0, r4, #0
movs r1, #0x19
movs r2, #0
bl sub_0804A98C
cmp r0, #0
beq _0803EBB2
str r4, [r0, #0x50]
str r0, [r4, #0x54]
ldrb r1, [r4, #0x10]
movs r0, #0x80
movs r2, #0
orrs r0, r1
strb r0, [r4, #0x10]
ldrb r1, [r4, #0x18]
movs r0, #4
rsbs r0, r0, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r4, #0x18]
movs r0, #2
strb r0, [r4, #0x14]
adds r0, r4, #0
adds r0, #0x7b
strb r2, [r0]
adds r0, #1
strb r2, [r0]
adds r1, r4, #0
adds r1, #0x7e
movs r0, #0x28
strb r0, [r1]
adds r1, #1
movs r0, #0xfe
strb r0, [r1]
ldrh r1, [r4, #0x2e]
adds r0, r4, #0
adds r0, #0x80
strh r1, [r0]
ldrh r0, [r4, #0x32]
adds r1, r4, #0
adds r1, #0x82
strh r0, [r1]
ldrb r1, [r4, #0x14]
lsls r1, r1, #2
adds r0, r4, #0
bl InitAnimationForceUpdate
adds r0, r4, #0
bl sub_0803EE8C
_0803EBB2:
pop {r4, pc}
thumb_func_start sub_0803EBB4
sub_0803EBB4: @ 0x0803EBB4
push {r4, lr}

View File

@ -1,41 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_08055E24
sub_08055E24: @ 0x08055E24
push {r4, lr}
ldr r4, _08055E5C @ =gMenu
ldrb r0, [r4, #6]
adds r0, #1
strb r0, [r4, #6]
ldr r1, _08055E60 @ =gUnk_02000070
movs r0, #1
strb r0, [r1]
ldr r1, [r4, #0xc]
ldrb r0, [r1, #2]
ldrb r1, [r1, #3]
bl sub_0804B0B0
ldr r0, _08055E64 @ =gUnk_080FF400
bl LoadRoomEntityList
ldrb r0, [r4, #4]
movs r1, #0
movs r2, #0
movs r3, #0
bl sub_08055B70
movs r0, #4
movs r1, #0x10
bl DoFade
pop {r4, pc}
.align 2, 0
_08055E5C: .4byte gMenu
_08055E60: .4byte gUnk_02000070
_08055E64: .4byte gUnk_080FF400
thumb_func_start nullsub_493
nullsub_493: @ 0x08055E68
bx lr
.align 2, 0

View File

@ -110,4 +110,6 @@ extern void Enemy66(Entity*);
extern u32 GetNextFunction(Entity*);
extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*));
extern void sub_0804AA30(Entity*, void (*const func[])(Entity*));
extern void sub_08001324(Entity*);
#endif

View File

@ -256,4 +256,7 @@ extern u32 sub_080044EC(Entity*, u32);
extern u32 sub_080002B8(Entity*);
extern u32 sub_08049F84(Entity*, u32);
extern void sub_0802F45C(Entity*);
extern u32 sub_0800419C(Entity*, Entity*, u32, u32);
extern void sub_08004542(Entity*);
extern void sub_08077B20();
#endif

View File

@ -28,7 +28,7 @@ typedef struct {
u8 storyPanelIndex;
u16 transitionTimer;
u16 field_0xa;
u8 field_0xc[0x4];
u8* field_0xc;
u8 unk10[2];
u8 field_0x12;
u8 unk13;

View File

@ -407,6 +407,7 @@ SECTIONS {
asm/vaatiRebornEnemy.o(.text);
asm/vaatiProjectile.o(.text);
asm/ballChainSoldier.o(.text);
src/enemy/enemy4D.o(.text);
asm/enemy4D.o(.text);
asm/ghini.o(.text);
asm/vaatiTransfigured.o(.text);
@ -463,7 +464,6 @@ SECTIONS {
src/code_0805436C.o(.text);
asm/code_0805436C.o(.text);
src/sub_08055E08.o(.text);
asm/sub_08055E24.o(.text);
src/mainLoop.o(.text);
asm/code_08055FF4.o(.text);
src/textbox.o(.text);
@ -805,7 +805,7 @@ SECTIONS {
asm/picoBloom.o(.text);
asm/object80.o(.text);
asm/object81.o(.text);
asm/bigVortex.o(.text);
src/object/bigVortex.o(.text);
asm/bigPushableLever.o(.text);
asm/smallIceBlock.o(.text);
asm/bigIceBlock.o(.text);

55
src/enemy/enemy4D.c Normal file
View File

@ -0,0 +1,55 @@
#include "global.h"
#include "entity.h"
#include "enemy.h"
#include "functions.h"
extern void sub_0803EE8C(Entity*);
extern void (*const gUnk_080D0880[])(Entity*);
extern void (*const gUnk_080D0898[])(Entity*);
void Enemy4D(Entity* this) {
EnemyFunctionHandler(this, gUnk_080D0880);
}
void sub_0803EAFC(Entity* this) {
gUnk_080D0898[this->action](this);
}
void sub_0803EB14(Entity* this) {
sub_0804AA30(this, gUnk_080D0880);
}
void sub_0803EB24(Entity* this) {
sub_08001324(this);
sub_0803EAFC(this);
}
void sub_0803EB34(Entity* this) {
CreateDeathFx(this, 0xff, 0x57);
}
void nullsub_21() {
}
void sub_0803EB44(Entity* this) {
Entity* pEVar1;
sub_0804A720(this);
pEVar1 = sub_0804A98C(this, 0x19, 0);
if (pEVar1 != NULL) {
pEVar1->parent = this;
this->attachedEntity = pEVar1;
this->flags |= 0x80;
this->spriteSettings.b.draw = TRUE;
this->animationState = 2;
*((u8*)&this->field_0x7a + 1) = 0;
*(u8*)&this->field_0x7c = 0;
*((u8*)&this->field_0x7c + 2) = 0x28;
*((u8*)&this->field_0x7c + 3) = 0xfe;
this->field_0x80.HWORD = this->x.HALF.HI;
this->field_0x82.HWORD = this->y.HALF.HI;
InitAnimationForceUpdate(this, this->animationState << 2);
sub_0803EE8C(this);
}
}

111
src/object/bigVortex.c Normal file
View File

@ -0,0 +1,111 @@
#include "global.h"
#include "entity.h"
#include "functions.h"
#include "flags.h"
extern void sub_08098E3C(Entity*);
extern void sub_08098E88(Entity*);
extern void (*const gUnk_0812367C[])(Entity*);
extern u16 gUnk_08123690[];
void BigVortex(Entity* this) {
if ((this->entityType).form == 0) {
gUnk_0812367C[this->action](this);
} else {
sub_08098E3C(this);
}
}
void sub_08098D1C(Entity* this) {
u32 temp;
this->action = 1;
this->height.HALF.HI = -0x10;
temp = this->field_0x86;
if ((temp != 0) && !CheckFlags(temp)) {
this->action = 1;
} else {
this->action = 3;
this->spriteSettings.b.draw = TRUE;
sub_08098E88(this);
}
sub_0805E3A0(this, 6);
InitAnimationForceUpdate(this, 0);
}
void sub_08098D6C(Entity* this) {
Entity* ent;
if (CheckFlags(this->field_0x86)) {
this->action = 2;
this->actionDelay = 0x2d;
ent = CreateFx(this, 0x43, 0);
if (ent != NULL) {
ent->y.HALF.HI += 8;
}
}
}
void sub_08098D9C(Entity* this) {
if (--this->actionDelay == 0) {
this->action = 3;
this->spriteSettings.b.draw = TRUE;
sub_08098E88(this);
}
}
void sub_08098DC4(Entity* this) {
if (sub_0800419C(this, &gPlayerEntity, 8, 8) != 0) {
CopyPosition(this, &gPlayerEntity);
sub_08004542(this);
sub_08004542(&gPlayerEntity);
gPlayerEntity.collisionLayer = 1;
ResolveEntityOnTop(this, &gPlayerEntity);
gPlayerState.playerAction = 0x1f;
gPlayerState.field_0x34[4] = 1;
gPlayerState.field_0x34[5] = this->entityType.parameter;
this->action = 4;
if (this->entityType.parameter == 1) {
SetGlobalFlag(0x23);
}
sub_08077B20();
}
UpdateAnimationSingleFrame(this);
}
void sub_08098E34(Entity* this) {
UpdateAnimationSingleFrame(this);
}
void sub_08098E3C(Entity* this) {
u16* temp;
if (this->action == 0) {
this->action = 1;
this->spriteSettings.b.draw = TRUE;
InitAnimationForceUpdate(this, this->entityType.form);
}
temp = &gUnk_08123690[this->entityType.form & 2];
sub_0805EC9C(this, temp[0], temp[1], 0);
UpdateAnimationSingleFrame(this);
}
void sub_08098E88(Entity* this) {
Entity* ent1;
Entity* ent2;
ent1 = CreateObject(0x82, 1, 0);
if (ent1 != NULL) {
PositionRelative(this, ent1, 0, -0x10000);
ent1->spriteOffsetY = 8;
}
ent2 = CreateObject(0x82, 2, 0);
if (ent2 != NULL) {
PositionRelative(this, ent2, 0, -0x20000);
ent2->spriteOffsetY = 0x10;
}
}

View File

@ -1,13 +1,35 @@
#include "global.h"
#include "menu.h"
#include "room.h"
#include "functions.h"
extern u32* _call_via_r0(u32* func);
extern u8 gMenu;
extern u32* gUnk_080FF420;
extern void (*const gUnk_080FF420[])();
extern void sub_0804B0B0(u32, u32);
extern void sub_08055B70(u32, u32, u32, u32);
void sub_08055E08() {
u32** arr = &gUnk_080FF420;
u8 i = gMenu;
i = *(&gMenu + 6);
_call_via_r0(arr[i]);
struct {
/*0x00*/ u8 unk0;
/*0x10*/ u8 filler1[0x1B];
/*0x1c*/ u8 unk1C;
/*0x1d*/ u8 unk1D;
/*0x1e*/ u8 unk1E;
/*0x1f*/ u8 unk1F;
} gUnk_02000070 = {};
extern EntityData gUnk_080FF400;
void sub_08055E08(void) {
gUnk_080FF420[gMenu.overlayType]();
}
void sub_08055E24(void) {
gMenu.overlayType++;
gUnk_02000070.unk0 = 1;
sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]);
LoadRoomEntityList(&gUnk_080FF400);
sub_08055B70(gMenu.field_0x4, 0, 0, 0);
DoFade(4, 0x10);
}
void nullsub_493(void) {}