mirror of
https://github.com/Xeeynamo/sotn-decomp.git
synced 2025-03-06 20:08:27 +00:00
NZ0 EntitySecretRoom Entities (#191)
This commit is contained in:
parent
7f02b45ba6
commit
e8eb52ad4b
@ -87,6 +87,8 @@ EntityCannon = 0x801B25C4;
|
|||||||
EntityCannonShot = 0x801B2874;
|
EntityCannonShot = 0x801B2874;
|
||||||
EntityCannonWall = 0x801B2978;
|
EntityCannonWall = 0x801B2978;
|
||||||
EntityRedEyeBust = 0x801B11C0;
|
EntityRedEyeBust = 0x801B11C0;
|
||||||
|
EntityLeftSecretRoomWall = 0x801B14C4;
|
||||||
|
EntityBottomSecretRoomFloor = 0x801B1770;
|
||||||
EntityAxeKnight = 0x801C45BC;
|
EntityAxeKnight = 0x801C45BC;
|
||||||
EntityAxeKnightThrowingAxe = 0x801C4D18;
|
EntityAxeKnightThrowingAxe = 0x801C4D18;
|
||||||
EntityBloodDrips = 0x801C5568;
|
EntityBloodDrips = 0x801C5568;
|
||||||
|
@ -78,11 +78,158 @@ void EntityRedEyeBust(Entity* self) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DECOMPME_WIP func_801B12E8 https://decomp.me/scratch/3Sf68
|
||||||
INCLUDE_ASM("asm/us/st/nz0/nonmatchings/30958", func_801B12E8);
|
INCLUDE_ASM("asm/us/st/nz0/nonmatchings/30958", func_801B12E8);
|
||||||
|
|
||||||
INCLUDE_ASM("asm/us/st/nz0/nonmatchings/30958", func_801B14C4);
|
void EntityLeftSecretRoomWall(Entity* self, u16* tileLayoutPtr, s32 tilePos) {
|
||||||
|
Entity* newEntity;
|
||||||
|
s32 cond;
|
||||||
|
s32 i;
|
||||||
|
|
||||||
INCLUDE_ASM("asm/us/st/nz0/nonmatchings/30958", func_801B1770);
|
switch (self->step) {
|
||||||
|
case LEFT_SECRET_ROOM_WALL_INIT:
|
||||||
|
InitializeEntity(D_80180BF8);
|
||||||
|
self->hitboxWidth = 16;
|
||||||
|
self->hitboxHeight = 32;
|
||||||
|
self->unk3C = 2;
|
||||||
|
|
||||||
|
cond = D_8003BDEC[129] != 0;
|
||||||
|
tileLayoutPtr = &D_80180E54 + (-cond & 0xC);
|
||||||
|
|
||||||
|
tilePos = 0x260;
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos] = *tileLayoutPtr;
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos + 1] = *(tileLayoutPtr + 1);
|
||||||
|
tilePos += 0x10;
|
||||||
|
tileLayoutPtr += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (D_8003BDEC[129] != 0) {
|
||||||
|
DestroyEntity(self);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case LEFT_SECRET_ROOM_WALL_IDLE:
|
||||||
|
if (self->unk48 != 0) {
|
||||||
|
func_801C29B0(NA_SE_EN_ROCK_BREAK);
|
||||||
|
self->step++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LEFT_SECRET_ROOM_WALL_BREAK:
|
||||||
|
self->unk84.unk++;
|
||||||
|
tileLayoutPtr = &D_80180E54 + (self->unk84.unk * 0x4);
|
||||||
|
|
||||||
|
tilePos = 0x260;
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos] = *tileLayoutPtr;
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos + 1] = *(tileLayoutPtr + 1);
|
||||||
|
tileLayoutPtr += 2;
|
||||||
|
tilePos += 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
newEntity = AllocEntity(&g_EntityArray[224], &g_EntityArray[256]);
|
||||||
|
if (newEntity != NULL) {
|
||||||
|
CreateEntityFromEntity(2, self, newEntity);
|
||||||
|
newEntity->subId = 0x13;
|
||||||
|
}
|
||||||
|
self->unk80.modeS32 = 32;
|
||||||
|
self->step++;
|
||||||
|
|
||||||
|
if (self->unk84.unk == 3) {
|
||||||
|
D_8003BDEC[129] = 1;
|
||||||
|
g_api.func_800F1FC4(0x81);
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
newEntity =
|
||||||
|
AllocEntity(&g_EntityArray[224], &g_EntityArray[256]);
|
||||||
|
if (newEntity != NULL) {
|
||||||
|
CreateEntityFromEntity(0x22, self, newEntity);
|
||||||
|
newEntity->posX.i.hi += (Random() & 0xF);
|
||||||
|
newEntity->posY.i.hi -= 0x20 - (Random() & 0x3F);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DestroyEntity(self);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LEFT_SECRET_ROOM_WALL_CHECK:
|
||||||
|
if (--self->unk80.modeS32 == 0) {
|
||||||
|
self->step = LEFT_SECRET_ROOM_WALL_IDLE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EntityBottomSecretRoomFloor(Entity* self, u16* tileLayoutPtr,
|
||||||
|
s32 tilePos) {
|
||||||
|
Entity* newEntity;
|
||||||
|
s32 flag;
|
||||||
|
s32 i;
|
||||||
|
|
||||||
|
switch (self->step) {
|
||||||
|
case BOTTOM_SECRET_ROOM_FLOOR_INIT:
|
||||||
|
InitializeEntity(D_80180BF8);
|
||||||
|
self->hitboxWidth = 16;
|
||||||
|
self->hitboxHeight = 16;
|
||||||
|
self->unk3C = 2;
|
||||||
|
flag = (D_8003BDEC[130] != 0);
|
||||||
|
tileLayoutPtr = &D_80180E94 + (-flag & 0x6);
|
||||||
|
|
||||||
|
tilePos = 0x2E7;
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos] = *tileLayoutPtr;
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos + 1] = *(tileLayoutPtr + 1);
|
||||||
|
tileLayoutPtr += 2;
|
||||||
|
tilePos += 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (D_8003BDEC[130] != 0) {
|
||||||
|
DestroyEntity(self);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BOTTOM_SECRET_ROOM_FLOOR_IDLE:
|
||||||
|
if (self->unk48 != 0) {
|
||||||
|
func_801C29B0(NA_SE_EN_ROCK_BREAK);
|
||||||
|
self->step++;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
case BOTTOM_SECRET_ROOM_FLOOR_BREAK:
|
||||||
|
self->unk84.unk++;
|
||||||
|
tileLayoutPtr = &D_80180E94 + (self->unk84.unk * 2);
|
||||||
|
|
||||||
|
tilePos = 0x2E7;
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos] = *tileLayoutPtr;
|
||||||
|
g_CurrentRoomTileLayout.fg[tilePos + 1] = *(tileLayoutPtr + 1);
|
||||||
|
tileLayoutPtr += 2;
|
||||||
|
tilePos += 0x10;
|
||||||
|
}
|
||||||
|
|
||||||
|
newEntity = AllocEntity(D_8007D858, &D_8007D858[32]);
|
||||||
|
if (newEntity != NULL) {
|
||||||
|
CreateEntityFromEntity(2, self, newEntity);
|
||||||
|
newEntity->subId = 0x11;
|
||||||
|
}
|
||||||
|
self->unk80.modeS32 = 32;
|
||||||
|
self->step++;
|
||||||
|
|
||||||
|
if (self->unk84.unk == 3) {
|
||||||
|
D_8003BDEC[130] = 1;
|
||||||
|
g_api.func_800F1FC4(0x82);
|
||||||
|
DestroyEntity(self);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BOTTOM_SECRET_ROOM_FLOOR_CHECK:
|
||||||
|
if (--self->unk80.modeS32 == 0) {
|
||||||
|
self->step = BOTTOM_SECRET_ROOM_FLOOR_IDLE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void func_801B19A0(Entity* self) {
|
void func_801B19A0(Entity* self) {
|
||||||
Collider collider;
|
Collider collider;
|
||||||
@ -1242,7 +1389,7 @@ void func_801B6DE4(Entity* self) {
|
|||||||
self->posY.i.hi =
|
self->posY.i.hi =
|
||||||
(u16)(self->unk80.modeS16.unk0 - (g_Camera.posY.i.hi - 4));
|
(u16)(self->unk80.modeS16.unk0 - (g_Camera.posY.i.hi - 4));
|
||||||
self->step++;
|
self->step++;
|
||||||
func_801C29B0(0x676);
|
func_801C29B0(NA_SE_EV_SWITCH_CLICK);
|
||||||
D_801813A4 = self->subId;
|
D_801813A4 = self->subId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ void EntityAxeKnight(Entity* self) {
|
|||||||
self->unk7C.S8.unk0 = 0;
|
self->unk7C.S8.unk0 = 0;
|
||||||
}
|
}
|
||||||
} else if ((animStatus & 0x80) && (self->animFrameIdx == 7)) {
|
} else if ((animStatus & 0x80) && (self->animFrameIdx == 7)) {
|
||||||
func_801C29B0(0x766);
|
func_801C29B0(NA_SE_VO_AXE_KNIGHT_THROW);
|
||||||
newEntity = AllocEntity(D_8007A958, &D_8007A958[32]);
|
newEntity = AllocEntity(D_8007A958, &D_8007A958[32]);
|
||||||
if (newEntity != NULL) {
|
if (newEntity != NULL) {
|
||||||
CreateEntityFromCurrentEntity(0x2A, newEntity);
|
CreateEntityFromCurrentEntity(0x2A, newEntity);
|
||||||
@ -156,7 +156,7 @@ void EntityAxeKnight(Entity* self) {
|
|||||||
animStatus = AnimateEntity(D_80182220, self);
|
animStatus = AnimateEntity(D_80182220, self);
|
||||||
if (animStatus != 0) {
|
if (animStatus != 0) {
|
||||||
if ((animStatus & 0x80) && (self->animFrameIdx == 6)) {
|
if ((animStatus & 0x80) && (self->animFrameIdx == 6)) {
|
||||||
func_801C29B0(0x766);
|
func_801C29B0(NA_SE_VO_AXE_KNIGHT_THROW);
|
||||||
newEntity = AllocEntity(D_8007A958, &D_8007A958[32]);
|
newEntity = AllocEntity(D_8007A958, &D_8007A958[32]);
|
||||||
if (newEntity != NULL) {
|
if (newEntity != NULL) {
|
||||||
CreateEntityFromCurrentEntity(0x2A, newEntity);
|
CreateEntityFromCurrentEntity(0x2A, newEntity);
|
||||||
|
@ -33,10 +33,14 @@ extern u16 D_80180D30[];
|
|||||||
extern u16 D_80180D3C[];
|
extern u16 D_80180D3C[];
|
||||||
extern u16 D_80180D48[];
|
extern u16 D_80180D48[];
|
||||||
extern ObjInit2 D_80180D64[];
|
extern ObjInit2 D_80180D64[];
|
||||||
|
extern u16* D_80180E54;
|
||||||
|
extern u16* D_80180E94;
|
||||||
extern s32 D_80180EB4;
|
extern s32 D_80180EB4;
|
||||||
extern u16 D_80180ED4[];
|
extern u16 D_80180ED4[];
|
||||||
extern u16 D_80180EE0[];
|
extern u16 D_80180EE0[];
|
||||||
extern s32 D_80180EEC;
|
extern s32 D_80180EEC;
|
||||||
|
extern const u8 D_80180EF0[];
|
||||||
|
extern const u8 D_80180EF8[];
|
||||||
extern u16 D_80180F10[];
|
extern u16 D_80180F10[];
|
||||||
extern const u8 D_80180F1C[];
|
extern const u8 D_80180F1C[];
|
||||||
extern u8 D_80180F30;
|
extern u8 D_80180F30;
|
||||||
@ -48,8 +52,6 @@ extern u16 D_80180F9C[];
|
|||||||
extern u32 g_randomNext;
|
extern u32 g_randomNext;
|
||||||
extern s8 c_HeartPrizes[];
|
extern s8 c_HeartPrizes[];
|
||||||
extern Entity* g_CurrentEntity;
|
extern Entity* g_CurrentEntity;
|
||||||
extern const u8 D_80180EF0[];
|
|
||||||
extern const u8 D_80180EF8[];
|
|
||||||
extern s32 D_80181010;
|
extern s32 D_80181010;
|
||||||
extern const u8 D_80181160[];
|
extern const u8 D_80181160[];
|
||||||
extern const u8 D_80181170[];
|
extern const u8 D_80181170[];
|
||||||
@ -143,6 +145,28 @@ extern SubWpnContDebris D_80182584[ENTITY_SUBWPNCONT_DEBRIS_COUNT];
|
|||||||
|
|
||||||
// *** EntitySubWeaponContainer properties END ***
|
// *** EntitySubWeaponContainer properties END ***
|
||||||
|
|
||||||
|
// *** EntityLeftSecretRoomWall properties START ***
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
LEFT_SECRET_ROOM_WALL_INIT,
|
||||||
|
LEFT_SECRET_ROOM_WALL_IDLE,
|
||||||
|
LEFT_SECRET_ROOM_WALL_BREAK,
|
||||||
|
LEFT_SECRET_ROOM_WALL_CHECK
|
||||||
|
} LEFT_SECRET_ROOM_WALL_STEPS;
|
||||||
|
|
||||||
|
// *** EntityLeftSecretRoomWall properties END ***
|
||||||
|
|
||||||
|
// *** EntityBottomSecretRoomFloor properties START ***
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
BOTTOM_SECRET_ROOM_FLOOR_INIT,
|
||||||
|
BOTTOM_SECRET_ROOM_FLOOR_IDLE,
|
||||||
|
BOTTOM_SECRET_ROOM_FLOOR_BREAK,
|
||||||
|
BOTTOM_SECRET_ROOM_FLOOR_CHECK
|
||||||
|
} BOTTOM_SECRET_ROOM_FLOOR_STEPS;
|
||||||
|
|
||||||
|
// *** EntityBottomSecretRoomFloor properties END ***
|
||||||
|
|
||||||
extern s32 D_801825CC[]; // SubWeapons subId table
|
extern s32 D_801825CC[]; // SubWeapons subId table
|
||||||
extern u8 D_801825F0;
|
extern u8 D_801825F0;
|
||||||
extern u16 D_80180C70[];
|
extern u16 D_80180C70[];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user