Extract some data

And split up subtasks and world events.
This commit is contained in:
octorock
2022-09-05 22:50:19 +02:00
committed by anonymous
parent 756a8a89da
commit 67467fd831
224 changed files with 13873 additions and 28227 deletions
+22 -24
View File
@@ -26,18 +26,9 @@ extern void gMapData;
extern u8 gUpdateVisibleTiles;
extern u16 gMapDataTopSpecial[];
extern u16 gMapDataBottomSpecial[];
extern const u8 gGlobalGfxAndPalettes[];
extern const u8 gUnk_081091E4[];
extern void (*const gUnk_080B4458[])(void);
extern const u16 gUnk_080B44A0[];
extern const u16 gUnk_080B4410[];
extern const s16 gUnk_080B4488[];
extern const s16 gUnk_080B44A8[];
extern const struct_080B44D0 gUnk_080B44D0[];
typedef struct {
u16 tileType;
u16 kind;
@@ -47,6 +38,18 @@ typedef struct {
u16 unk_a;
} Data;
extern const u16 gUnk_080B4410[]; // TODO figure out structure
extern void (*const gUnk_080B4458[])(void);
extern const s16 gUnk_080B4468[]; // TODO struct xy
extern const s16 gUnk_080B4478[]; // TODO struct xy
extern const s16 gUnk_080B4488[];
extern const s16 gUnk_080B4490[]; // TODO struct xy
extern const u16 gUnk_080B44A0[];
extern const s16 gUnk_080B44A8[]; // TODO struct xy
extern const u32 gUnk_080B44B8[]; // TODO actually function pointers?
extern const Data gUnk_080B44C0[];
extern const Data gUnk_080B44C2[];
void sub_0801AD6C(const Data*, u32);
bool32 sub_0801A4F8(void);
bool32 sub_0801AA58(Entity*, u32, u32);
@@ -110,31 +113,30 @@ void SetBGDefaults(void) {
gMapTop.bgSettings->control = gUnk_080B77C0[1];
}
void sub_080197D4(u32* param_1) {
void sub_080197D4(struct_08109194* param_1) {
u32 uVar1;
u8* src;
void* dest;
do {
dest = (void*)param_1[1];
dest = param_1->dest;
if (dest != NULL) {
src = &gMapData + (*param_1 & 0x7fffffff);
if ((param_1[2] & 0x80000000) != 0) {
src = &gMapData + (param_1->src & 0x7fffffff);
if ((param_1->size & 0x80000000) != 0) {
if ((u32)dest >> 0x18 == 6) {
LZ77UnCompVram(src, dest);
} else {
LZ77UnCompWram(src, dest);
}
} else {
MemCopy(src, dest, param_1[2]);
MemCopy(src, dest, param_1->size);
}
} else {
LoadPaletteGroup((u32) * (u16*)param_1);
LoadPaletteGroup(*(u16*)param_1);
sub_080533CC();
}
param_1 += 3;
uVar1 = *(param_1 - 3);
} while ((uVar1 & 0x80000000) != 0);
param_1++;
} while (((param_1 - 1)->src & 0x80000000) != 0);
}
// Has ifdefs for other variants
@@ -483,10 +485,6 @@ u32 sub_0801AC68(u32 position, u32 data) {
return data << 2;
}
extern const Data gUnk_080B44C0[];
extern const Data gUnk_080B44C2[];
extern const u32 gUnk_080B44B8[];
void sub_0801AC98(void) {
u32 position;
u32 width;
@@ -571,11 +569,11 @@ u32 sub_0801AE34(void) {
return gRoomControls.scroll_flags >> 1 & 1;
}
void sub_0801AE44(s32 param_1) {
void sub_0801AE44(bool32 loadGfx) {
void (*func)(void);
gRoomControls.unk_34 = 0;
sub_0807BFD0();
if (param_1 != 0) {
if (loadGfx != 0) {
LoadRoomGfx();
}
sub_080809D4();
+72 -72
View File
@@ -35,7 +35,7 @@ void sub_0801CFD0(u32 index) {
p->_0_0 = 4;
p->_0_4 = 1;
p->_1 = 0x80;
p->_2 = 0xFFFF;
p->objPaletteId = 0xffff;
}
void sub_0801D000(u32 a1) {
@@ -56,58 +56,58 @@ void sub_0801D000(u32 a1) {
gUnk_02001A3C._0_0 = 0;
gUnk_02001A3C._0_4 = 0;
gUnk_02001A3C._1 = 0;
gUnk_02001A3C._2 = 0;
gUnk_02001A3C.objPaletteId = 0;
}
}
}
u32 LoadObjPalette(Entity* entity, u32 a2) {
Palette* puVar1;
int iVar2;
u32 LoadObjPalette(Entity* entity, u32 objPaletteId) {
Palette* palette;
s32 slot;
u32 uVar3;
u32 uVar4;
iVar2 = FindPalette(a2);
if (iVar2 < 0) {
if (a2 < 0x16) {
slot = FindPalette(objPaletteId);
if (slot < 0) {
if (objPaletteId < 0x16) {
uVar3 = 1;
} else {
uVar3 = gUnk_08133368[(a2 - 0x16)].BYTES.byte3;
uVar3 = gUnk_08133368[(objPaletteId - 0x16)].BYTES.byte3;
uVar3 &= 0xf;
}
iVar2 = FindFreeObjPalette(uVar3);
if (iVar2 < 0) {
slot = FindFreeObjPalette(uVar3);
if (slot < 0) {
CleanUpObjPalettes();
iVar2 = FindFreeObjPalette(uVar3);
slot = FindFreeObjPalette(uVar3);
}
if (iVar2 >= 0) {
puVar1 = &gPaletteList[iVar2];
puVar1->_2 = a2;
puVar1->_1 = 0;
puVar1->_0_4 = uVar3;
puVar1->_0_0 = 3;
if (slot >= 0) {
palette = &gPaletteList[slot];
palette->objPaletteId = objPaletteId;
palette->_1 = 0;
palette->_0_4 = uVar3;
palette->_0_0 = 3;
for (uVar3 = uVar3 - 1; uVar3 != 0; uVar3--) {
puVar1++;
puVar1->_2 = 0;
puVar1->_1 = 0;
puVar1->_0_4 = uVar3;
puVar1->_0_0 = 2;
palette++;
palette->objPaletteId = 0;
palette->_1 = 0;
palette->_0_4 = uVar3;
palette->_0_0 = 2;
}
LoadObjPaletteAtIndex(a2, iVar2);
LoadObjPaletteAtIndex(objPaletteId, slot);
}
}
SetEntityObjPalette(entity, iVar2);
return iVar2;
SetEntityObjPalette(entity, slot);
return slot;
}
s32 FindPalette(u32 a1) {
s32 FindPalette(u32 objPaletteId) {
u32 index;
Palette* palette;
if (a1 <= 5)
return a1;
if (objPaletteId <= 5)
return objPaletteId;
for (index = 6, palette = gPaletteList; index < ARRAY_COUNT(gPaletteList); index++) {
if (a1 == palette[index]._2) {
if (objPaletteId == palette[index].objPaletteId) {
return index;
}
}
@@ -115,37 +115,37 @@ s32 FindPalette(u32 a1) {
return -1;
}
u32 FindFreeObjPalette(u32 a1) {
u32 uVar1;
u32 uVar2;
u32 FindFreeObjPalette(u32 paletteCount) {
u32 count;
u32 index;
u32 tmp;
for (uVar1 = 0, uVar2 = 6; uVar2 < ARRAY_COUNT(gPaletteList); uVar2++) {
switch ((gPaletteList[uVar2]._0_0)) {
for (count = 0, index = 6; index < ARRAY_COUNT(gPaletteList); index++) {
switch ((gPaletteList[index]._0_0)) {
case 0:
uVar1 = uVar1 + 1;
if (a1 > uVar1)
count = count + 1;
if (paletteCount > count)
continue;
tmp = uVar1 - 1;
return uVar2 - tmp;
tmp = count - 1;
return index - tmp;
default:
uVar1 = 0;
count = 0;
break;
}
}
for (uVar1 = 0, uVar2 = 6; uVar2 < ARRAY_COUNT(gPaletteList); uVar2++) {
switch (gPaletteList[uVar2]._0_0) {
for (count = 0, index = 6; index < ARRAY_COUNT(gPaletteList); index++) {
switch (gPaletteList[index]._0_0) {
case 0:
case 1:
uVar1++;
if (a1 <= uVar1) {
tmp = uVar1 - 1;
return uVar2 - tmp;
count++;
if (paletteCount <= count) {
tmp = count - 1;
return index - tmp;
}
break;
default:
uVar1 = 0;
count = 0;
break;
}
}
@@ -154,7 +154,7 @@ u32 FindFreeObjPalette(u32 a1) {
NONMATCH("asm/non_matching/color/SetEntityObjPalette.inc", void SetEntityObjPalette(Entity* entity, u32 palette)) {
u32 uVar1;
Palette* pPVar1;
Palette* pal;
if (palette < 0) {
palette = 0;
@@ -164,15 +164,15 @@ NONMATCH("asm/non_matching/color/SetEntityObjPalette.inc", void SetEntityObjPale
}
entity->palette.b.b0 = palette;
entity->palette.b.b4 = palette;
pPVar1 = &gPaletteList[palette];
if ((s8)pPVar1->_0_0 != 4) {
pPVar1->_1++;
uVar1 = pPVar1->_0_4;
pPVar1->_0_0 = 3;
pal = &gPaletteList[palette];
if ((s8)pal->_0_0 != 4) {
pal->_1++;
uVar1 = pal->_0_4;
pal->_0_0 = 3;
while (uVar1 = uVar1 - 1, uVar1 != 0) {
pPVar1 = pPVar1 + 1;
pPVar1->_0_4 = uVar1;
pPVar1->_0_0 = 2;
pal = pal + 1;
pal->_0_4 = uVar1;
pal->_0_0 = 2;
}
}
}
@@ -204,7 +204,7 @@ void sub_0801D244(u32 a1) {
}
}
void sub_0801D28C(Entity* entity, u32 palette) {
void sub_0801D28C(Entity* entity, u32 objPaletteId) {
u32 c = entity->spriteAnimation[1];
Palette* list = gPaletteList;
Palette* p = &list[c];
@@ -213,31 +213,31 @@ void sub_0801D28C(Entity* entity, u32 palette) {
u32 lo = ((u32)((*(u8*)p) << 0x1c)) >> 0x1c;
if (lo == 3) {
p->_2 = palette;
LoadObjPaletteAtIndex(palette, c);
p->objPaletteId = objPaletteId;
LoadObjPaletteAtIndex(objPaletteId, c);
}
}
void ChangeObjPalette(Entity* entity, u32 a2) {
void ChangeObjPalette(Entity* entity, u32 objPaletteId) {
UnloadOBJPalette(entity);
LoadObjPalette(entity, a2);
LoadObjPalette(entity, objPaletteId);
}
void LoadObjPaletteAtIndex(u32 a1, u32 a2) {
void LoadObjPaletteAtIndex(u32 objPaletteId, u32 a2) {
u16* buffer;
gUsedPalettes |= 1 << (a2 + 0x10);
if (5 < a1) {
if (a1 == 0x15) {
if (objPaletteId > 5) {
if (objPaletteId == 0x15) {
buffer = gPaletteBuffer;
MemFill16(buffer[0x3C], buffer + (a2 + 0x10) * 0x10, 0x20);
} else if (a1 < 0x15) {
LoadPalettes((u8*)(gPaletteBuffer + (a1 - 6) * 0x10), a2 + 0x10, 1);
} else if (objPaletteId < 0x15) {
LoadPalettes((u8*)(gPaletteBuffer + (objPaletteId - 6) * 0x10), a2 + 0x10, 1);
} else {
u32 tmp1 = gUnk_08133368[(a1 - 0x16)].WORD_U;
u32 tmp2 = (tmp1 >> 0x18) & 0xf;
tmp1 &= 0xffffff;
LoadPalettes(gGlobalGfxAndPalettes + tmp1, a2 + 0x10, tmp2);
u32 offset = gUnk_08133368[(objPaletteId - 0x16)].WORD_U;
u32 numPalettes = (offset >> 0x18) & 0xf;
offset &= 0xffffff;
LoadPalettes(gGlobalGfxAndPalettes + offset, a2 + 0x10, numPalettes);
}
}
}
@@ -260,7 +260,7 @@ void CleanUpObjPalettes(void) {
gPaletteList[index1]._0_0 = 0;
gPaletteList[index1]._0_4 = 0;
gPaletteList[index1]._1 = 0;
gPaletteList[index1]._2 = 0;
gPaletteList[index1].objPaletteId = 0;
break;
}
}
@@ -337,7 +337,7 @@ void sub_0801D48C(u32 a1, u32 a2) {
pPVar1->_0_0 = 0;
pPVar1->_0_4 = 0;
pPVar1->_1 = 0;
pPVar1->_2 = 0;
pPVar1->objPaletteId = 0;
MemCopy(iVar3, iVar4, 0x20);
iVar3 += 0x10;
pPVar1++;
+56 -52
View File
@@ -79,7 +79,7 @@ extern const DungeonLayout** const gUnk_080C9C50[];
extern u8 gMapDataBottomSpecial[];
u32 sub_0801DF10(const DungeonLayout* lyt);
bool32 sub_0801DF90(TileEntity* tileEntity, u32 bank);
bool32 IsRoomVisited(TileEntity* tileEntity, u32 bank);
u32 sub_0801DF60(u32 a1, u8* p);
u32 sub_0801DF78(u32 a1, u32 a2);
void sub_0801DF28(u32 x, u32 y, s32 color);
@@ -437,6 +437,7 @@ void DrawDungeonFeatures(u32 floor, void* data, u32 size) {
layout = gUnk_080C9C50[gArea.dungeon_idx][floor];
MemClear(gMapDataBottomSpecial, 0x8000);
while (layout->area != 0) {
// ROOM_VISIT_MARKER has to be first TileEntity in the room.
tileEntity = (TileEntity*)GetRoomProperty(layout->area, layout->room, 3);
bankOffset = sub_0801DF10(layout);
features = 0;
@@ -446,7 +447,7 @@ void DrawDungeonFeatures(u32 floor, void* data, u32 size) {
if (HasDungeonSmallKey()) {
features = 2;
}
if (sub_0801DF90(tileEntity, bankOffset)) {
if (IsRoomVisited(tileEntity, bankOffset)) {
features = 3;
}
}
@@ -514,12 +515,12 @@ u32 sub_0801DF78(u32 a1, u32 a2) {
}
}
bool32 sub_0801DF90(TileEntity* tileEntity, u32 bank) {
bool32 IsRoomVisited(TileEntity* tileEntity, u32 bank) {
if (tileEntity == NULL)
return FALSE;
for (; tileEntity->type != 0; tileEntity++) {
if (tileEntity->type == 1)
if (tileEntity->type == ROOM_VISIT_MARKER)
return CheckLocalFlagByBank(bank, tileEntity->localFlag);
}
return FALSE;
@@ -531,7 +532,7 @@ void sub_0801DFB4(Entity* entity, u32 textIndex, u32 a3, u32 a4) {
gFuseInfo._8 = a3;
gFuseInfo._a = a4;
gFuseInfo.ent = entity;
gFuseInfo._3 = gUnk_03003DF0.unk_2;
gFuseInfo.kinstoneId = gUnk_03003DF0.unk_2;
if (entity != NULL) {
gFuseInfo.prevUpdatePriority = entity->updatePriority;
entity->updatePriority = 2;
@@ -738,12 +739,12 @@ void sub_0801E64C(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_
}
}
void sub_0801E6C8(u32 param_1) {
void sub_0801E6C8(u32 kinstoneId) {
u32 tmp;
u32 index;
if (param_1 - 1 < 100) {
if (kinstoneId - 1 < 100) {
for (index = 0; index < 0x80; index++) {
if (param_1 == gSave.unk1C1[index]) {
if (kinstoneId == gSave.unk1C1[index]) {
gSave.unk1C1[index] = 0xf1;
}
}
@@ -752,7 +753,7 @@ void sub_0801E6C8(u32 param_1) {
gSave.unk1C1[tmp] = 0xf2;
}
for (index = 0; index < 0x20; index++) {
if (param_1 == gUnk_03003DF0.array[index].unk_3) {
if (kinstoneId == gUnk_03003DF0.array[index].unk_3) {
gUnk_03003DF0.array[index].unk_3 = 0xf1;
}
}
@@ -803,18 +804,18 @@ u32 sub_0801E7D0(u32 a1) {
return gSave.unk12B[tmp];
}
u32 CheckKinstoneFused(u32 idx) {
if (idx > 100 || idx < 1) {
u32 CheckKinstoneFused(u32 kinstoneId) {
if (kinstoneId > 100 || kinstoneId < 1) {
return 0;
}
return ReadBit(&gSave.unk241, idx);
return ReadBit(&gSave.fusedKinstones, kinstoneId);
}
bool32 sub_0801E810(u32 idx) {
if (idx > 100 || idx < 1) {
bool32 sub_0801E810(u32 kinstoneId) {
if (kinstoneId > 100 || kinstoneId < 1) {
return FALSE;
}
return ReadBit(&gSave.unk24E, idx);
return ReadBit(&gSave.unk24E, kinstoneId);
}
ASM_FUNC("asm/non_matching/common/sub_0801E82C.inc", void sub_0801E82C(void));
@@ -829,57 +830,59 @@ s32 sub_0801E8B0(u32 idx) {
return -1;
}
// Check conditions, something with kinstones
void sub_0801E8D4(void) {
u32 i;
for (i = 10; i <= 100; ++i) {
if (CheckKinstoneFused(i) && !sub_0801E810(i)) {
u32 evt_type = gUnk_080C9CBC[i].evt_type;
struct_080FE320* s = &gUnk_080FE320[evt_type];
u32 kinstoneId;
for (kinstoneId = 10; kinstoneId <= 100; ++kinstoneId) {
if (CheckKinstoneFused(kinstoneId) && !sub_0801E810(kinstoneId)) {
u32 worldEventId = gKinstoneWorldEvents[kinstoneId].worldEventId;
const WorldEvent* s = &gWorldEvents[worldEventId];
#if !defined EU && !defined JP
u32 flag = s->flag;
#endif
u32 tmp;
switch (s->_10) {
case 0:
switch (s->condition) {
case CND_0:
tmp = 0;
break;
case 1:
tmp = s->_11;
case CND_1:
tmp = s->bank;
break;
case 2:
case CND_2:
tmp = 0xf;
break;
case 3:
case CND_3:
tmp = 0x10;
break;
case 4:
case CND_4:
tmp = 0x11;
break;
#if !defined EU && !defined JP
case 5:
tmp = 4;
flag = 0x83;
// Special conditions for BEANDEMO_00 to BEANDEMO_04
case CND_5:
tmp = LOCAL_BANK_3;
flag = SORA_10_H00;
break;
case 6:
tmp = 4;
flag = 0x84;
case CND_6:
tmp = LOCAL_BANK_3;
flag = SORA_11_H00;
break;
case 7:
tmp = 4;
flag = 0x87;
case CND_7:
tmp = LOCAL_BANK_3;
flag = SORA_12_T00;
break;
case 8:
tmp = 4;
flag = 0x88;
case CND_8:
tmp = LOCAL_BANK_3;
flag = SORA_13_H00;
break;
case 9:
tmp = 4;
flag = 0x8b;
case CND_9:
tmp = LOCAL_BANK_3;
flag = SORA_14_T00;
break;
#ifndef DEMO_JP
case 10:
tmp = 5;
flag = 0x88;
case CND_10:
tmp = LOCAL_BANK_4;
flag = KS_B15;
break;
#endif
#endif
@@ -889,7 +892,7 @@ void sub_0801E8D4(void) {
#else
if (sub_0807CB24(tmp, s->flag)) {
#endif
WriteBit(&gSave.unk24E, i);
WriteBit(&gSave.unk24E, kinstoneId);
}
}
}
@@ -911,7 +914,7 @@ void (*const gUnk_080C9CAC[])(void) = {
// TODO merge
#ifdef JP
const struct_080C9CBC gUnk_080C9CBC[] = {
const KinstoneWorldEvent gKinstoneWorldEvents[] = {
{ 15, 44, 45, 8, 0, 0, 0, 0 }, { 4, 8, 1, 0, 0, 1, 2, 0 }, { 4, 9, 1, 0, 0, 2, 2, 0 },
{ 4, 10, 1, 0, 0, 3, 2, 0 }, { 4, 10, 1, 0, 0, 3, 2, 0 }, { 4, 9, 1, 0, 0, 2, 2, 0 },
{ 4, 13, 2, 0, 0, 6, 2, 0 }, { 4, 14, 2, 0, 0, 7, 2, 0 }, { 4, 15, 2, 0, 0, 8, 2, 0 },
@@ -956,7 +959,7 @@ const struct_080C9CBC gUnk_080C9CBC[] = {
#else
#ifdef EU
const struct_080C9CBC gUnk_080C9CBC[] = {
const KinstoneWorldEvent gKinstoneWorldEvents[] = {
{ 15, 44, 45, 8, 0, 0, 0, 0 }, { 4, 8, 1, 0, 0, 1, 2, 0 }, { 4, 9, 1, 0, 0, 2, 2, 0 },
{ 4, 10, 1, 0, 0, 3, 2, 0 }, { 4, 10, 1, 0, 0, 3, 2, 0 }, { 4, 9, 1, 0, 0, 2, 2, 0 },
{ 4, 13, 2, 0, 0, 6, 2, 0 }, { 4, 14, 2, 0, 0, 7, 2, 0 }, { 4, 15, 2, 0, 0, 8, 2, 0 },
@@ -999,7 +1002,7 @@ const struct_080C9CBC gUnk_080C9CBC[] = {
{ 2, 43, 7, 8, 0, 18, 0, 0 },
};
#else
const struct_080C9CBC gUnk_080C9CBC[] = {
const KinstoneWorldEvent gKinstoneWorldEvents[] = {
{ 15, 44, 45, 8, 0, 0, 0, 0 }, { 4, 8, 1, 0, 0, 1, 2, 0 }, { 4, 9, 1, 0, 0, 2, 2, 0 },
{ 4, 10, 1, 0, 0, 3, 2, 0 }, { 4, 10, 1, 0, 0, 3, 2, 0 }, { 4, 9, 1, 0, 0, 2, 2, 0 },
{ 4, 13, 2, 0, 0, 6, 2, 0 }, { 4, 14, 2, 0, 0, 7, 2, 0 }, { 4, 15, 2, 0, 0, 8, 2, 0 },
@@ -1063,13 +1066,14 @@ const u8 gUnk_080CA11C[] = {
24, 45, 53, 54, 55, 57, 60, 68, 70, 71, 78, 80, 83, 85, 86, 88, 95, 96, 0, 0,
};
// Get a random kinstone
u32 sub_0801EA74(void) {
s32 r = (s32)Random() % 18;
u32 i;
for (i = 0; i < 18; ++i) {
u32 n = gUnk_080CA11C[r];
if (!CheckKinstoneFused(n))
return n;
u32 kinstoneId = gUnk_080CA11C[r];
if (!CheckKinstoneFused(kinstoneId))
return kinstoneId;
r = (r + 1) % 18;
}
return 0xF2;
+779
View File
@@ -0,0 +1,779 @@
/**
* @file cutscene.c
*
* @brief Cutscenes
*/
#include "cutscene.h"
#include "enemy.h"
#include "fade.h"
#include "fileselect.h"
#include "functions.h"
#include "game.h"
#include "main.h"
#include "menu.h"
#include "npc.h"
#include "object.h"
#include "screen.h"
void sub_08051F78(void);
void sub_08051FF0(void);
void sub_08052004(void);
const EntityData gUnk_080FCB94[] = {
{ OBJECT, 15, CHUCHU_BOSS_CUTSCENE, 0, 0, 0x1c8, 0x288, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
void sub_080535AC(void);
void sub_080535F4(void);
void nullsub_481(void);
void sub_08053618(void);
void (*const gUnk_080FCBB4[])(void) = {
sub_080535AC,
sub_080535F4,
nullsub_481,
sub_08053618,
};
void CutsceneMain_Init(void) {
gUnk_080FCBB4[gMenu.overlayType]();
}
void sub_080535AC(void) {
gMenu.overlayType = 1;
gMenu.transitionTimer = 120;
gUI.field_0x6 = 1;
gUpdateVisibleTiles = 1;
gScreen.lcd.displayControl &= 0xfeff;
LoadRoomEntityList(gUnk_080FCB94);
SetFade(FADE_BLACK_WHITE | FADE_INSTANT, 8);
}
void sub_080535F4(void) {
if (gFadeControl.active == 0) {
ResetSystemPriority();
gMenu.overlayType = 2;
}
}
void nullsub_481(void) {
}
void sub_08053618(void) {
gMenu.transitionTimer--;
if (gMenu.transitionTimer == 0) {
sub_08052004();
}
}
void sub_08053634(void) {
gUI.nextToLoad = 3; // Subtask_FadeOut
MessageInitialize();
}
void sub_08053648(void) {
Entity* obj = CreateObject(SMOKE, 0, 0);
if (obj != NULL) {
obj->x.HALF.HI = gRoomControls.origin_x + 0x2d0;
obj->y.HALF.HI = gRoomControls.origin_y + 0x148;
}
}
void sub_0805367C(void) {
gMenu.overlayType++;
}
void sub_0805368C(void) {
Entity* entity = FindEntityByID(OBJECT, HOUSE_DOOR_INT, 6);
if (entity != NULL) {
DeleteEntity(entity);
SoundReq(SFX_F0); // TODO Door sound during intro
}
}
void sub_080536A8(void) {
sub_080A71C4(5, 5, FADE_INSTANT, 0x10);
}
void sub_080536B8(void) {
sub_080A71C4(5, 3, FADE_INSTANT, 4);
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
}
extern Script script_IntroCameraTarget;
extern Script script_ZeldaMoveToLinksHouse;
extern Script script_HouseDoorIntro;
extern Script script_CutsceneOrchestratorIntro2;
const EntityData gUnk_080FCBC4[] = {
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x230, 0x1a8, (u32)&script_IntroCameraTarget },
{ NPC, 79, ZELDA, 0, 0, 0x230, 0x1a8, (u32)&script_ZeldaMoveToLinksHouse },
{ OBJECT, 79, HOUSE_DOOR_EXT, 3, 3, 0x290, 0x193, (u32)&script_HouseDoorIntro },
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x2d0, 0x1a8, (u32)&script_CutsceneOrchestratorIntro2 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
extern Script script_CutsceneOrchestratorIntro;
extern Script script_SmithIntro;
extern Script script_ZeldaIntro;
const EntityData gUnk_080FCC14[] = {
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x0, 0x0, (u32)&script_CutsceneOrchestratorIntro },
{ NPC, 79, SMITH, 0, 0, 0xb8, 0x60, (u32)&script_SmithIntro },
{ NPC, 79, ZELDA, 0, 0, 0x8, 0x5e, (u32)&script_ZeldaIntro },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
extern Script script_ZeldaLeaveLinksHouse;
const EntityData gUnk_080FCC54[] = {
{ NPC, 79, ZELDA, 0, 0, 0xa0, 0x5d, (u32)&script_ZeldaLeaveLinksHouse },
{ OBJECT, 15, HOUSE_DOOR_INT, 4, 256, 0x78, 0x88, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const Font gUnk_080FCC84 = {
&gBG1Buffer[0x1cf], BG_TILE_ADDR(0x188), gTextGfxBuffer, 0, 0xf020, 0xf0, 1, 0, 0, 0, 0, 5, 0, 0, 0
};
const Font gUnk_080FCC9C = {
&gBG1Buffer[0x96], BG_TILE_ADDR(0x188), gTextGfxBuffer, 0, 0xf020, 0x78, 1, 0, 0, 0, 0, 5, 0, 0, 0
};
const struct_080FCCB4 gUnk_080FCCB4[] = {
{ &gUnk_080FCC84, 240, 96, 193, 1 }, { &gUnk_080FCC84, 240, 96, 453, 6 }, { &gUnk_080FCC9C, 120, 160, 363, 4 },
{ &gUnk_080FCC9C, 120, 160, 498, 4 }, { &gUnk_080FCC84, 240, 96, 368, 4 }, { &gUnk_080FCC84, 240, 96, 358, 4 },
};
void sub_08053758(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053904(void);
void sub_08053974(void);
void nullsub_482(void);
void sub_080539BC(void);
void (*const gUnk_080FCCFC[])(void) = {
sub_08053758, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800,
sub_08053894, sub_08053800, sub_08053904, sub_08053974, nullsub_482, sub_080539BC, nullsub_482,
};
void sub_080536D4(void) {
gUnk_080FCCFC[gMenu.overlayType]();
}
void sub_0805370C(void);
void (*const gUnk_080FCD38[])(void) = {
sub_0805370C,
nullsub_482,
};
void sub_080536F0(void) {
gUnk_080FCD38[gMenu.overlayType]();
}
void sub_0805370C(void) {
gMenu.overlayType++;
gUpdateVisibleTiles = 1;
sub_08051FF0();
LoadRoomEntityList((EntityData*)gUnk_080FCC54);
SetFade(FADE_INSTANT, 0x10);
}
void sub_08053758(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_08053800(void);
void sub_08053894(void);
void sub_080539F4(void);
void sub_08053A1C(void);
void sub_08053A5C(void);
void sub_08053A90(void);
void (*const gUnk_080FCD40[])(void) = {
sub_08053758, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800,
sub_08053894, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800,
sub_08053894, sub_080539F4, sub_08053A1C, sub_08053A5C, sub_08053A90,
};
void sub_0805373C(void) {
gUnk_080FCD40[gMenu.overlayType]();
}
void sub_08053758(void) {
gMenu.overlayType = 1;
gMenu.transitionTimer = 120;
gMenu.field_0xa = 0x1e;
*((u8*)&gMenu + 0x10) = 0; // TODO
gUI.field_0x6 = 1;
gMapBottom.bgSettings = NULL;
gMapTop.bgSettings = NULL;
gRoomControls.camera_target = NULL;
gRoomControls.scroll_y = 0;
gRoomControls.scroll_x = 0;
ClearBgAnimations();
DispReset(0);
gScreen.lcd.displayControl = 0x2640;
gScreen.controls.layerFXControl = 0x2244;
gScreen.controls.alphaBlend = 0x1000;
gScreen.controls.windowInsideControl = 0x1f;
gScreen.controls.windowOutsideControl = 0x3f;
gScreen.controls.window0HorizontalDimensions = 0xf0;
gScreen.controls.window0VerticalDimensions = 0x60;
gScreen.bg1.control = 0x1c4e;
gScreen.bg2.control = 0x1dc1;
SoundReq(BGM_STORY);
ResetSystemPriority();
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
}
void sub_08053800(void) {
u32 index;
const struct_080FCCB4* ptr;
if (gFadeControl.active == 0) {
index = gGenericMenu.unk10.a[0];
ptr = &gUnk_080FCCB4[index];
gGenericMenu.base.transitionTimer = ptr->transitionTimer;
gGenericMenu.base.field_0xa = 0x1e;
gGenericMenu.unk10.a[0]++;
gGenericMenu.base.overlayType++;
gGenericMenu.base.storyPanelIndex = 0;
LoadPaletteGroup(index + 0x8a);
LoadGfxGroup(index + 0x3a);
MemClear(&gBG1Buffer, 0x800);
ShowTextBox(TEXT_INDEX(TEXT_PICORI, 1) + index, ptr->font);
gScreen.bg1.updated = 1;
gScreen.controls.alphaBlend = 0x10;
gScreen.controls.window0HorizontalDimensions = ptr->width;
gScreen.controls.window0VerticalDimensions = ptr->height;
SetFade(FADE_INSTANT, ptr->fadeSpeed);
}
}
void sub_08053894(void) {
u32 tmp;
if (gFadeControl.active == 0) {
gMenu.transitionTimer--;
if (gMenu.field_0xa != 0) {
gMenu.field_0xa--;
} else {
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
tmp = ++gMenu.storyPanelIndex << 0x18;
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - ((tmp) >> 0x19));
}
}
if (gMenu.transitionTimer == 0) {
gMenu.overlayType++;
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
}
}
}
void sub_08053904(void) {
u32 tmp;
if (gFadeControl.active == 0) {
gMenu.transitionTimer--;
if (gMenu.field_0xa != 0) {
gMenu.field_0xa--;
} else {
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
tmp = ++gMenu.storyPanelIndex << 0x18;
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - (tmp >> 0x19));
}
}
if (gMenu.transitionTimer == 0) {
gMenu.overlayType++;
SetFade(FADE_IN_OUT | FADE_INSTANT, 1);
}
}
}
void sub_08053974(void) {
if (gFadeControl.active == 0) {
InitFade();
DispReset(1);
SetBGDefaults();
sub_08051F78();
LoadRoomEntityList(gUnk_080FCBC4);
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
gMenu.overlayType++;
}
}
void nullsub_482(void) {
}
void sub_080539BC(void) {
SetBGDefaults();
DeleteAllEntities();
sub_08051F9C(0x22, 0x11, 0, 0);
sub_0804B0B0(0x22, 0x11);
LoadRoomEntityList(gUnk_080FCC14);
gMenu.overlayType++;
}
void sub_080539F4(void) {
if (gFadeControl.active == 0) {
DispReset(1);
gMenu.overlayType++;
gMenu.transitionTimer = 60;
}
}
void sub_08053A1C(void) {
gMenu.transitionTimer--;
if (gMenu.transitionTimer == 0) {
gMenu.overlayType++;
gMenu.transitionTimer = 8;
MessageFromTarget(TEXT_INDEX(TEXT_PICORI, 0x07));
gMessage.textWindowPosX = 1;
gMessage.textWindowPosY = 8;
SetFade(FADE_INSTANT, 8);
}
}
void sub_08053A5C(void) {
if (((gMessage.doTextBox & 0x7f) == 0) && --gMenu.transitionTimer == 0) {
gMenu.overlayType++;
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
}
}
void sub_08053A90(void) {
if (gFadeControl.active == 0) {
gUI.nextToLoad = 3; // Subtask_FadeOut
SetBGDefaults();
}
}
extern Script script_CutsceneOrchestratorMinishVaati;
extern Script script_MinishEzlo;
extern Script script_CutsceneMiscObjectMinishCap;
extern Script script_Vaati;
const EntityData gUnk_080FCD84[] = {
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x0, 0x0, (u32)&script_CutsceneOrchestratorMinishVaati },
{ NPC, 79, MINISH_EZLO, 0, 0, 0x78, 0xd8, (u32)&script_MinishEzlo },
{ OBJECT, 79, CUTSCENE_MISC_OBJECT, 1, 0, 0x78, 0x58, (u32)&script_CutsceneMiscObjectMinishCap },
{ NPC, 79, VAATI, 1, 0, 0x78, 0x68, (u32)&script_Vaati },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
void sub_08053ACC(void);
void sub_08053B00(void);
void sub_08053B10(void);
void (*const gUnk_080FCDD4[])(void) = {
sub_08053ACC,
sub_08053B00,
sub_08053B10,
};
void sub_08053AB0(void) {
gUnk_080FCDD4[gMenu.overlayType]();
}
void sub_08053ACC(void) {
gMenu.overlayType++;
gUpdateVisibleTiles = 1;
sub_08051FF0();
LoadRoomEntityList(gUnk_080FCD84);
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
}
void sub_08053B00(void) {
gMenu.overlayType++;
}
void sub_08053B10(void) {
if (CheckRoomFlag(1)) {
gMenu.menuType++;
DispReset(1);
SetFade(FADE_INSTANT, 0x100);
}
}
void sub_08053B3C(void) {
sub_080A71C4(5, 4, FADE_IN_OUT | FADE_INSTANT, 0x100);
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
}
extern Script script_CutsceneOrchestratorTakeoverCutscene;
extern Script script_KingDaltusTakeover;
extern Script script_VaatiTakeover;
extern Script script_ZeldaStoneTakeover;
const EntityData gUnk_080FCDE0[] = {
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x0, 0x0, (u32)&script_CutsceneOrchestratorTakeoverCutscene },
{ NPC, 79, KING_DALTUS, 0, 0, 0x88, 0x58, (u32)&script_KingDaltusTakeover },
{ NPC, 79, VAATI, 1, 0, 0x88, 0xe0, (u32)&script_VaatiTakeover },
{ NPC, 79, ZELDA, 0, 0, 0xb8, 0x58, (u32)&script_ZeldaStoneTakeover },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
extern Script script_MinisterPothoTakeover;
extern Script script_GuardTakeover;
extern Script script_GuardTakeover;
const EntityData gUnk_080FCE30[] = {
{ NPC, 79, MINISTER_POTHO, 0, 0, 0x68, 0x58, (u32)&script_MinisterPothoTakeover },
{ NPC, 79, GUARD_1, 0, 0, 0x78, 0xe8, (u32)&script_GuardTakeover },
{ NPC, 79, GUARD_1, 1, 0, 0x78, 0x108, (u32)&script_GuardTakeover },
{ NPC, 79, GUARD_1, 2, 0, 0x78, 0x128, (u32)&script_GuardTakeover },
{ NPC, 79, GUARD_1, 3, 0, 0x98, 0xe8, (u32)&script_GuardTakeover },
{ NPC, 79, GUARD_1, 4, 0, 0x98, 0x108, (u32)&script_GuardTakeover },
{ NPC, 79, GUARD_1, 5, 0, 0x98, 0x128, (u32)&script_GuardTakeover },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
void sub_08053B74(void);
void sub_08053BAC(void);
void sub_08053BBC(void);
void (*const gUnk_080FCEB0[])(void) = {
sub_08053B74,
sub_08053BAC,
sub_08053BBC,
};
void sub_08053B58(void) {
gUnk_080FCEB0[gMenu.overlayType]();
}
void sub_08053B74(void) {
gMenu.overlayType++;
gUpdateVisibleTiles = 1;
LoadRoomEntityList(gUnk_080FCDE0);
ResetSystemPriority();
ResetEntityPriority();
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
}
void sub_08053BAC(void) {
gMenu.overlayType++;
}
void sub_08053BBC(void) {
if (CheckRoomFlag(0)) {
gMenu.menuType++;
DispReset(1);
SetFade(FADE_INSTANT, 0x100);
}
}
void sub_08053BE8(void) {
sub_080A71C4(5, 2, FADE_IN_OUT | FADE_INSTANT, 0x100);
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
}
extern Script script_ZeldaStoneInDHC;
extern Script script_ZeldaStoneDHC;
const EntityData gUnk_080FCEBC[] = {
{ NPC, 79, ZELDA, 0, 0, 0x78, 0x68, (u32)&script_ZeldaStoneInDHC },
{ NPC, 79, VAATI, 1, 0, 0x78, 0x98, (u32)&script_ZeldaStoneDHC },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
void sub_08053C20(void);
void nullsub_483(void);
void sub_08053C60(void);
void (*const gUnk_080FCEEC[])(void) = {
sub_08053C20,
nullsub_483,
sub_08053C60,
};
void sub_08053C04(void) {
gUnk_080FCEEC[gMenu.overlayType]();
}
void sub_08053C20(void) {
gMenu.overlayType = 1;
gMenu.transitionTimer = 120; // Go to game over after 2 minutes.
gUpdateVisibleTiles = 1;
sub_08051FF0();
LoadStaticBackground(4);
LoadRoomEntityList(gUnk_080FCEBC);
SetFade(FADE_INSTANT, 0x10);
SoundReq(BGM_FIGHT_THEME2);
}
void nullsub_483(void) {
}
void sub_08053C60(void) {
SetFade(FADE_IN_OUT | FADE_INSTANT, 2);
SoundReq(SFX_SUMMON);
SoundReq(SONG_STOP_BGM);
SetTask(TASK_GAMEOVER);
}
void sub_08053C84(void) {
gMenu.overlayType = 2;
}
void sub_08053CAC(void);
void sub_08053CAC(void);
void sub_08053E58(void);
void (*const gUnk_080FCEF8[])(void) = {
sub_08053CAC,
sub_08053CAC,
sub_08053E58,
};
void CutsceneMain_Exit(void) {
gUnk_080FCEF8[gMenu.field_0x3]();
}
const EntityData gUnk_080FCF24[];
const EntityData gUnk_080FCF44[];
const EntityData gUnk_080FCF64[];
const EntityData gUnk_080FCF84[];
const struct_080FCF04 gUnk_080FCF04[] = {
{ gUnk_080FCF24, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_2F, 0, 0 },
{ gUnk_080FCF44, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_1F, 0, 0 },
{ gUnk_080FCF64, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_2F, 0, 0 },
{ gUnk_080FCF84, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_1F, 0, 0 },
};
const EntityData gUnk_080FCF24[] = {
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x88, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FCF44[] = {
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x68, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FCF64[] = {
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x88, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FCF84[] = {
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x68, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
void sub_08053CC8(void);
void sub_08053D34(void);
void sub_08053D90(void);
void sub_08053DB4(void);
void sub_08053E30(void);
void (*const gUnk_080FCFA4[])(void) = {
sub_08053CC8, sub_08053D34, sub_08053D90, sub_08053DB4, sub_08053E30,
};
void sub_08053CAC(void) {
gUnk_080FCFA4[gMenu.overlayType]();
}
void sub_08053CC8(void) {
const struct_080FCF04* ptr;
ptr = gUnk_080FCF04 + gMenu.field_0x3 * 2;
gMenu.field_0xc = (void*)&ptr[1];
LoadRoomEntityList(ptr->entityData);
LoadRoomEntityList(GetRoomProperty(ptr->area, ptr->room, 1));
LoadRoomEntityList(GetRoomProperty(ptr->area, ptr->room, 2));
gMenu.overlayType = 1;
gScreen.lcd.displayControl &= 0xfeff;
gUpdateVisibleTiles = 1;
SetFade(FADE_INSTANT, 0x10);
if (ptr->room == 0x1d) { // TODO what room is this?
gMenu.field_0xa = 1;
}
}
void sub_08053D34(void) {
if (gMenu.field_0xa != 0) {
gMenu.field_0xa = 0;
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3d)) {
SetTileType(0x74, 0xc4, 1);
}
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3e)) {
SetTileType(0x74, 0xcc, 1);
}
}
if (gFadeControl.active == 0) {
gMenu.transitionTimer = 120;
gMenu.overlayType++;
}
}
void sub_08053D90(void) {
gMenu.transitionTimer--;
if (gMenu.transitionTimer == 0) {
gMenu.overlayType++;
SetFadeInverted(0x10);
}
}
void sub_08053DB4(void) {
if (gFadeControl.active == 0) {
struct_080FCF04* ptr = (struct_080FCF04*)gMenu.field_0xc;
sub_08052FF4(gMenu.field_0xc[4], gMenu.field_0xc[5]);
InitializeCamera();
gUpdateVisibleTiles = 1;
gRoomControls.scroll_x = (s8)ptr->scrollX + gRoomControls.scroll_x;
gRoomControls.scroll_y = (s8)ptr->scrollY + gRoomControls.scroll_y;
LoadRoomEntityList(ptr->entityData);
LoadRoomEntityList((EntityData*)GetRoomProperty(ptr->area, ptr->room, 1));
LoadRoomEntityList((EntityData*)GetRoomProperty(ptr->area, ptr->room, 2));
gMenu.transitionTimer = 120;
gMenu.overlayType++;
SetFadeInverted(0x10);
}
}
void sub_08053E30(void) {
if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) {
gMenu.menuType++;
}
}
const EntityData gUnk_080FCFE8[];
const EntityData gUnk_080FD008[];
const EntityData gUnk_080FD028[];
const EntityData gUnk_080FD048[];
const EntityData gUnk_080FD078[];
const EntityData gUnk_080FD098[];
const EntityData gUnk_080FD0C8[];
const EntityData gUnk_080FD0E8[];
const struct_080FCFB8 gUnk_080FCFB8[] = {
{ gUnk_080FCFE8, gUnk_080FD008, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_DARKNUT, 16, 16 },
{ gUnk_080FD028, gUnk_080FD048, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_DARKNUTS, 16, 16 },
{ gUnk_080FD078, gUnk_080FD098, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_DARKNUTS, 16, 16 },
{ gUnk_080FD0C8, gUnk_080FD0E8, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_DARKNUT, 16, 16 },
};
const EntityData gUnk_080FCFE8[] = {
{ OBJECT, 15, BOSS_DOOR, 8, 0, 0x88, 0x28, 65535 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FD008[] = {
{ ENEMY, 47, DARK_NUT, 2, 0, 0x88, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FD028[] = {
{ OBJECT, 15, BOSS_DOOR, 8, 0, 0x88, 0x28, 65535 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FD048[] = {
{ ENEMY, 47, DARK_NUT, 1, 0, 0x70, 0x68, 0 },
{ ENEMY, 47, DARK_NUT, 0, 0, 0xa0, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FD078[] = {
{ OBJECT, 15, BOSS_DOOR, 10, 0, 0x88, 0xa8, 65535 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FD098[] = {
{ ENEMY, 47, DARK_NUT, 0, 0, 0x70, 0x68, 0 },
{ ENEMY, 47, DARK_NUT, 1, 0, 0xa0, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FD0C8[] = {
{ OBJECT, 15, BOSS_DOOR, 10, 0, 0x88, 0xa8, 65535 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
const EntityData gUnk_080FD0E8[] = {
{ ENEMY, 47, DARK_NUT, 2, 0, 0x88, 0x68, 0 },
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
};
void sub_08053E74(void);
void sub_08053EC4(void);
void sub_08053EFC(void);
void sub_08053F20(void);
void sub_08053EC4(void);
void sub_08053EFC(void);
void sub_08053F20(void);
void sub_08053EC4(void);
void sub_08053EFC(void);
void sub_08053F20(void);
void sub_08053EC4(void);
void sub_08053F88(void);
void (*const gUnk_080FD108[])(void) = {
sub_08053E74, sub_08053EC4, sub_08053EFC, sub_08053F20, sub_08053EC4, sub_08053EFC,
sub_08053F20, sub_08053EC4, sub_08053EFC, sub_08053F20, sub_08053EC4, sub_08053F88,
};
void sub_08053E58(void) {
gUnk_080FD108[gMenu.overlayType]();
}
void sub_08053E74(void) {
const struct_080FCFB8* ptr = gUnk_080FCFB8;
gMenu.field_0xc = (u8*)ptr;
LoadRoomEntityList(ptr->entityData1);
gMenu.transitionTimer = 120;
gMenu.field_0xa = 0x3c;
gMenu.overlayType++;
gScreen.lcd.displayControl &= 0xfeff;
gUpdateVisibleTiles = 1;
SetMinPriority(1);
SetFade(FADE_INSTANT, 8);
}
void sub_08053EC4(void) {
EntityData** data;
if ((gFadeControl.active == 0) && (--gMenu.field_0xa == 0)) {
data = (EntityData**)(gMenu.field_0xc + 4); // TODO entityData2 of struct_080FCFB8
gMenu.field_0xc += 0xc;
LoadRoomEntityList(*data);
gMenu.overlayType++;
}
}
void sub_08053EFC(void) {
if (--gMenu.transitionTimer == 0) {
gMenu.overlayType++;
SetFadeInverted(8);
}
}
void sub_08053F20(void) {
struct_080FCFB8* ptr;
if (gFadeControl.active == 0) {
DeleteAllEntities();
ptr = (struct_080FCFB8*)gMenu.field_0xc;
sub_08052FF4(ptr->area, ptr->room);
InitializeCamera();
gUpdateVisibleTiles = 1;
gRoomControls.scroll_x = (s8)ptr->scrollX + gRoomControls.scroll_x;
gRoomControls.scroll_y = (s8)ptr->scrollY + gRoomControls.scroll_y;
LoadRoomEntityList((ptr)->entityData1);
gMenu.transitionTimer = 120;
gMenu.field_0xa = 0x3c;
gMenu.overlayType++;
SetFadeInverted(8);
}
}
void sub_08053F88(void) {
if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) {
gMenu.menuType++;
ResetEntityPriority();
}
}
void sub_080536D4(void);
void sub_08053B58(void);
void sub_0805373C(void);
void sub_08053AB0(void);
void sub_080536F0(void);
void sub_08053C04(void);
void (*const gUnk_080FD138[])(void) = {
sub_080536D4, sub_08053B58, sub_0805373C, sub_08053AB0, sub_080536F0, sub_08053C04,
};
void CutsceneMain_Update(void) {
gUnk_080FD138[gMenu.field_0x3]();
}
+56
View File
@@ -0,0 +1,56 @@
#include "figurineMenu.h"
#include "pauseMenu.h"
#include "subtask.h"
#include "subtask2.h"
// This data also belongs in figurine_menu.c, but the data/gfx/figurines.s are inbetween.
// TODO convert them to c code as well.
// clang-format off
// Pause menu screens
const struct_08128A38 gUnk_08128A38[] = {
[PauseMenuScreen_0] = { 0, 1, PauseMenu_Variant0 },
[PauseMenuScreen_1] = { 0, 1, PauseMenu_ItemMenu },
[PauseMenuScreen_2] = { 1, 2, PauseMenu2 },
[PauseMenuScreen_3] = { 8, 2, PauseMenu_Variant0 },
[PauseMenuScreen_4] = { 2, 15, PauseMenu_Screen_4 },
[PauseMenuScreen_5] = { 3, 15, PauseMenu_Screen_5 },
[PauseMenuScreen_6] = { 4, 15, PauseMenu_Screen_6 },
[PauseMenuScreen_7] = { 5, 2, PauseMenu_Screen_7 },
[PauseMenuScreen_8] = { 6, 2, PauseMenu_Screen_8 },
[PauseMenuScreen_9] = { 9, 2, PauseMenu_Screen_9 },
[PauseMenuScreen_10] = { 10, 2, PauseMenu_Screen_10 },
[PauseMenuScreen_11] = { 10, 1, PauseMenu_Screen_10 },
[PauseMenuScreen_12] = { 2, 15, PauseMenu_Variant0 },
[PauseMenuScreen_13] = { 7, 15, PauseMenu_Variant0 },
[PauseMenuScreen_14] = { 0, 1, PauseMenu_Variant0 },
[PauseMenuScreen_15] = { 0, 1, PauseMenu_Variant0 },
[PauseMenuScreen_16] = { 0, 1, PauseMenu_Variant0 },
[PauseMenuScreen_17] = { 0, 1, PauseMenu_Variant0 },
[PauseMenuScreen_18] = { 0, 1, PauseMenu_Variant0 },
[PauseMenuScreen_19] = { 0, 1, PauseMenu_Variant0 },
};
// TODO extract the bg controls
const struct_08128AD8 gUnk_08128AD8[] = {
{ 182, 90, 1024, 7173, 7427 },
{ 183, 91, 1024, 7173, 7427 },
{ 185, 94, 34304, 7171, 7435 },
{ 184, 92, 1536, 7170, 7427 },
{ 185, 129, 1536, 7178, 7427 },
{ 204, 125, 1024, 7171, 7427 },
{ 205, 126, 1536, 7170, 7427 },
{ 185, 93, 34304, 7171, 7435 },
{ 206, 89, 3840, 7170, 7427 },
#ifdef EU
{ 0, 128, 1536, 7170, 7431 },
{ 0, 127, 1536, 7170, 7431 },
#else
{ 207, 128, 1536, 7170, 7431 },
{ 207, 127, 1536, 7170, 7431 },
#endif
};
// clang-format on
+138
View File
@@ -0,0 +1,138 @@
/**
* @file hitbox.c
*
* @brief Hitboxes
*/
#include "hitbox.h"
const Hitbox gHitbox_0 = { 0, -3, { 5, 3, 3, 5 }, 6, 6 };
const Hitbox gHitbox_30 = { 0, 6, { 5, 3, 3, 5 }, 10, 16 };
const Hitbox gHitbox_31 = { 0, 6, { 5, 3, 3, 5 }, 10, 15 };
const Hitbox gHitbox_1 = { 0, 0, { 5, 3, 3, 5 }, 6, 6 };
const Hitbox gHitbox_2 = { 0, -3, { 5, 3, 3, 5 }, 8, 8 };
const Hitbox gUnk_080FD178 = { 0, 0, { 5, 3, 3, 5 }, 8, 8 };
const Hitbox gHitbox_3 = { 0, -3, { 5, 3, 3, 5 }, 12, 12 };
const Hitbox gHitbox_4 = { 0, 0, { 9, 6, 6, 9 }, 10, 10 };
const Hitbox gUnk_080FD190 = { 0, 0, { 12, 8, 8, 12 }, 14, 14 };
const Hitbox gHitbox_5 = { 0, -1, { 6, 3, 3, 6 }, 6, 5 };
const Hitbox gHitbox_6 = { 0, 0, { 4, 2, 2, 4 }, 2, 2 };
const Hitbox3D gUnk_080FD1A8 = { 0, -3, { 6, 3, 3, 6 }, 2, 2, 64, { 0, 0, 0 } };
const Hitbox gUnk_080FD1B4 = { 0, -4, { 8, 5, 6, 7 }, 8, 10 };
const Hitbox unused1 = { 0, -3, { 0, 0, 0, 0 }, 0, 0 };
const Hitbox gHitbox_7 = { 0, 0, { 2, 0, 0, 2 }, 2, 2 };
const Hitbox gHitbox_8 = { 0, 1, { 5, 2, 3, 4 }, 4, 4 };
const Hitbox gUnk_080FD1D4 = { 0, -3, { 0, 0, 0, 0 }, 10, 8 };
const Hitbox gUnk_080FD1DC = { 0, 0, { 6, 4, 4, 6 }, 6, 6 };
const Hitbox gUnk_080FD1E4 = { 0, 0, { 0, 0, 0, 0 }, 4, 4 };
const Hitbox gUnk_080FD1EC = { 0, 0, { 0, 0, 0, 0 }, 2, 2 };
const Hitbox gUnk_080FD1F4 = { 0, -1, { 6, 4, 4, 6 }, 4, 4 };
const Hitbox gUnk_080FD1FC = { 0, 0, { 6, 4, 4, 6 }, 6, 6 };
const Hitbox gUnk_080FD204 = { 0, 0, { 0, 0, 0, 0 }, 5, 5 };
const Hitbox gUnk_080FD20C = { 0, 0, { 0, 0, 0, 0 }, 4, 4 };
const Hitbox gUnk_080FD214 = { 0, 0, { 0, 0, 0, 0 }, 2, 2 };
const Hitbox gUnk_080FD21C = { 0, 0, { 6, 4, 4, 6 }, 6, 6 };
const Hitbox gUnk_080FD224 = { 0, -2, { 0, 0, 0, 0 }, 5, 3 };
const Hitbox3D gUnk_080FD22C = { 0, 0, { 5, 3, 3, 5 }, 6, 6, 12, { 0, 0, 0 } };
const Hitbox gUnk_080FD238 = { 0, 4, { 25, 8, 8, 12 }, 26, 8 };
const Hitbox gUnk_080FD240 = { 0, 12, { 28, 14, 14, 16 }, 24, 24 };
const Hitbox gUnk_080FD248 = { 0, 0, { 28, 14, 14, 16 }, 16, 16 };
const Hitbox gHitbox_9 = { 0, -4, { 5, 3, 3, 5 }, 6, 6 };
const Hitbox gUnk_080FD258 = { 0, -6, { 9, 6, 5, 10 }, 7, 8 };
const Hitbox gUnk_080FD260 = { 0, -3, { 5, 3, 3, 4 }, 3, 3 };
const Hitbox gHitbox_10 = { 0, -3, { 0, 0, 0, 0 }, 2, 3 };
const Hitbox gUnk_080FD270 = { 0, 0, { 4, 4, 4, 4 }, 2, 6 };
const Hitbox gUnk_080FD278 = { 0, 0, { 4, 4, 4, 4 }, 6, 2 };
const Hitbox gUnk_080FD280 = { 0, -2, { 0, 0, 0, 0 }, 12, 14 };
const Hitbox gUnk_080FD288 = { 0, -3, { 14, 12, 10, 12 }, 12, 10 };
const Hitbox gUnk_080FD290 = { 0, 0, { 5, 3, 3, 5 }, 6, 6 };
const Hitbox gUnk_080FD298 = { 0, 0, { 0, 0, 0, 0 }, 4, 4 };
const Hitbox gUnk_080FD2A0 = { 0, 0, { 0, 0, 0, 0 }, 2, 2 };
const Hitbox gUnk_080FD2A8 = { 0, -6, { 34, 24, 28, 32 }, 26, 21 };
const Hitbox gHitbox_11 = { 0, -4, { 0, 0, 0, 0 }, 7, 4 };
const Hitbox gHitbox_12 = { 0, -6, { 0, 0, 0, 0 }, 7, 4 };
const Hitbox gHitbox_13 = { 0, 0, { 9, 4, 4, 9 }, 4, 4 };
const Hitbox gHitbox_14 = { 0, -3, { 6, 4, 4, 6 }, 5, 5 };
const Hitbox gUnk_080FD2D0 = { 0, -8, { 5, 3, 3, 5 }, 18, 16 };
const Hitbox gUnk_080FD2D8 = { 0, -14, { 5, 3, 3, 5 }, 4, 4 };
const Hitbox gUnk_080FD2E0 = { 0, 0, { 5, 3, 3, 5 }, 12, 12 };
const Hitbox gUnk_080FD2E8 = { 0, 0, { 5, 3, 3, 5 }, 32, 32 };
const Hitbox gUnk_080FD2F0 = { 0, 0, { 6, 4, 4, 6 }, 6, 6 };
const Hitbox gHitbox_15 = { 0, 0, { 6, 4, 4, 6 }, 9, 9 };
const Hitbox gHitbox_16 = { 0, -7, { 0, 0, 0, 0 }, 8, 7 };
const Hitbox gUnk_080FD308 = { 0, -12, { 16, 8, 8, 16 }, 8, 8 };
const Hitbox gUnk_080FD310 = { 0, -2, { 5, 3, 3, 5 }, 9, 9 };
const Hitbox gHitbox_17 = { 0, 1, { 8, 6, 6, 8 }, 6, 6 };
const Hitbox gUnk_080FD320 = { 0, 0, { 5, 3, 3, 5 }, 8, 12 };
const Hitbox gUnk_080FD328 = { 0, 0, { 5, 3, 3, 5 }, 6, 12 };
const Hitbox gUnk_080FD330 = { 0, -6, { 5, 3, 3, 5 }, 6, 6 };
const Hitbox gHitbox_18 = { 0, -4, { 6, 3, 3, 6 }, 6, 6 };
const Hitbox3D gUnk_080FD340 = { 0, 0, { 6, 3, 3, 6 }, 3, 3, 16, { 0, 0, 0 } };
const Hitbox gUnk_080FD34C = { 0, 0, { 4, 2, 2, 4 }, 4, 4 };
const Hitbox gUnk_080FD354 = { 0, -2, { 0, 0, 0, 0 }, 32, 10 };
const Hitbox gUnk_080FD35C = { 11, 2, { 0, 0, 0, 0 }, 9, 8 };
const Hitbox gUnk_080FD364 = { 12, 6, { 0, 0, 0, 0 }, 9, 8 };
const Hitbox gUnk_080FD36C = { -11, 2, { 0, 0, 0, 0 }, 9, 8 };
const Hitbox gUnk_080FD374 = { -12, 6, { 0, 0, 0, 0 }, 9, 8 };
const Hitbox gUnk_080FD37C = { -2, -6, { 0, 0, 0, 0 }, 4, 5 };
const Hitbox gUnk_080FD384 = { 2, -6, { 0, 0, 0, 0 }, 4, 5 };
const Hitbox gUnk_080FD38C = { 0, 0, { 0, 0, 0, 0 }, 16, 12 };
const Hitbox gUnk_080FD394 = { 31, 2, { 0, 0, 0, 0 }, 9, 8 };
const Hitbox gUnk_080FD39C = { 8, 12, { 0, 0, 0, 0 }, 10, 10 };
const Hitbox gUnk_080FD3A4 = { 0, 12, { 0, 0, 0, 0 }, 6, 18 };
const Hitbox gUnk_080FD3AC = { -18, 10, { 0, 0, 0, 0 }, 12, 12 };
const Hitbox gUnk_080FD3B4 = { -31, 2, { 0, 0, 0, 0 }, 9, 8 };
const Hitbox gUnk_080FD3BC = { -8, 12, { 0, 0, 0, 0 }, 10, 10 };
const Hitbox gUnk_080FD3C4 = { 18, 10, { 0, 0, 0, 0 }, 12, 12 };
const Hitbox gUnk_080FD3CC = { 0, 0, { 72, 60, 60, 72 }, 40, 40 };
const Hitbox unused2 = { 0, 0, { 52, 44, 44, 52 }, 40, 40 };
const Hitbox gUnk_080FD3DC = { 0, 0, { 8, 8, 8, 8 }, 16, 16 };
const Hitbox gUnk_080FD3E4 = { 0, 0, { 8, 8, 8, 8 }, 16, 16 };
const Hitbox gUnk_080FD3EC = { 0, 0, { 8, 8, 8, 8 }, 16, 16 };
const Hitbox gUnk_080FD3F4 = { 0, 0, { 8, 5, 5, 8 }, 16, 16 };
const Hitbox3D gUnk_080FD3FC = { 0, -3, { 5, 3, 3, 5 }, 6, 6, 16, { 0, 0, 0 } };
const Hitbox gUnk_080FD408 = { 0, 0, { 9, 4, 4, 9 }, 4, 4 };
const Hitbox3D gHitbox_19 = { 0, -3, { 5, 3, 3, 5 }, 6, 6, 12, { 0, 0, 0 } };
const Hitbox gUnk_080FD41C = { 0, 0, { 0, 0, 0, 0 }, 6, 6 };
const Hitbox gUnk_080FD424 = { -3, 0, { 0, 0, 0, 0 }, 5, 6 };
const Hitbox gUnk_080FD42C = { 0, -1, { 0, 0, 0, 0 }, 6, 6 };
const Hitbox gUnk_080FD434 = { 3, 0, { 0, 0, 0, 0 }, 5, 6 };
const Hitbox3D gUnk_080FD43C = { -16, 12, { 0, 0, 0, 0 }, 8, 4, 24, { 0, 0, 0 } };
const Hitbox gHitbox_20 = { 0, 0, { 0, 0, 0, 0 }, 4, 4 };
const Hitbox gUnk_080FD450 = { 0, -3, { 0, 0, 0, 0 }, 4, 4 };
const Hitbox gHitbox_21 = { 0, 0, { 0, 0, 0, 0 }, 1, 1 };
const Hitbox gHitbox_22 = { 0, 0, { 0, 0, 0, 0 }, 2, 2 };
const Hitbox gHitbox_23 = { 0, -3, { 4, 3, 3, 4 }, 4, 4 };
const Hitbox gHitbox_32 = { 0, -5, { 9, 6, 6, 9 }, 10, 10 };
const Hitbox unused3 = { 0, -4, { 5, 3, 3, 5 }, 5, 5 };
const Hitbox gHitbox_24 = { 0, -3, { 5, 3, 3, 5 }, 3, 3 };
const Hitbox gUnk_080FD488 = { 0, -3, { 6, 3, 3, 4 }, 4, 3 };
const Hitbox gUnk_080FD490 = { 0, -3, { 3, 2, 2, 3 }, 2, 2 };
const Hitbox3D gHitbox_25 = { 0, -6, { 5, 3, 3, 5 }, 6, 6, 16, { 0, 0, 0 } };
const Hitbox3D gHitbox_26 = { 0, -5, { 4, 2, 2, 4 }, 4, 4, 16, { 0, 0, 0 } };
const Hitbox unused4 = { 0, -7, { 8, 6, 6, 8 }, 6, 6 };
const Hitbox gUnk_080FD4B8 = { 0, 0, { 0, 0, 0, 0 }, 3, 8 };
const Hitbox gUnk_080FD4C0 = { 0, 0, { 0, 0, 0, 0 }, 3, 16 };
const Hitbox gUnk_080FD4C8 = { 0, 0, { 0, 0, 0, 0 }, 3, 24 };
const Hitbox gUnk_080FD4D0 = { 0, 0, { 0, 0, 0, 0 }, 3, 32 };
const Hitbox gUnk_080FD4D8 = { 0, 0, { 0, 0, 0, 0 }, 3, 40 };
const Hitbox gUnk_080FD4E0 = { 0, 0, { 0, 0, 0, 0 }, 3, 48 };
const Hitbox gUnk_080FD4E8 = { 0, 0, { 0, 0, 0, 0 }, 3, 56 };
const Hitbox gUnk_080FD4F0 = { 0, 0, { 0, 0, 0, 0 }, 16, 3 };
const Hitbox gUnk_080FD4F8 = { 0, 0, { 0, 0, 0, 0 }, 24, 3 };
const Hitbox gUnk_080FD500 = { 0, 0, { 0, 0, 0, 0 }, 32, 3 };
const Hitbox gUnk_080FD508 = { 0, 0, { 0, 0, 0, 0 }, 40, 3 };
const Hitbox gUnk_080FD510 = { 0, 0, { 0, 0, 0, 0 }, 48, 3 };
const Hitbox gUnk_080FD518 = { 0, 0, { 0, 0, 0, 0 }, 56, 3 };
const Hitbox gUnk_080FD520 = { 0, 0, { 0, 0, 0, 0 }, 64, 3 };
const Hitbox gHitbox_27 = { 0, 0, { 3, 2, 2, 3 }, 1, 1 };
const Hitbox gUnk_080FD530 = { 0, 9, { 10, 8, 8, 10 }, 12, 12 };
const Hitbox3D gUnk_080FD538 = { 0, -4, { 28, 23, 23, 28 }, 6, 6, 10, { 0, 0, 0 } };
const Hitbox gUnk_080FD544 = { 0, -20, { 36, 24, 28, 32 }, 16, 16 };
const Hitbox3D gHitbox_28 = { 0, 0, { 0, 0, 0, 0 }, 16, 16, 14, { 0, 0, 0 } };
const Hitbox gUnk_080FD558 = { 0, 0, { 5, 3, 3, 5 }, 4, 4 };
const Hitbox gUnk_080FD560 = { 0, 0, { 0, 0, 0, 0 }, 1, 1 };
const Hitbox gHitbox_29 = { 0, -4, { 7, 5, 5, 7 }, 7, 7 };
const Hitbox gUnk_080FD570 = { 0, -4, { 0, 0, 0, 0 }, 8, 6 };
const Hitbox gUnk_080FD578 = { 0, -4, { 0, 0, 0, 0 }, 12, 6 };
const Hitbox gUnk_080FD580 = { 0, -3, { 8, 5, 5, 8 }, 10, 10 };
const Hitbox gUnk_080FD588 = { 0, -7, { 5, 3, 3, 5 }, 6, 6 };
+132
View File
@@ -0,0 +1,132 @@
#include "global.h"
#include "assets/gfx_offsets.h"
const u32 gUnk_08133368[] = {
offset_gPalette_14 | 1 << 0x18, offset_gPalette_15 | 1 << 0x18, offset_gPalette_16 | 1 << 0x18,
offset_gPalette_17 | 1 << 0x18, offset_gPalette_22 | 1 << 0x18, offset_gPalette_23 | 1 << 0x18,
offset_gPalette_102 | 1 << 0x18, offset_gPalette_321 | 1 << 0x18, offset_gPalette_100 | 1 << 0x18,
offset_gPalette_101 | 1 << 0x18, offset_gPalette_103 | 1 << 0x18, offset_gPalette_118 | 1 << 0x18,
offset_gPalette_105 | 1 << 0x18, offset_gPalette_104 | 1 << 0x18, offset_gPalette_106 | 1 << 0x18,
offset_gPalette_89 | 1 << 0x18, offset_gPalette_90 | 1 << 0x18, offset_gPalette_91 | 1 << 0x18,
offset_gPalette_107 | 1 << 0x18, offset_gPalette_109 | 1 << 0x18, offset_gPalette_94 | 1 << 0x18,
offset_gPalette_47 | 1 << 0x18, offset_gPalette_79 | 1 << 0x18, offset_gPalette_80 | 1 << 0x18,
offset_gPalette_24 | 1 << 0x18, offset_gPalette_679 | 1 << 0x18, offset_gPalette_205 | 1 << 0x18,
offset_gPalette_206 | 1 << 0x18, offset_gPalette_207 | 1 << 0x18, offset_gPalette_239 | 1 << 0x18,
offset_gPalette_231 | 1 << 0x18, offset_gPalette_133 | 1 << 0x18, offset_gPalette_134 | 1 << 0x18,
offset_gPalette_129 | 1 << 0x18, offset_gPalette_135 | 1 << 0x18, offset_gPalette_136 | 1 << 0x18,
offset_gPalette_137 | 1 << 0x18, offset_gPalette_138 | 1 << 0x18, offset_gPalette_139 | 1 << 0x18,
offset_gPalette_140 | 1 << 0x18, offset_gPalette_130 | 1 << 0x18, offset_gPalette_131 | 1 << 0x18,
offset_gPalette_132 | 1 << 0x18, offset_gPalette_141 | 1 << 0x18, offset_gPalette_142 | 1 << 0x18,
offset_gPalette_144 | 1 << 0x18, offset_gPalette_145 | 1 << 0x18, offset_gPalette_146 | 1 << 0x18,
offset_gPalette_143 | 1 << 0x18, offset_gPalette_147 | 1 << 0x18, offset_gPalette_148 | 1 << 0x18,
offset_gPalette_149 | 1 << 0x18, offset_gPalette_150 | 1 << 0x18, offset_gPalette_151 | 1 << 0x18,
offset_gPalette_152 | 1 << 0x18, offset_gPalette_153 | 1 << 0x18, offset_gPalette_154 | 1 << 0x18,
offset_gPalette_155 | 1 << 0x18, offset_gPalette_128 | 1 << 0x18, offset_gPalette_156 | 1 << 0x18,
offset_gPalette_168 | 1 << 0x18, offset_gPalette_169 | 1 << 0x18, offset_gPalette_170 | 1 << 0x18,
offset_gPalette_248 | 1 << 0x18, offset_gPalette_249 | 1 << 0x18, offset_gPalette_250 | 1 << 0x18,
offset_gPalette_251 | 1 << 0x18, offset_gPalette_252 | 1 << 0x18, offset_gPalette_253 | 1 << 0x18,
offset_gPalette_254 | 1 << 0x18, offset_gPalette_255 | 1 << 0x18, offset_gPalette_256 | 1 << 0x18,
offset_gPalette_257 | 1 << 0x18, offset_gPalette_258 | 1 << 0x18, offset_gPalette_259 | 1 << 0x18,
offset_gPalette_260 | 1 << 0x18, offset_gPalette_261 | 1 << 0x18, offset_gPalette_262 | 1 << 0x18,
offset_gPalette_263 | 1 << 0x18, offset_gPalette_264 | 1 << 0x18, offset_gPalette_265 | 1 << 0x18,
offset_gPalette_266 | 1 << 0x18, offset_gPalette_267 | 1 << 0x18, offset_gPalette_268 | 1 << 0x18,
offset_gPalette_269 | 1 << 0x18, offset_gPalette_270 | 1 << 0x18, offset_gPalette_271 | 1 << 0x18,
offset_gPalette_3773 | 1 << 0x18, offset_gPalette_92 | 1 << 0x18, offset_gPalette_85 | 1 << 0x18,
offset_gPalette_86 | 1 << 0x18, offset_gPalette_87 | 1 << 0x18, offset_gPalette_3774 | 1 << 0x18,
offset_gPalette_123 | 1 << 0x18, offset_gPalette_2212 | 1 << 0x18, offset_gPalette_2213 | 1 << 0x18,
offset_gPalette_124 | 1 << 0x18, offset_gPalette_42 | 1 << 0x18, offset_gPalette_235 | 1 << 0x18,
offset_gPalette_236 | 1 << 0x18, offset_gPalette_237 | 1 << 0x18, offset_gPalette_238 | 1 << 0x18,
offset_gPalette_108 | 1 << 0x18, offset_gPalette_93 | 1 << 0x18, offset_gPalette_680 | 1 << 0x18,
offset_gPalette_43 | 1 << 0x18, offset_gPalette_44 | 1 << 0x18, offset_gPalette_45 | 1 << 0x18,
offset_gPalette_46 | 1 << 0x18, offset_gPalette_125 | 1 << 0x18, offset_gPalette_284 | 1 << 0x18,
offset_gPalette_283 | 1 << 0x18, offset_gPalette_285 | 1 << 0x18, offset_gPalette_286 | 1 << 0x18,
offset_gPalette_287 | 1 << 0x18, offset_gPalette_288 | 1 << 0x18, offset_gPalette_289 | 1 << 0x18,
offset_gPalette_290 | 1 << 0x18, offset_gPalette_291 | 1 << 0x18, offset_gPalette_292 | 1 << 0x18,
offset_gPalette_293 | 1 << 0x18, offset_gPalette_294 | 1 << 0x18, offset_gPalette_295 | 1 << 0x18,
offset_gPalette_296 | 1 << 0x18, offset_gPalette_297 | 1 << 0x18, offset_gPalette_2214 | 1 << 0x18,
offset_gPalette_224 | 1 << 0x18, offset_gPalette_225 | 1 << 0x18, offset_gPalette_226 | 1 << 0x18,
offset_gPalette_227 | 1 << 0x18, offset_gPalette_228 | 1 << 0x18, offset_gPalette_229 | 1 << 0x18,
offset_gPalette_1261 | 1 << 0x18, offset_gPalette_318 | 1 << 0x18, offset_gPalette_319 | 1 << 0x18,
offset_gPalette_320 | 1 << 0x18, offset_gPalette_2140 | 1 << 0x18, offset_gPalette_2141 | 1 << 0x18,
offset_gPalette_2142 | 1 << 0x18, offset_gPalette_2159 | 1 << 0x18, offset_gPalette_2160 | 1 << 0x18,
offset_gPalette_2161 | 1 << 0x18, offset_gPalette_2178 | 1 << 0x18, offset_gPalette_2179 | 1 << 0x18,
offset_gPalette_2180 | 1 << 0x18, offset_gPalette_2197 | 1 << 0x18, offset_gPalette_2198 | 1 << 0x18,
offset_gPalette_2199 | 1 << 0x18, offset_gPalette_95 | 1 << 0x18, offset_gPalette_18 | 1 << 0x18,
offset_gPalette_19 | 1 << 0x18, offset_gPalette_20 | 1 << 0x18, offset_gPalette_21 | 1 << 0x18,
offset_gPalette_96 | 1 << 0x18, offset_gPalette_97 | 1 << 0x18, offset_gPalette_98 | 1 << 0x18,
offset_gPalette_99 | 1 << 0x18, offset_gPalette_110 | 1 << 0x18, offset_gPalette_208 | 2 << 0x18,
offset_gPalette_210 | 2 << 0x18, offset_gPalette_233 | 1 << 0x18, offset_gPalette_157 | 1 << 0x18,
offset_gPalette_158 | 1 << 0x18, offset_gPalette_159 | 1 << 0x18, offset_gPalette_160 | 1 << 0x18,
offset_gPalette_161 | 1 << 0x18, offset_gPalette_162 | 1 << 0x18, offset_gPalette_163 | 1 << 0x18,
offset_gPalette_164 | 1 << 0x18, offset_gPalette_165 | 1 << 0x18, offset_gPalette_166 | 1 << 0x18,
offset_gPalette_167 | 1 << 0x18, offset_gPalette_171 | 1 << 0x18, offset_gPalette_172 | 1 << 0x18,
offset_gPalette_173 | 1 << 0x18, offset_gPalette_234 | 1 << 0x18, offset_gPalette_111 | 1 << 0x18,
offset_gPalette_113 | 1 << 0x18, offset_gPalette_114 | 1 << 0x18, offset_gPalette_48 | 1 << 0x18,
offset_gPalette_49 | 1 << 0x18, offset_gPalette_50 | 1 << 0x18, offset_gPalette_51 | 1 << 0x18,
offset_gPalette_52 | 1 << 0x18, offset_gPalette_53 | 1 << 0x18, offset_gPalette_54 | 1 << 0x18,
offset_gPalette_322 | 1 << 0x18, offset_gPalette_299 | 1 << 0x18, offset_gPalette_300 | 1 << 0x18,
offset_gPalette_298 | 1 << 0x18, offset_gPalette_301 | 1 << 0x18, offset_gPalette_303 | 1 << 0x18,
offset_gPalette_304 | 1 << 0x18, offset_gPalette_305 | 1 << 0x18, offset_gPalette_306 | 1 << 0x18,
offset_gPalette_307 | 1 << 0x18, offset_gPalette_55 | 1 << 0x18, offset_gPalette_57 | 1 << 0x18,
offset_gPalette_58 | 1 << 0x18, offset_gPalette_59 | 1 << 0x18, offset_gPalette_60 | 1 << 0x18,
offset_gPalette_61 | 1 << 0x18, offset_gPalette_62 | 1 << 0x18, offset_gPalette_63 | 1 << 0x18,
offset_gPalette_64 | 1 << 0x18, offset_gPalette_65 | 1 << 0x18, offset_gPalette_66 | 1 << 0x18,
offset_gPalette_67 | 1 << 0x18, offset_gPalette_68 | 1 << 0x18, offset_gPalette_69 | 1 << 0x18,
offset_gPalette_70 | 1 << 0x18, offset_gPalette_174 | 1 << 0x18, offset_gPalette_212 | 1 << 0x18,
offset_gPalette_213 | 1 << 0x18, offset_gPalette_214 | 1 << 0x18, offset_gPalette_215 | 1 << 0x18,
offset_gPalette_216 | 1 << 0x18, offset_gPalette_72 | 1 << 0x18, offset_gPalette_78 | 1 << 0x18,
offset_gPalette_73 | 1 << 0x18, offset_gPalette_74 | 1 << 0x18, offset_gPalette_75 | 1 << 0x18,
offset_gPalette_76 | 1 << 0x18, offset_gPalette_77 | 1 << 0x18, offset_gPalette_175 | 1 << 0x18,
offset_gPalette_176 | 1 << 0x18, offset_gPalette_177 | 1 << 0x18, offset_gPalette_178 | 1 << 0x18,
offset_gPalette_179 | 1 << 0x18, offset_gPalette_180 | 1 << 0x18, offset_gPalette_181 | 1 << 0x18,
offset_gPalette_182 | 1 << 0x18, offset_gPalette_183 | 1 << 0x18, offset_gPalette_184 | 1 << 0x18,
offset_gPalette_185 | 1 << 0x18, offset_gPalette_186 | 1 << 0x18, offset_gPalette_187 | 1 << 0x18,
offset_gPalette_188 | 1 << 0x18, offset_gPalette_189 | 1 << 0x18, offset_gPalette_190 | 1 << 0x18,
offset_gPalette_191 | 1 << 0x18, offset_gPalette_192 | 1 << 0x18, offset_gPalette_193 | 1 << 0x18,
offset_gPalette_194 | 1 << 0x18, offset_gPalette_195 | 1 << 0x18, offset_gPalette_196 | 1 << 0x18,
offset_gPalette_197 | 1 << 0x18, offset_gPalette_198 | 1 << 0x18, offset_gPalette_199 | 1 << 0x18,
offset_gPalette_200 | 1 << 0x18, offset_gPalette_201 | 1 << 0x18, offset_gPalette_202 | 1 << 0x18,
offset_gPalette_308 | 1 << 0x18, offset_gPalette_309 | 1 << 0x18, offset_gPalette_310 | 1 << 0x18,
offset_gPalette_311 | 1 << 0x18, offset_gPalette_312 | 1 << 0x18, offset_gPalette_313 | 1 << 0x18,
offset_gPalette_282 | 1 << 0x18, offset_gPalette_217 | 1 << 0x18, offset_gPalette_204 | 1 << 0x18,
offset_gPalette_218 | 2 << 0x18, offset_gPalette_220 | 1 << 0x18, offset_gPalette_221 | 1 << 0x18,
offset_gPalette_222 | 1 << 0x18, offset_gPalette_127 | 1 << 0x18, offset_gPalette_115 | 1 << 0x18,
offset_gPalette_302 | 1 << 0x18, offset_gPalette_274 | 1 << 0x18, offset_gPalette_275 | 1 << 0x18,
offset_gPalette_276 | 1 << 0x18, offset_gPalette_277 | 1 << 0x18, offset_gPalette_278 | 1 << 0x18,
offset_gPalette_279 | 1 << 0x18, offset_gPalette_329 | 1 << 0x18, offset_gPalette_331 | 1 << 0x18,
offset_gPalette_332 | 1 << 0x18, offset_gPalette_116 | 1 << 0x18, offset_gPalette_334 | 1 << 0x18,
offset_gPalette_344 | 1 << 0x18, offset_gPalette_345 | 1 << 0x18, offset_gPalette_346 | 1 << 0x18,
offset_gPalette_347 | 1 << 0x18, offset_gPalette_348 | 1 << 0x18, offset_gPalette_349 | 1 << 0x18,
offset_gPalette_350 | 1 << 0x18, offset_gPalette_71 | 1 << 0x18, offset_gPalette_56 | 1 << 0x18,
offset_gPalette_328 | 1 << 0x18, offset_gPalette_232 | 1 << 0x18, offset_gPalette_25 | 1 << 0x18,
offset_gPalette_26 | 1 << 0x18, offset_gPalette_117 | 1 << 0x18, offset_gPalette_27 | 1 << 0x18,
offset_gPalette_28 | 1 << 0x18, offset_gPalette_29 | 1 << 0x18, offset_gPalette_30 | 1 << 0x18,
offset_gPalette_31 | 1 << 0x18, offset_gPalette_32 | 1 << 0x18, offset_gPalette_280 | 1 << 0x18,
offset_gPalette_281 | 1 << 0x18, offset_gPalette_333 | 1 << 0x18, offset_gPalette_314 | 1 << 0x18,
offset_gPalette_315 | 1 << 0x18, offset_gPalette_316 | 1 << 0x18, offset_gPalette_317 | 1 << 0x18,
offset_gPalette_330 | 1 << 0x18, offset_gPalette_335 | 1 << 0x18, offset_gPalette_336 | 1 << 0x18,
offset_gPalette_337 | 1 << 0x18, offset_gPalette_338 | 1 << 0x18, offset_gPalette_339 | 1 << 0x18,
offset_gPalette_340 | 1 << 0x18, offset_gPalette_341 | 1 << 0x18, offset_gPalette_342 | 1 << 0x18,
offset_gPalette_343 | 1 << 0x18, offset_gPalette_82 | 1 << 0x18, offset_gPalette_223 | 1 << 0x18,
offset_gPalette_240 | 1 << 0x18, offset_gPalette_241 | 1 << 0x18, offset_gPalette_242 | 1 << 0x18,
offset_gPalette_243 | 1 << 0x18, offset_gPalette_244 | 1 << 0x18, offset_gPalette_245 | 1 << 0x18,
offset_gPalette_246 | 1 << 0x18, offset_gPalette_247 | 1 << 0x18, offset_gPalette_272 | 1 << 0x18,
offset_gPalette_273 | 1 << 0x18, offset_gPalette_352 | 1 << 0x18, offset_gPalette_353 | 1 << 0x18,
offset_gPalette_351 | 1 << 0x18, offset_gPalette_126 | 1 << 0x18, offset_gPalette_327 | 1 << 0x18,
offset_gPalette_203 | 1 << 0x18, offset_gPalette_3430 | 1 << 0x18, offset_gPalette_3431 | 1 << 0x18,
offset_gPalette_3432 | 2 << 0x18, offset_gPalette_3434 | 1 << 0x18, offset_gPalette_3435 | 1 << 0x18,
offset_gPalette_3436 | 1 << 0x18, offset_gPalette_9 | 1 << 0x18, offset_gPalette_33 | 1 << 0x18,
offset_gPalette_34 | 1 << 0x18, offset_gPalette_35 | 1 << 0x18, offset_gPalette_36 | 1 << 0x18,
offset_gPalette_37 | 1 << 0x18, offset_gPalette_38 | 1 << 0x18, offset_gPalette_39 | 1 << 0x18,
offset_gPalette_40 | 1 << 0x18, offset_gPalette_41 | 1 << 0x18, offset_gPalette_83 | 1 << 0x18,
offset_gPalette_119 | 1 << 0x18, offset_gPalette_120 | 1 << 0x18, offset_gPalette_121 | 1 << 0x18,
offset_gPalette_81 | 1 << 0x18, offset_gPalette_84 | 1 << 0x18, offset_gPalette_88 | 1 << 0x18,
offset_gPalette_230 | 1 << 0x18,
#ifdef EU
offset_gPalette_2257 | 1 << 0x18, offset_gPalette_2258 | 1 << 0x18,
#else
offset_gPalette_2259 | 1 << 0x18, offset_gPalette_2260 | 1 << 0x18,
#endif
offset_gPalette_10 | 1 << 0x18, offset_gPalette_112 | 1 << 0x18, offset_gPalette_122 | 1 << 0x18,
offset_gPalette_13 | 1 << 0x18,
};
+8 -8
View File
@@ -194,19 +194,19 @@ void sub_080A3198(u32 param_1, u32 param_2) {
{ gUnk_0203510E, BG_TILE_ADDR(0x1a0), gTextGfxBuffer, 0, 0x80, 0xd0, 1, 0, 0, 1, 9, 0, 0, 1, 1 },
};
static const u16 gUnk_08127CC8[4] = {
0x71c,
0x720,
0x721,
TEXT_INDEX(TEXT_WINDCRESTS, 0x1c),
TEXT_INDEX(TEXT_WINDCRESTS, 0x20),
TEXT_INDEX(TEXT_WINDCRESTS, 0x21),
0x0,
};
u16 r4 = gUnk_08127CC8[param_1];
u16 textIndex = gUnk_08127CC8[param_1];
if (gChooseFileState.unk_0x12 != r4) {
gChooseFileState.unk_0x12 = r4;
if (gChooseFileState.unk_0x12 != textIndex) {
gChooseFileState.unk_0x12 = textIndex;
MemClear(gUnk_08127C98[0].dest - 0xf, 0x180);
if (r4 != 0) {
sub_0805F46C(r4, gUnk_08127C98);
if (textIndex != 0) {
ShowTextBox(textIndex, gUnk_08127C98);
}
gScreen.bg0.updated = 1;
+16 -16
View File
@@ -114,7 +114,7 @@ const EnemyDefinition gEnemyDefinitions[] = {
{ 145, 2, { &gHitbox_13 }, 483, { 0, 1, 1, 1 }, 255, 256, 102, 139 }, // TODO sprite index too high
#endif
MULTI_FORM(gEnemyDefinition_30),
{ 236, 1, { &gHitbox_19 }, SPRITE_CROW, { 1, 0, 1, 1 }, 2, 320, 41, 15 },
{ 236, 1, { (Hitbox*)&gHitbox_19 }, SPRITE_CROW, { 1, 0, 1, 1 }, 2, 320, 41, 15 },
MULTI_FORM(gEnemyDefinition_32),
{ 253, 112, { &gHitbox_0 }, SPRITE_BOMBAROSSA, { 1, 1, 1, 1 }, 255, 256, 1, 139 },
MULTI_FORM(gEnemyDefinition_34),
@@ -134,7 +134,7 @@ const EnemyDefinition gEnemyDefinitions[] = {
MULTI_FORM(gEnemyDefinition_42),
{ 366, 0, { &gHitbox_18 }, SPRITE_FLYINGSKULL, { 0, 1, 1, 0 }, 255, 640, 110, 132 },
MULTI_FORM(gEnemyDefinition_44),
{ 236, 0, { &gHitbox_19 }, SPRITE_CROW, { 1, 0, 1, 1 }, 4, 320, 87, 15 },
{ 236, 0, { (Hitbox*)&gHitbox_19 }, SPRITE_CROW, { 1, 0, 1, 1 }, 4, 320, 87, 15 },
MULTI_FORM(gEnemyDefinition_46),
{ 16400, 299, { &gHitbox_0 }, SPRITE_LAKITU, { 0, 1, 0, 1 }, 6, 128, 67, 143 },
{ 16400, 0, { &gHitbox_0 }, SPRITE_LAKITUCLOUDPROJECTILE, { 1, 1, 1, 2 }, 255, 0, 166, 143 },
@@ -157,15 +157,15 @@ const EnemyDefinition gEnemyDefinitions[] = {
MULTI_FORM(gEnemyDefinition_0),
MULTI_FORM(gEnemyDefinition_56),
MULTI_FORM(gEnemyDefinition_57),
{ 444, 0, { &gHitbox_25 }, SPRITE_FIREBALLGUY, { 1, 1, 1, 1 }, 4, 64, 25, 139 },
{ 444, 0, { &gHitbox_26 }, SPRITE_FIREBALLGUY, { 1, 1, 1, 0 }, 1, 64, 25, 139 },
{ 444, 0, { (Hitbox*)&gHitbox_25 }, SPRITE_FIREBALLGUY, { 1, 1, 1, 1 }, 4, 64, 25, 139 },
{ 444, 0, { (Hitbox*)&gHitbox_26 }, SPRITE_FIREBALLGUY, { 1, 1, 1, 0 }, 1, 64, 25, 139 },
MULTI_FORM(gEnemyDefinition_5A),
{ 114, 110, { &gHitbox_0 }, SPRITE_BUSINESSSCRUB, { 0, 0, 1, 1 }, 255, 0, 1, 139 },
{ 0, 0, { &gHitbox_0 }, SPRITE_0, { 0, 0, 0, 1 }, 24, 256, 0, 139 },
{ 16448, 338, { &gHitbox_28 }, SPRITE_GYORGMALE, { 0, 0, 1, 1 }, 12, 256, 27, 139 },
{ 16448, 338, { (Hitbox*)&gHitbox_28 }, SPRITE_GYORGMALE, { 0, 0, 1, 1 }, 12, 256, 27, 139 },
{ 485, 352, { &gHitbox_0 }, SPRITE_CURTAIN, { 0, 1, 1, 1 }, 255, 256, 154, 139 },
{ 418, 320, { &gHitbox_20 }, SPRITE_WRATHEYE, { 1, 0, 1, 0 }, 255, 256, 57, 139 },
{ 498, 0, { &gHitbox_20 }, SPRITE_GYORGCHILD, { 0, 0, 1, 1 }, 3, 256, 32, 15 },
{ 418, 320, { (Hitbox*)&gHitbox_20 }, SPRITE_WRATHEYE, { 1, 0, 1, 0 }, 255, 256, 57, 139 },
{ 498, 0, { (Hitbox*)&gHitbox_20 }, SPRITE_GYORGCHILD, { 0, 0, 1, 1 }, 3, 256, 32, 15 },
#ifdef EU
{ 499, 377, { &gHitbox_22 }, SPRITE_GYORGFEMALEEYE, { 0, 0, 1, 1 }, 255, 256, 30, 139 },
#else
@@ -173,7 +173,7 @@ const EnemyDefinition gEnemyDefinitions[] = {
#endif
{ 500, 376, { &gHitbox_0 }, SPRITE_ENEMY62, { 0, 0, 1, 1 }, 255, 256, 30, 139 },
{ 504, 372, { &gHitbox_0 }, SPRITE_GYORGFEMALEMOUTH, { 0, 0, 1, 1 }, 255, 256, 136, 139 },
{ 16448, 338, { &gHitbox_28 }, SPRITE_GYORGMALE, { 0, 0, 1, 1 }, 36, 256, 0, 139 },
{ 16448, 338, { (Hitbox*)&gHitbox_28 }, SPRITE_GYORGMALE, { 0, 0, 1, 1 }, 36, 256, 0, 139 },
{ 0, 0, { &gHitbox_0 }, SPRITE_0, { 0, 0, 0, 1 }, 255, 256, 0, 139 },
};
@@ -228,9 +228,9 @@ const EnemyDefinition gEnemyDefinition_10[] = {
{ 32, 0, &gUnk_080FD21C, SPRITE_SLUGGULA_2, { 0, 0, 1, 0 }, 3, 0, 0, 139 },
};
const EnemyDefinition gEnemyDefinition_11[] = {
{ 34, 38, &gUnk_080FD22C, SPRITE_PESTO, { 3, 1, 1, 1 }, 4, 64, 119, 15 },
{ 34, 39, &gUnk_080FD22C, SPRITE_PESTO, { 3, 1, 1, 1 }, 4, 64, 119, 15 },
{ 34, 37, &gUnk_080FD22C, SPRITE_PESTO, { 3, 1, 1, 1 }, 4, 64, 119, 15 },
{ 34, 38, (const Hitbox*)&gUnk_080FD22C, SPRITE_PESTO, { 3, 1, 1, 1 }, 4, 64, 119, 15 },
{ 34, 39, (const Hitbox*)&gUnk_080FD22C, SPRITE_PESTO, { 3, 1, 1, 1 }, 4, 64, 119, 15 },
{ 34, 37, (const Hitbox*)&gUnk_080FD22C, SPRITE_PESTO, { 3, 1, 1, 1 }, 4, 64, 119, 15 },
};
const EnemyDefinition gEnemyDefinition_12[] = {
{ 35, 40, &gHitbox_0, SPRITE_PUFFSTOOL, { 1, 1, 1, 0 }, 1, 64, 130, 15 },
@@ -370,11 +370,11 @@ const EnemyDefinition gEnemyDefinition_51[] = {
{ 417, 320, &gHitbox_0, SPRITE_VAATIWRATH_2, { 0, 0, 1, 1 }, 255, 256, 0, 139 },
};
const EnemyDefinition gEnemyDefinition_52[] = {
{ 16400, 320, &gUnk_080FD538, SPRITE_VAATIARM, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, &gUnk_080FD538, SPRITE_VAATIARM_1, { 0, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, &gUnk_080FD538, SPRITE_VAATIARM_1, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, &gUnk_080FD538, SPRITE_VAATIARM_1, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, &gUnk_080FD538, SPRITE_VAATIARM_1, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
{ 16400, 320, (Hitbox*)&gUnk_080FD538, SPRITE_VAATIARM, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, (Hitbox*)&gUnk_080FD538, SPRITE_VAATIARM_1, { 0, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, (Hitbox*)&gUnk_080FD538, SPRITE_VAATIARM_1, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, (Hitbox*)&gUnk_080FD538, SPRITE_VAATIARM_1, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
{ 419, 320, (Hitbox*)&gUnk_080FD538, SPRITE_VAATIARM_1, { 1, 0, 1, 1 }, 255, 256, 57, 139 },
};
const EnemyDefinition gEnemyDefinition_56[] = {
{ 422, 113, &gUnk_080FD488, SPRITE_SLIME, { 3, 1, 1, 1 }, 2, 64, 25, 139 },
+3 -3
View File
@@ -559,7 +559,7 @@ void sub_080262A8(ChuchuBossEntity* this) {
this->unk_84->unk_03 = 3;
gPlayerEntity.animationState = 0;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
SetTile(0x4022, 0x2c8, 1);
}
}
@@ -583,7 +583,7 @@ void sub_08026358(ChuchuBossEntity* this) {
this->unk_84->unk_03++;
gPlayerEntity.animationState = 0;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
} else if (bVar1 < 0x61) {
if (bVar1 < 0x5c) {
gPlayerEntity.animationState = 4;
@@ -661,7 +661,7 @@ void sub_0802650C(ChuchuBossEntity* this) {
void sub_0802653C(ChuchuBossEntity* this) {
if (gRoomControls.reload_flags == 0) {
gRoomControls.unk5 = 4;
gRoomControls.scrollSpeed = 4;
sub_08027B98(this, 0x90, 0xb0, 4, 0xff);
sub_08027548(this, 0);
InitAnimationForceUpdate(super->child, 0);
+2 -2
View File
@@ -361,7 +361,7 @@ void OctorokBoss_Intro_SubAction2(OctorokBossEntity* this) {
this->timer = 60;
gPlayerEntity.spriteSettings.draw |= 1;
gRoomControls.camera_target = &gPlayerEntity;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
}
}
@@ -397,7 +397,7 @@ void OctorokBoss_Intro_SubAction5(OctorokBossEntity* this) {
// Play boss theme, enable control and switch to main action
super->action = ACTION1;
super->subAction = 0;
gRoomControls.unk5 = gPlayerEntity.animationState;
gRoomControls.scrollSpeed = gPlayerEntity.animationState;
OctorokBoss_SetAttackTimer(this);
gPauseMenuOptions.disabled = 0;
SoundReq(BGM_BOSS_THEME);
+27 -9
View File
@@ -1,11 +1,13 @@
#define NENT_DEPRECATED
#include "entity.h"
#include "enemyUtils.h"
#include "definitions.h"
#include "entity.h"
#include "functions.h"
#include "object.h"
#include "save.h"
#include "projectile.h"
#include "object/deathFx.h"
#include "projectile.h"
#include "save.h"
extern void sub_08049CF4(Entity*);
@@ -13,8 +15,24 @@ extern EnemyDefinition gEnemyDefinitions[];
const EnemyDefinition* GetEnemyDefinition(Entity* entity);
bool32 LoadEnemySprite(Entity* entity, const EnemyDefinition* definition);
extern const u16 gUnk_080D3E74[];
extern const u8 gUnk_080D3D94[];
const struct_080D3D94 gUnk_080D3D94[] = {
{ 8, 8 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 64, 64 }, { 64, 64 }, { 64, 64 }, { 4, 4 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 16, 16 },
{ 64, 64 }, { 64, 64 }, { 12, 12 }, { 16, 16 }, { 8, 8 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 10, 10 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 15, 9 },
{ 12, 12 }, { 16, 16 }, { 24, 24 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 60, 60 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 24, 24 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 8, 8 }, { 8, 8 }, { 8, 8 }, { 16, 16 }, { 16, 16 },
{ 16, 16 }, { 8, 8 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
{ 64, 64 }, { 64, 64 }, { 64, 64 }, { 64, 64 },
};
const u16 gUnk_080D3E74[] = { 2373, 1105, 2324, 21568, 4177, 16656, 1365, 21760, 8209, 0, 20480, 5, 0, 0 };
const EnemyDefinition* GetEnemyDefinition(Entity* entity) {
const EnemyDefinition* definition = &gEnemyDefinitions[entity->id];
@@ -96,23 +114,23 @@ bool32 LoadEnemySprite(Entity* entity, const EnemyDefinition* definition) {
void sub_0804A720(GenericEntity* this) {
int iVar2;
const u8* pbVar3;
const struct_080D3D94* pbVar3;
GenericEntityData* ptr;
if ((this->field_0x6c.HALF.HI & 4) != 0) {
return;
}
pbVar3 = &gUnk_080D3D94[super->id * 2];
pbVar3 = &gUnk_080D3D94[super->id];
ptr = (GenericEntityData*)&this->field_0x68;
if (ptr->field_0x7c.BYTES.byte2 == 0) {
this->field_0x6e.HALF.LO = pbVar3[0];
this->field_0x6e.HALF.LO = pbVar3->unk_0;
} else {
this->field_0x6e.HALF.LO = ptr->field_0x7c.BYTES.byte2;
}
if (ptr->field_0x7c.BYTES.byte3 == 0) {
this->field_0x6e.HALF.HI = pbVar3[1];
this->field_0x6e.HALF.HI = pbVar3->unk_1;
} else {
this->field_0x6e.HALF.HI = ptr->field_0x7c.BYTES.byte3;
}
+115 -23
View File
@@ -1,31 +1,121 @@
#include "global.h"
#include "entity.h"
/**
* @file enterPortalSubtask.c
* @ingroup Subtasks
*
* @brief Enter Portal Subtask
*/
#include "enterPortalSubtask.h"
#include "area.h"
#include "main.h"
#include "common.h"
#include "screen.h"
#include "object.h"
#include "entity.h"
#include "fileselect.h"
#include "functions.h"
#include "game.h"
#include "fileselect.h"
#include "main.h"
#include "object.h"
#include "screen.h"
#include "subtask.h"
extern void ClearArmosData(void);
extern void sub_080300C4(void);
extern u16 gUnk_020178E0[];
extern u8 gUnk_02017700[];
extern void (*const gUnk_080D4120[])(void);
extern void (*const gUnk_080D412C[])(void);
extern const u16 gUnk_080D4140[];
extern const u8 gUnk_080D4138[];
extern const EntityData* gUnk_080D4110[];
bool32 sub_0804AD18(void);
void sub_0804AD6C(RoomControls*);
void sub_080A71F4(const ScreenTransitionData*);
bool32 sub_0804ACA8(void);
// Entities spawned inside the portal transition cutscene.
const EntityData gUnk_080D3E90[] = {
{ OBJECT, 15, PORTAL_FALLING_PLAYER, 0, 0, 132, 156, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 0, 6, 120, 208, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 1, 1, 132, 160, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 2, 2, 96, 192, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 3, 3, 128, 208, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 5, 0, 120, 104, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 6, 1, 216, 200, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 7, 2, 120, 292, 0 },
{ OBJECT, 15, PORTAL_MUSHROOM_STALKS, 8, 3, 17, 200, 0 },
{ 0xff, 0, 0, 0, 0, 0, 0, 0 },
};
const EntityData gUnk_080D3F30[] = {
{ OBJECT, 15, PORTAL_FALLING_PLAYER, 0, 0, 132, 156, 0 }, //
{ OBJECT, 15, MACRO_CRYSTAL, 0, 6, 120, 200, 0 },
{ OBJECT, 15, MACRO_CRYSTAL, 1, 3, 132, 160, 0 },
{ OBJECT, 15, MACRO_CRYSTAL, 2, 2, 96, 192, 0 },
{ OBJECT, 15, MACRO_CRYSTAL, 3, 1, 128, 208, 0 },
{ OBJECT, 15, MACRO_CRYSTAL, 5, 0, 120, 104, 0 },
{ OBJECT, 15, MACRO_CRYSTAL, 6, 1, 216, 200, 0 },
{ OBJECT, 15, MACRO_CRYSTAL, 7, 2, 120, 292, 0 },
{ OBJECT, 15, MACRO_CRYSTAL, 8, 3, 17, 200, 0 },
{ 0xff, 0, 0, 0, 0, 0, 0, 0 },
};
const EntityData gUnk_080D3FD0[] = {
{ OBJECT, 15, PORTAL_FALLING_PLAYER, 0, 0, 132, 156, 0 },
{ OBJECT, 15, MACRO_LEAF, 0, 6, 120, 208, 0 },
{ OBJECT, 15, MACRO_LEAF, 1, 1, 132, 160, 0 },
{ OBJECT, 15, MACRO_LEAF, 2, 2, 96, 192, 0 },
{ OBJECT, 15, MACRO_LEAF, 3, 3, 128, 208, 0 },
{ OBJECT, 15, MACRO_LEAF, 5, 0, 120, 104, 0 },
{ OBJECT, 15, MACRO_LEAF, 6, 1, 216, 200, 0 },
{ OBJECT, 15, MACRO_LEAF, 7, 2, 120, 300, 0 },
{ OBJECT, 15, MACRO_LEAF, 8, 3, 17, 200, 0 },
{ 0xff, 0, 0, 0, 0, 0, 0, 0 },
};
const EntityData gUnk_080D4070[] = {
{ OBJECT, 15, PORTAL_FALLING_PLAYER, 0, 0, 132, 156, 0 },
{ OBJECT, 15, MACRO_LEAF, 9, 6, 120, 208, 0 },
{ OBJECT, 15, MACRO_LEAF, 10, 1, 132, 160, 0 },
{ OBJECT, 15, MACRO_LEAF, 11, 2, 96, 192, 0 },
{ OBJECT, 15, MACRO_LEAF, 12, 3, 128, 208, 0 },
{ OBJECT, 15, MACRO_LEAF, 14, 0, 120, 104, 0 },
{ OBJECT, 15, MACRO_LEAF, 15, 1, 216, 200, 0 },
{ OBJECT, 15, MACRO_LEAF, 16, 2, 120, 300, 0 },
{ OBJECT, 15, MACRO_LEAF, 17, 3, 17, 200, 0 },
{ 0xff, 0, 0, 0, 0, 0, 0, 0 },
};
const EntityData* const gUnk_080D4110[] = {
gUnk_080D3E90,
gUnk_080D3F30,
gUnk_080D3FD0,
gUnk_080D4070,
};
void sub_0804AAD4(void);
void sub_0804AB04(void);
void sub_0804AB24(void);
void Subtask_PortalCutscene_0(void);
void Subtask_PortalCutscene_1(void);
void Subtask_PortalCutscene_2(void);
void (*const gUnk_080D4120[])(void) = {
sub_0804AAD4,
sub_0804AB04,
sub_0804AB24,
};
void (*const Subtask_PortalCutscene_Functions[])(void) = {
Subtask_PortalCutscene_0,
Subtask_PortalCutscene_1,
Subtask_PortalCutscene_2,
};
const struct_080D4138 gUnk_080D4138[] = {
{ 95, 39 },
{ 96, 40 },
{ 97, 41 },
{ 98, 42 },
};
// x, y values. But they cannot be put in a struct matching?
const s16 gUnk_080D4140[] = {
0, -22, //
22, 0, //
0, 22, //
-22, 0,
};
bool32 CheckInitPortal(void) {
if (gArea.portal_in_use) {
gMain.substate = GAMEMAIN_MINISHPORTAL;
@@ -73,10 +163,10 @@ void sub_0804AB24(void) {
}
void Subtask_PortalCutscene(void) {
gUnk_080D412C[gArea.filler3[0]]();
Subtask_PortalCutscene_Functions[gArea.filler3[0]]();
}
void sub_0804AB70(void) {
const u8* ptr;
void Subtask_PortalCutscene_0(void) {
const struct_080D4138* ptr;
RoomControls* controls;
u32 portalId;
@@ -92,19 +182,19 @@ void sub_0804AB70(void) {
if ((portalId == 2) && (gUI.roomControls.area != 2)) {
portalId = 3;
}
ptr = &gUnk_080D4138[portalId * 2];
LoadPaletteGroup(ptr[0]);
LoadGfxGroup(ptr[1]);
ptr = &gUnk_080D4138[portalId];
LoadPaletteGroup(ptr->paletteGroup);
LoadGfxGroup(ptr->gfxGroup);
MemCopy(&gUnk_02017700, gUnk_02017700 + 0x240, 0x20);
gUsedPalettes |= 0x200000;
EraseAllEntities();
LoadRoomEntityList((EntityData*)gUnk_080D4110[portalId]);
LoadRoomEntityList(gUnk_080D4110[portalId]);
ResetSystemPriority();
gArea.filler3[0]++;
SetFade(FADE_INSTANT, 8);
}
void sub_0804AC1C(void) {
void Subtask_PortalCutscene_1(void) {
s32 tmp;
UpdateEntities();
@@ -139,7 +229,7 @@ bool32 sub_0804ACA8(void) {
}
}
void sub_0804ACC8(void) {
void Subtask_PortalCutscene_2(void) {
if (gFadeControl.active == 0) {
SetGlobalFlag(gArea.portal_type + ENTRANCE_0);
sub_0804AD6C(&gUI.roomControls);
@@ -192,3 +282,5 @@ void sub_0804AD6C(RoomControls* controls) {
ClearArmosData();
sub_080300C4();
}
// TODO end of portal cutscene subtask?
+13 -3
View File
@@ -6,8 +6,6 @@
#include "npc.h"
#include "manager/diggingCaveEntranceManager.h"
extern u8 gUnk_081091F8[];
extern u8 gUnk_081091EE[];
extern u8 gUpdateVisibleTiles;
extern Manager gUnk_02033290;
void UpdatePlayerInput(void);
@@ -36,6 +34,11 @@ typedef struct {
} UpdateContext;
extern UpdateContext gUpdateContext;
// List by entity kind.
const u8 gUnk_081091E4[] = {
8, 1, 8, 4, 5, 8, 6, 7, 2, 6,
};
void sub_0805E248(void) {
s32 v0;
@@ -64,9 +67,16 @@ void sub_0805E248(void) {
gUpdateVisibleTiles = 0;
}
const u8 gUnk_081091EE[] = {
0, 1, 0, 0, 0, 0, 1, 1, 1, 1,
};
const u8 gUnk_081091F8[] = {
0, 3, 0, 3, 3, 0, 3, 3, 3, 3,
};
void SetDefaultPriorityForKind(Entity* e) {
u8 r3 = gRoomTransition.entity_update_type;
u8* array = gUnk_081091F8;
const u8* array = gUnk_081091F8;
if (r3 != 2) {
array = gUnk_081091EE;
+6 -1
View File
@@ -172,12 +172,17 @@ static u32 sub_080501C0(FadeControl* ctl) {
return !!((s16)ctl->sustain ^ (s16)ctl->progress);
}
const u16 gMosaicSizes[] = {
0, 0x1111, 0x2222, 0x3333, 0x4444, 0x5555, 0x6666, 0x7777,
0x8888, 0x9999, 0xaaaa, 0xbbbb, 0xcccc, 0xdddd, 0xeeee, 0xffff,
};
static u32 sub_08050230(FadeControl* ctl) {
u32 type = ctl->type;
u32 idx = ((s16)ctl->progress >> 4) & 0xF;
if (type & 1)
idx = 0xF - idx;
gScreen.controls.mosaicSize = gUnk_080FC3C4[idx];
gScreen.controls.mosaicSize = gMosaicSizes[idx];
if (ctl->progress != 0)
return 1;
+286 -9
View File
@@ -4,12 +4,14 @@
*
* @brief File select task
*/
#include "fileselect.h"
#include "common.h"
#include "fileselect.h"
#include "figurineMenu.h"
#include "functions.h"
#include "game.h"
#include "item.h"
#include "kinstone.h"
#include "main.h"
#include "menu.h"
#include "message.h"
@@ -44,6 +46,190 @@ typedef enum {
RESULT_ASCII = 1,
} CharResult;
const struct_080FC3E4 gUnk_080FC3E4[] = {
{ 0, 0, 128, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
#ifdef EU
{ 0, 0, 0, 1 },
#else
{ 0, 0, 2, 1 },
#endif
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, KINSTONE_2C, UNK_6_10, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 4, 1 },
{ 0, 0, 7, 1 },
{ 0, 0, 3, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 4, 1 },
#ifdef EU
{ 0, 0, 2, 1 },
#else
{ 0, 0, 3, 1 },
#endif
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
#if defined(EU) || defined(JP)
{ 0, 0x12, UNK_6_40, 1 },
#else
{ 0, 5, UNK_6_20, 1 },
#endif
{ 0, 0, 0, 1 },
{ FLAG_BANK_4, YAMADOUKUTU_0E_SENNIN, UNK_6_40, 1 },
{ 0, 0, 3, 1 },
{ 0, 0, 5, 1 },
{ 0, 0, 5, 1 },
{ 0, 0, 3, 1 },
{ 0, 0, 1, 1 },
{ 0, 0, 3, 1 },
{ 0, 0, 5, 1 },
{ 0, 0, 3, 1 },
{ 0, 0, 2, 1 },
{ 0, 0, 2, 1 },
{ 0, 0, 2, 1 },
{ 0, 0, UNK_6_20, 1 },
{ 0, KINSTONE_30, UNK_6_10, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 0, 1 },
{ 0, 0, 4, 1 },
{ 0, 0, 4, 1 },
{ 0, 0, 3, 1 },
{ 0, 0, 3, 1 },
{ FLAG_BANK_4, GORON_DOUKUTU_APPEAR, UNK_6_40, 1 },
{ 0, 0, 3, 1 },
{ 0, 0, 3, 0 },
{ 0, 0, 4, 0 },
{ 0, 0, 7, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 2, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 4, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 4, 0 },
{ 0, 0, 3, 0 },
{ 0, 0, 3, 0 },
{ 0, 0, 6, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 7, 0 },
#ifdef EU
{ 0, 0, 0, 0 },
#else
{ 0, 0, 2, 0 },
#endif
{ 0, KINSTONE_33, UNK_6_10, 1 },
{ 0, 1, UNK_6_20, 0 },
{ 0, 0, 0, 2 },
{ 0, 0, 4, 2 },
{ 0, 0, 4, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 5, 2 },
{ 0, 0, 7, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 3, 3 },
{ 0, 0, 7, 3 },
{ 0, 0, 0, 2 },
#ifdef EU
{ 0, 0, 3, 2 },
{ 0, 0, 6, 2 },
#else
{ 0, 0, 6, 2 },
{ 0, 0, 3, 2 },
#endif
{ 0, 0, 5, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 4, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 7, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 7, 3 },
{ 0, 0, 0, 2 },
{ 0, 0, 2, 2 },
{ 0, 0, 2, 2 },
{ 0, 0, 6, 2 },
{ 0, 0, 4, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 7, 2 },
{ 0, 0, 7, 2 },
{ 0, 0, 6, 2 },
{ 0, 0, 0, 2 },
{ 0, 2, UNK_6_20, 3 },
{ 0, 3, UNK_6_20, 3 },
{ 0, 4, UNK_6_20, 3 },
{ 0, 0, 2, 2 },
{ 0, 0, 6, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 0, 2 },
{ 0, 0, 3, 2 },
{ 0, 0, 0, 3 },
{ 0, 0, 1, 2 },
{ 0, 0, 4, 3 },
{ 0, 0, 7, 3 },
{ 0, 0, 6, 1 },
{ 0, 0, 0, 3 },
{ 0, 0, 1, 3 },
{ 0, 0, 3, 3 },
{ FLAG_BANK_8, LV4_10_BOSSDIE, UNK_6_8, 3 },
{ 0, 0, 9, 0 },
{ 0, 0, 9, 1 },
{ 0, 0, 9, 3 },
{ 0, 0, 9, 3 },
{ 0, 0, 9, 3 },
{ 0, 0, 9, 3 },
{ 0, 0xffff, 0, 1 },
{ 0, 0xffff, 0, 1 },
{ 0, 0xffff, 0, 1 },
};
extern u16 gUnk_02034E4E[];
const Font gUnk_080FC844 = {
gUnk_02034E4E, BG_TILE_ADDR(0x198), gTextGfxBuffer, 0, 96, 224, 1, 1, 0, 1, 3, 0, 0, 1, 0
};
const u16 gUnk_080FC85C[][3] = {
{ 0, 3, SFX_MENU_ERROR },
{ 0, 4, SFX_MENU_ERROR },
{ 1, 5, 0 },
{ 0, 6, SFX_MENU_ERROR },
{ 1, 7, 0 },
{ 1, 8, 0 },
{ 0, 9, SFX_MENU_ERROR },
{ 1, 10, 0 },
{ 1, 11, 0 },
{ 0, 12, SFX_MENU_ERROR },
{ 1, 13, 0 },
{ 0, 14, 0 },
};
static void HandleFileScreenEnter(void);
static void HandleFileScreenActive(void);
static void HandleFileScreenExit(void);
@@ -101,9 +287,9 @@ extern void (*const gUnk_080FC960[])(void);
extern void (*const gUnk_080FC9B0[])(void);
extern void (*const gUnk_080FC9BC[])(void);
extern void (*const gUnk_080FC9C8[])(void);
extern u8 gUnk_080FC970[];
extern u8 gUnk_080FC980[];
extern u8 gUnk_080FC9A0[];
extern const u8 gUnk_080FC970[];
extern const u8 gUnk_080FC980[];
extern const u8 gUnk_080FC9A0[];
static void ResetEmptyOrDeletedSaveFile(u32);
static void sub_0805066C(void);
@@ -111,6 +297,10 @@ static void HideButtonR(void);
static void ShowButtonR(void);
void sub_08051458(void);
void sub_08050888(void);
void sub_080508E4(void);
void sub_08050910(void);
void CreateDialogBox(u32 arg0, u32 arg1) {
u32 sfx;
Font var0;
@@ -119,7 +309,7 @@ void CreateDialogBox(u32 arg0, u32 arg1) {
MemCopy(&gUnk_080FC844, &var0, sizeof(gUnk_080FC844));
sub_08056FEC(arg1, gUnk_020227E8);
var0.gfx_src |= gUnk_080FC85C[arg0][0] << 0xC;
sub_0805F46C(gUnk_080FC85C[arg0][1], &var0);
ShowTextBox(gUnk_080FC85C[arg0][1], &var0);
sfx = gUnk_080FC85C[arg0][2];
if (sfx) {
SoundReq(sfx);
@@ -375,6 +565,12 @@ void sub_08050848(void) {
SetMenuType(1);
}
void (*const gUnk_080FC908[])(void) = {
sub_08050888,
sub_080508E4,
sub_08050910,
};
void sub_0805086C(void) {
gUnk_080FC908[gChooseFileState.subState]();
}
@@ -550,6 +746,9 @@ typedef struct {
extern const u16 gUnk_080FC914[];
const u16 gUnk_080FC914[] = { 0xf251, 0xf251, 0xf251, 0xf251, 0xf251, 0xf251, 0xf251, 0xf251, 0xf251, 0xf251,
0xf24d, 0xf24d, 0xf24d, 0xf24d, 0xf24d, 0xf24d, 0xf24d, 0xf24d, 0xf24d, 0xf24d };
// Handles drawing of hearts
NONMATCH("asm/non_matching/save/sub_08050B3C.inc", void sub_08050B3C(u16* arg0)) {
unk_08050B3C sp;
@@ -620,6 +819,14 @@ NONMATCH("asm/non_matching/save/sub_08050B3C.inc", void sub_08050B3C(u16* arg0))
}
END_NONMATCH
void sub_08050C54(void);
void sub_08050D68(void);
void (*const gUnk_080FC93C[])() = {
sub_08050C54,
sub_08050D68,
};
void HandleFileView(void) {
gUnk_080FC93C[gMenu.menuType]();
sub_08050A64(gMapDataBottomSpecial.unk6);
@@ -687,6 +894,15 @@ void sub_08050D68(void) {
}
}
void sub_08050DB8(void);
void sub_08050DE4(void);
void sub_08050E88(void);
void (*const gUnk_080FC944[])(void) = {
sub_08050DB8,
sub_08050DE4,
sub_08050E88,
};
void HandleFileLanguageSelect(void) {
gUnk_080FC944[gMenu.menuType]();
}
@@ -748,6 +964,17 @@ void sub_08050E88(void) {
SetFileSelectState(0);
}
void sub_08050EB8(void);
void sub_08050EF4(void);
void sub_08050FFC(void);
void sub_0805103C(void);
void (*const gUnk_080FC950[])(void) = {
sub_08050EB8,
sub_08050EF4,
sub_08050FFC,
sub_0805103C,
};
void HandleFileOptions(void) {
gUnk_080FC950[gMenu.menuType]();
}
@@ -863,6 +1090,17 @@ void sub_0805103C(void) {
}
}
void sub_08051090(void);
void sub_080610B8(void);
void sub_0805138C(void);
void sub_0805144C(void);
void (*const gUnk_080FC960[])(void) = {
sub_08051090,
sub_080610B8,
sub_0805138C,
sub_0805144C,
};
void HandleFileNew(void) {
gUnk_080FC960[gMenu.menuType]();
}
@@ -877,13 +1115,23 @@ void sub_08051090(void) {
SetMenuType(1);
}
const u8 gUnk_080FC970[] = {
1, 2, 3, 5, 8, 0, 0, 0, 1, 2, 5, 8, 0, 0, 0, 0,
};
const u8 gUnk_080FC980[] = {
0, 0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0,
};
const u8 gUnk_080FC9A0[] = {
1, 3, 6, 8, 11, 0, 0, 0, 1, 4, 7, 11, 11, 0, 0, 0,
};
void sub_080610B8(void) {
u8 uVar7;
s32 uVar6;
s32 tmp4;
u8* puVar3;
u8* puVar4;
u8* puVar5;
const u8* puVar3;
const u8* puVar4;
const u8* puVar5;
s32 iVar4;
u8 bVar2;
u32 tmp1;
@@ -1060,6 +1308,15 @@ void sub_08051358(void) {
}
}
void sub_080513A8(void);
void sub_080513C0(void);
void sub_0805141C(void);
void (*const gUnk_080FC9B0[])(void) = {
sub_080513A8,
sub_080513C0,
sub_0805141C,
};
void sub_0805138C(void) {
gUnk_080FC9B0[gMenu.overlayType]();
}
@@ -1209,12 +1466,21 @@ void sub_08051574(u32 sfx) {
sub_0805070C();
}
void sub_080515C8(void);
void sub_080515D4(void);
void sub_080516E0(void);
void (*const gUnk_080FC9BC[])(void) = {
sub_080515C8,
sub_080515D4,
sub_080516E0,
};
void HandleFileDelete(void) {
gUnk_080FC9BC[gMenu.menuType]();
sub_08050A64(gMapDataBottomSpecial.unk6);
}
void sub_080515c8(void) {
void sub_080515C8(void) {
SetMenuType(1);
}
@@ -1264,6 +1530,17 @@ void sub_080516E0(void) {
}
}
void sub_08051738(void);
void sub_080517EC(void);
void sub_08051874(void);
void sub_080518E4(void);
void (*const gUnk_080FC9C8[])(void) = {
sub_08051738,
sub_080517EC,
sub_08051874,
sub_080518E4,
};
void HandleFileCopy(void) {
gUnk_080FC9C8[gMenu.menuType]();
sub_08050A64(gMapDataBottomSpecial.unk6);
+11 -2485
View File
File diff suppressed because it is too large Load Diff
+503
View File
@@ -0,0 +1,503 @@
// TODO belongs to game.c, but spriteAnimations332.s is before.
// maybe also signals code that no longer belongs to game.c?
#include "common.h"
#include "flags.h"
#include "game.h"
#include "item.h"
#include "kinstone.h"
#include "room.h"
// extern const u8 gUnk_080FE1B4[];
// const u8 gUnk_080FE1B4[] = {0, 84, 85, 86, 95, 96, 93, 94, 63, 252, 253, 254, 255, 0, 0, 0,0,};
const u8 gUnk_080FE1B4[] = {
ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY,
ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED,
ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
};
const u8 gUnk_080FE1C6[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 9, 10, 10, 11, 12, 13, 14, 15, 8, 15, 1, 8,
};
const u8 gUnk_080FE1DD[] = {
110, 111, 112, 112, 110, 111, 111, 112, 110, 110, 112, 111, 112, 111, 110, 110, 110, 111, 112, 112, 110, 111,
111, 112, 110, 110, 112, 111, 112, 111, 110, 111, 110, 111, 112, 112, 110, 111, 111, 112, 110, 110, 112, 111,
112, 111, 110, 112, 110, 111, 112, 112, 110, 111, 111, 112, 110, 110, 112, 111, 112, 111, 110, 0, 113, 114,
113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114,
113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114,
113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 113, 114, 115, 116, 117, 117,
115, 116, 116, 117, 115, 115, 117, 116, 117, 116, 115, 115, 115, 116, 117, 117, 115, 116, 116, 117, 115, 115,
117, 116, 117, 116, 115, 116, 115, 116, 117, 117, 115, 116, 116, 117, 115, 115, 117, 116, 117, 116, 115, 117,
115, 116, 117, 117, 115, 116, 116, 117, 115, 115, 117, 116, 117, 116, 115, 0, 0, 0, 0,
};
void Subtask_WorldEvent_Init(void);
void Subtask_WorldEvent_Update(void);
void Subtask_WorldEvent_End(void);
void (*const gUnk_080FE2A0[])(void) = {
Subtask_WorldEvent_Init,
Subtask_WorldEvent_Update,
Subtask_WorldEvent_End,
};
void WorldEvent_0(void);
void WorldEvent_1(void);
void WorldEvent_2(void);
void WorldEvent_3(void);
void WorldEvent_4(void);
void WorldEvent_5(void);
void WorldEvent_6(void);
void WorldEvent_7(void);
void WorldEvent_8(void);
void WorldEvent_9(void);
void WorldEvent_Beanstalk(void);
void WorldEvent_11(void);
void WorldEvent_12(void);
void WorldEvent_13(void);
void WorldEvent_14(void);
void WorldEvent_15(void);
void WorldEvent_16(void);
void WorldEvent_17(void);
void WorldEvent_17(void);
void WorldEvent_19(void);
void WorldEvent_20(void);
void WorldEvent_21(void);
void WorldEvent_22(void);
void WorldEvent_23(void);
void WorldEvent_24(void);
void WorldEvent_25(void);
void (*const gWorldEventFunctions[])(void) = {
WorldEvent_0, WorldEvent_1, WorldEvent_2, WorldEvent_3, WorldEvent_4, WorldEvent_5,
WorldEvent_6, WorldEvent_7, WorldEvent_8, WorldEvent_9, WorldEvent_Beanstalk, WorldEvent_11,
WorldEvent_12, WorldEvent_13, WorldEvent_14, WorldEvent_15, WorldEvent_16, WorldEvent_17,
WorldEvent_17, WorldEvent_19, WorldEvent_20, WorldEvent_21, WorldEvent_22, WorldEvent_23,
WorldEvent_24, WorldEvent_25, WorldEvent_0, WorldEvent_0, WorldEvent_0,
};
// Indexed by worldEventId of gKinstoneWorldEvents
const WorldEvent gWorldEvents[] = {
{ WORLD_EVENT_TYPE_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_1, 0, AREA_RUINS, ROOM_RUINS_BELOW_FORTRESS_ENTRANCE, 128, 112, 248, 216, 728, 3112, CND_1,
LOCAL_BANK_0, OUGONTEKI_A },
{ WORLD_EVENT_TYPE_1, 1, AREA_MT_CRENEL, ROOM_MT_CRENEL_CENTER, 384, 192, 504, 280, 488, 1112, CND_1, LOCAL_BANK_0,
OUGONTEKI_B },
{ WORLD_EVENT_TYPE_1, 2, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 480, 80, 600, 168, 600, 1848, CND_1,
LOCAL_BANK_0, OUGONTEKI_C },
{ WORLD_EVENT_TYPE_1, 3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_NORTH, 0, 352, 120, 440, 2616, 2600,
CND_1, LOCAL_BANK_0, OUGONTEKI_D },
{ WORLD_EVENT_TYPE_1, 4, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 768, 160, 936, 248, 2424, 440, CND_1,
LOCAL_BANK_0, OUGONTEKI_E },
{ WORLD_EVENT_TYPE_1, 5, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 224, 144, 344, 232, 2840, 472, CND_1, LOCAL_BANK_0,
OUGONTEKI_F },
{ WORLD_EVENT_TYPE_1, 6, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE, 96, 368, 216, 456, 600, 680,
CND_1, LOCAL_BANK_0, OUGONTEKI_G },
{ WORLD_EVENT_TYPE_1, 7, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 192, 96, 328, 184, 3304, 2344, CND_1,
LOCAL_BANK_0, OUGONTEKI_H },
{ WORLD_EVENT_TYPE_1, 8, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_CENTER, 176, 0, 312, 88, 1320, 2888,
CND_1, LOCAL_BANK_0, OUGONTEKI_I },
{ WORLD_EVENT_TYPE_2, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_NORTH, 80, 288, 200, 376, 2696, 2536,
CND_1, LOCAL_BANK_1, KAKERA_TAKARA_A },
{ WORLD_EVENT_TYPE_2, 0, AREA_CRENEL_MINISH_PATHS, ROOM_CRENEL_MINISH_PATHS_RAIN, 272, 16, 392, 88, 744, 152, CND_1,
LOCAL_BANK_3, KAKERA_TAKARA_B },
{ WORLD_EVENT_TYPE_2, 0, AREA_CRENEL_MINISH_PATHS, ROOM_CRENEL_MINISH_PATHS_SPRING_WATER, 0, 48, 168, 136, 872,
1432, CND_1, LOCAL_BANK_3, KAKERA_TAKARA_C },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_PATHS, ROOM_MINISH_PATHS_SCHOOLYARD, 0, 240, 120, 328, 2408, 1608, CND_1,
LOCAL_BANK_3, KAKERA_TAKARA_D },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 0, 112, 104, 200, 3080, 2360, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_E },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_PATHS, ROOM_MINISH_PATHS_LON_LON_RANCH, 0, 288, 120, 376, 2968, 1544, CND_1,
LOCAL_BANK_3, KAKERA_TAKARA_F },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_PATHS, ROOM_MINISH_PATHS_MINISH_VILLAGE, 0, 416, 104, 504, 3448, 3064, CND_1,
LOCAL_BANK_3, KAKERA_TAKARA_G },
{ WORLD_EVENT_TYPE_2, 0, AREA_CRENEL_MINISH_PATHS, ROOM_CRENEL_MINISH_PATHS_MELARI, 208, 16, 344, 104, 616, 504,
CND_1, LOCAL_BANK_3, KAKERA_TAKARA_H },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_PATHS, ROOM_MINISH_PATHS_LAKE_HYLIA, 0, 640, 104, 760, 3896, 2024, CND_1,
LOCAL_BANK_3, KAKERA_TAKARA_I },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 0, 576, 88, 664, 3064, 2824, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_J },
{ WORLD_EVENT_TYPE_2, 0, AREA_RUINS, ROOM_RUINS_FORTRESS_ENTRANCE, 288, 80, 488, 168, 968, 2808, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_K },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 768, 496, 904, 584, 3880, 2744, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_L },
{ WORLD_EVENT_TYPE_2, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS, 240, 0, 392, 56, 1400, 1256, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_M },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 544, 640, 664, 728, 3640, 2888, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_N },
{ WORLD_EVENT_TYPE_2, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 48, 320, 200, 360, 3176, 2520, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_O },
{ WORLD_EVENT_TYPE_2, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 656, 272, 776, 360, 2264, 2840,
CND_1, LOCAL_BANK_1, KAKERA_TAKARA_P },
{ WORLD_EVENT_TYPE_2, 0, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 0, 0, 56, 88, 1064, 280, CND_1, LOCAL_BANK_1,
KAKERA_TAKARA_Q },
{ WORLD_EVENT_TYPE_2, 0, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 240, 0, 424, 88, 1432, 280, CND_1, LOCAL_BANK_1,
KAKERA_TAKARA_R },
{ WORLD_EVENT_TYPE_2, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS, 144, 352, 280, 440, 1288, 1640,
CND_1, LOCAL_BANK_1, KAKERA_TAKARA_S },
{ WORLD_EVENT_TYPE_2, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 0, 0, 104, 72, 1592, 792, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_T },
{ WORLD_EVENT_TYPE_2, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH, 48, 0, 168, 40, 2664, 1240, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_U },
{ WORLD_EVENT_TYPE_2, 0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 240, 96, 360, 184, 2856, 376, CND_1, LOCAL_BANK_1,
KAKERA_TAKARA_V },
{ WORLD_EVENT_TYPE_2, 0, AREA_MT_CRENEL, ROOM_MT_CRENEL_WALL_CLIMB, 48, 288, 184, 376, 184, 600, CND_1,
LOCAL_BANK_1, KAKERA_TAKARA_W },
{ WORLD_EVENT_TYPE_2, 0, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 0, 0, 120, 88, 120, 1288, CND_1, LOCAL_BANK_1,
KAKERA_TAKARA_X },
{ WORLD_EVENT_TYPE_2, 0, AREA_RUINS, ROOM_RUINS_LADDER_TO_TEKTITES, 0, 0, 136, 88, 376, 3096, CND_1, LOCAL_BANK_1,
KAKERA_TAKARA_Y },
{ WORLD_EVENT_TYPE_0, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 0, 0, 0, 0, 0, 0, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_3, 0, AREA_RUINS, ROOM_RUINS_ENTRANCE, 0, 48, 40, 136, 40, 2776, CND_2, 0,
ITEM_ARROW_BUTTERFLY },
{ WORLD_EVENT_TYPE_3, 1, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 304, 448, 424, 520, 424, 2200, CND_2, 0,
ITEM_DIG_BUTTERFLY },
{ WORLD_EVENT_TYPE_3, 2, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 0, 136, 56, 216, 1064, 408, CND_2, 0,
ITEM_SWIM_BUTTERFLY },
#if defined(EU) || defined(JP) || defined(DEMO_JP)
{ WORLD_EVENT_TYPE_4, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS, 112, 160, 264, 264, 1272, 1432,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_4, 0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 352, 400, 488, 520, 3704, 1688, CND_0, 0, 0 },
#ifdef DEMO_JP
{ WORLD_EVENT_TYPE_4, 0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 160, 576, 232, 664, 2728, 824, CND_1, LOCAL_BANK_3,
MOGURA_41_T3 }, // same as USA
#else
{ WORLD_EVENT_TYPE_4, 0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 160, 576, 232, 664, 2728, 824, CND_0, 0, 0 },
#endif
{ WORLD_EVENT_TYPE_5, 132, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 656, 0, 776, 72, 2264, 264, CND_0, 0, 0 },
#ifdef DEMO_JP
{ WORLD_EVENT_TYPE_5, 1, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH, 384, 440, 504, 520, 3000, 1720, CND_1,
LOCAL_BANK_4, 0x4c }, // TODO differs from USA
#else
{ WORLD_EVENT_TYPE_5, 1, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH, 384, 440, 504, 520, 3000, 1720, CND_0,
0, 0 },
#endif
{ WORLD_EVENT_TYPE_5, 2, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 0, 200, 88, 280, 1576, 2760,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_5, 3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS, 0, 600, 56, 680, 1064, 1880, CND_0,
0, 0 },
{ WORLD_EVENT_TYPE_5, 128, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 128, 0, 232, 72, 1720, 264, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 112, 224, 216, 296, 1240, 2488,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 56, 32, 168, 88, 1192, 2280,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 240, 448, 392, 552, 1416, 2744,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 0, 464, 24, 568, 1048, 2760,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 448, 224, 576, 296, 2072, 1016,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 304, 304, 432, 392, 1928, 1112,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 328, 224, 432, 296, 1928, 1016,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 448, 328, 576, 392, 2072, 1112,
CND_0, 0, 0 },
#ifdef DEMO_JP
{ WORLD_EVENT_TYPE_7, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 40, 408, 160, 488, 1160, 2648,
CND_1, LOCAL_BANK_2, URO_19_H0 }, // same as USA
#else
{ WORLD_EVENT_TYPE_7, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 40, 408, 160, 488, 1160, 2648,
CND_0, 0, 0 },
#endif
{ WORLD_EVENT_TYPE_7, 1, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 408, 376, 528, 456, 3496, 2600, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_7, 2, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 632, 232, 752, 312, 2248, 1032,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_7, 3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 768, 472, 928, 552, 2424, 3032,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_RUINS, ROOM_RUINS_TEKTITES, 0, 0, 200, 88, 440, 2936, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 496, 848, 536, 968, 3512, 3128, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 0, 16, 24, 88, 24, 1768, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 48, 424, 152, 520, 3368, 1720, CND_0, 0, 0 },
#ifdef DEMO_JP
// mostly same as USA
{ WORLD_EVENT_TYPE_9, 0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 0, 0, 56, 40, 2552, 232, CND_1, LOCAL_BANK_4,
SUIGEN_DOUKUTU_09_H00 },
{ WORLD_EVENT_TYPE_9, 1, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 112, 304, 240, 392, 1736, 1912, CND_0, 0,
0 }, // same as EU
{ WORLD_EVENT_TYPE_25, 0, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 768, 0, 920, 56, 920, 1752, CND_2, 0,
ITEM_SKILL_FAST_SPIN },
{ WORLD_EVENT_TYPE_25, 1, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 80, 400, 200, 488, 1688, 1208,
CND_2, 0, ITEM_SKILL_LONG_SPIN },
{ WORLD_EVENT_TYPE_25, 2, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 128, 752, 248, 840, 2744, 1032, CND_2, 0,
ITEM_SKILL_FAST_SPLIT },
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 0, 0, 152, 40, 152, 40, CND_5, LOCAL_BANK_1,
BEANDEMO_00 }, // uses different flags due to CND_5
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_BEANSTALK, 432, 0, 552, 88, 3528, 1096, CND_6,
LOCAL_BANK_1, BEANDEMO_01 }, // uses different flags due to CND_6
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_RUINS, ROOM_RUINS_BEANSTALK, 0, 0, 72, 72, 312, 2712, CND_7, LOCAL_BANK_1,
BEANDEMO_02 }, // uses different flags due to CND_7
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_CENTER, 0, 0, 72, 56, 2568,
2760, CND_8, LOCAL_BANK_1, BEANDEMO_03 }, // uses different flags due to CND_8
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_SOUTH, 0, 0, 56, 56, 1064, 3016,
CND_9, LOCAL_BANK_1, BEANDEMO_04 }, // uses different flags due to CND_9
#else
{ WORLD_EVENT_TYPE_9, 0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 0, 0, 56, 40, 2552, 232, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_9, 1, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 112, 304, 240, 392, 1736, 1912, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_25, 0, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 768, 0, 920, 56, 920, 1752, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_25, 1, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 80, 400, 200, 488, 1688, 1208,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_25, 2, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 128, 752, 248, 840, 2744, 1032, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 0, 0, 152, 40, 152, 40, CND_0, LOCAL_BANK_1,
BEANDEMO_00 }, // uses different flags due to CND_5
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_BEANSTALK, 432, 0, 552, 88, 3528, 1096, CND_0,
LOCAL_BANK_1, BEANDEMO_01 }, // uses different flags due to CND_6
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_RUINS, ROOM_RUINS_BEANSTALK, 0, 0, 72, 72, 312, 2712, CND_0, LOCAL_BANK_1,
BEANDEMO_02 }, // uses different flags due to CND_7
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_CENTER, 0, 0, 72, 56, 2568,
2760, CND_0, LOCAL_BANK_1, BEANDEMO_03 }, // uses different flags due to CND_8
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_SOUTH, 0, 0, 56, 56, 1064, 3016,
CND_0, LOCAL_BANK_1, BEANDEMO_04 }, // uses different flags due to CND_9
#endif
{ WORLD_EVENT_TYPE_11, 0, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 0, 48, 88, 152, 88, 1832, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_11, 1, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 0, 160, 40, 232, 40, 1912, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_11, 2, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 96, 664, 200, 776, 200, 2456, CND_0, 0, 0 },
#ifdef DEMO_JP
// same as USA
{ WORLD_EVENT_TYPE_12, 0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 624, 784, 760, 952, 2184, 2360, CND_1,
LOCAL_BANK_2, 208 }, // TODO
{ WORLD_EVENT_TYPE_13, 0, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_CARPENTER, 0, 32, 120, 112, 1560, 1944,
CND_1, LOCAL_BANK_2, 207 }, // TODO
#else
{ WORLD_EVENT_TYPE_12, 0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 624, 784, 760, 952, 2184, 2360, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_13, 0, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_CARPENTER, 0, 32, 120, 112, 1560, 1944,
CND_0, 0, 0 },
#endif
{ WORLD_EVENT_TYPE_14, 0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 768, 736, 904, 824, 2392, 2344, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_15, 0, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 240, 96, 392, 136, 1400, 360, CND_0,
LOCAL_BANK_1, HAKA_BOSEKI_00 }, // uses different flags due to CND_10
{ WORLD_EVENT_TYPE_16, 0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 768, 160, 736, 232, 2040, 2040, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_17, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH, 0, 800, 136, 856, 2624, 2056, CND_0,
0, 0 },
{ WORLD_EVENT_TYPE_18, 1, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 464, 120, 440, 2632, 2056, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_18, 2, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 288, 120, 280, 2632, 2056, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_18, 3, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 288, 120, 280, 2632, 2056, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_18, 4, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 144, 120, 136, 2632, 2056, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_18, 5, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 144, 120, 136, 2632, 2056, CND_0, 0, 0 },
#else
{ WORLD_EVENT_TYPE_4, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS, 112, 160, 264, 264, 1272, 1432,
CND_1, LOCAL_BANK_4, KS_B01 },
{ WORLD_EVENT_TYPE_4, 0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 352, 400, 488, 520, 3704, 1688, CND_1, LOCAL_BANK_3,
MOGURA_01_T0 },
{ WORLD_EVENT_TYPE_4, 0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 160, 576, 232, 664, 2728, 824, CND_1, LOCAL_BANK_3,
MOGURA_41_T3 },
{ WORLD_EVENT_TYPE_5, 132, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 656, 0, 776, 72, 2264, 264, CND_1,
LOCAL_BANK_3, IZUMIGARE_00_H00 },
{ WORLD_EVENT_TYPE_5, 1, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH, 384, 440, 504, 520, 3000, 1720, CND_1,
LOCAL_BANK_4, SOUGEN_DOUKUTU_0F_T00 },
{ WORLD_EVENT_TYPE_5, 2, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 0, 200, 88, 280, 1576, 2760,
CND_1, LOCAL_BANK_4, KS_C37 },
{ WORLD_EVENT_TYPE_5, 3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS, 0, 600, 56, 680, 1064, 1880, CND_1,
LOCAL_BANK_4, KS_C12 },
{ WORLD_EVENT_TYPE_5, 128, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 128, 0, 232, 72, 1720, 264, CND_1,
LOCAL_BANK_3, KS_C02 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 112, 224, 216, 296, 1240, 2488,
CND_1, LOCAL_BANK_1, SOUGEN_08_T00 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 56, 32, 168, 88, 1192, 2280,
CND_1, LOCAL_BANK_1, KS_C21 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 240, 448, 392, 552, 1416, 2744,
CND_1, LOCAL_BANK_1, KS_C25 },
{ WORLD_EVENT_TYPE_6, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 0, 464, 24, 568, 1048, 2760,
CND_1, LOCAL_BANK_2, MHOUSE08_00 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 448, 224, 576, 296, 2072, 1016,
CND_1, LOCAL_BANK_4, SOUGEN_DOUKUTU_00_T1 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 304, 304, 432, 392, 1928, 1112,
CND_1, LOCAL_BANK_4, SOUGEN_DOUKUTU_00_T2 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 328, 224, 432, 296, 1928, 1016,
CND_1, LOCAL_BANK_4, SOUGEN_DOUKUTU_00_T0 },
{ WORLD_EVENT_TYPE_7, 128, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 448, 328, 576, 392, 2072, 1112,
CND_1, LOCAL_BANK_4, SOUGEN_DOUKUTU_00_T3 },
{ WORLD_EVENT_TYPE_7, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH, 40, 408, 160, 488, 1160, 2648,
CND_1, LOCAL_BANK_2, URO_19_H0 },
{ WORLD_EVENT_TYPE_7, 1, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 408, 376, 528, 456, 3496, 2600, CND_1,
LOCAL_BANK_4, KS_B06 },
{ WORLD_EVENT_TYPE_7, 2, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 632, 232, 752, 312, 2248, 1032,
CND_1, LOCAL_BANK_4, KS_B12 },
{ WORLD_EVENT_TYPE_7, 3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 768, 472, 928, 552, 2424, 3032,
CND_1, LOCAL_BANK_2, URO_12_H0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_RUINS, ROOM_RUINS_TEKTITES, 0, 0, 200, 88, 440, 2936, CND_1, LOCAL_BANK_2,
KOBITOANA_0C_T0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 496, 848, 536, 968, 3512, 3128, CND_1,
LOCAL_BANK_2, KOBITOANA_08_T0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 0, 16, 24, 88, 24, 1768, CND_1, LOCAL_BANK_2,
KOBITOANA_0D_T0 },
{ WORLD_EVENT_TYPE_8, 0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 48, 424, 152, 520, 3368, 1720, CND_1, LOCAL_BANK_2,
KS_A09 },
{ WORLD_EVENT_TYPE_9, 0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 0, 0, 56, 40, 2552, 232, CND_1, LOCAL_BANK_4,
SUIGEN_DOUKUTU_09_H00 },
{ WORLD_EVENT_TYPE_9, 1, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 112, 304, 240, 392, 1736, 1912, CND_1,
LOCAL_BANK_4, SOUGEN_DOUKUTU_0B_T0 },
{ WORLD_EVENT_TYPE_25, 0, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 768, 0, 920, 56, 920, 1752, CND_2, 0,
ITEM_SKILL_FAST_SPIN },
{ WORLD_EVENT_TYPE_25, 1, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD, 80, 400, 200, 488, 1688, 1208,
CND_2, 0, ITEM_SKILL_LONG_SPIN },
{ WORLD_EVENT_TYPE_25, 2, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 128, 752, 248, 840, 2744, 1032, CND_2, 0,
ITEM_SKILL_FAST_SPLIT },
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 0, 0, 152, 40, 152, 40, CND_5, LOCAL_BANK_1,
BEANDEMO_00 }, // uses different flags due to CND_5
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_BEANSTALK, 432, 0, 552, 88, 3528, 1096, CND_6,
LOCAL_BANK_1, BEANDEMO_01 }, // uses different flags due to CND_6
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_RUINS, ROOM_RUINS_BEANSTALK, 0, 0, 72, 72, 312, 2712, CND_7, LOCAL_BANK_1,
BEANDEMO_02 }, // uses different flags due to CND_7
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_CENTER, 0, 0, 72, 56, 2568,
2760, CND_8, LOCAL_BANK_1, BEANDEMO_03 }, // uses different flags due to CND_8
{ WORLD_EVENT_TYPE_BEANSTALK, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_SOUTH, 0, 0, 56, 56, 1064, 3016,
CND_9, LOCAL_BANK_1, BEANDEMO_04 }, // uses different flags due to CND_9
{ WORLD_EVENT_TYPE_11, 0, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 0, 48, 88, 152, 88, 1832, CND_1, LOCAL_BANK_2,
KOBITOANA_09_T0 },
{ WORLD_EVENT_TYPE_11, 1, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 0, 160, 40, 232, 40, 1912, CND_1, LOCAL_BANK_2,
KOBITOANA_0A_T0 },
{ WORLD_EVENT_TYPE_11, 2, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 96, 664, 200, 776, 200, 2456, CND_1,
LOCAL_BANK_2, KOBITOANA_0B_T0 },
{ WORLD_EVENT_TYPE_12, 0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 624, 784, 760, 952, 2184, 2360, CND_1,
LOCAL_BANK_2, KS_A18 },
{ WORLD_EVENT_TYPE_13, 0, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_CARPENTER, 0, 32, 120, 112, 1560, 1944,
CND_1, LOCAL_BANK_2, KS_A02 },
{ WORLD_EVENT_TYPE_14, 0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 768, 736, 904, 824, 2392, 2344, CND_1,
LOCAL_BANK_2, KS_B07 },
{ WORLD_EVENT_TYPE_15, 0, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 240, 96, 392, 136, 1400, 360, CND_10,
LOCAL_BANK_1, HAKA_BOSEKI_00 }, // uses different flags due to CND_10
{ WORLD_EVENT_TYPE_16, 0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 768, 160, 736, 232, 2040, 2040, CND_1,
LOCAL_BANK_1, KS_B18 },
{ WORLD_EVENT_TYPE_17, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH, 0, 800, 136, 856, 2624, 2056, CND_1,
LOCAL_BANK_4, GORON_DOUKUTU_01_T0 },
{ WORLD_EVENT_TYPE_18, 1, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 464, 120, 440, 2632, 2056, CND_1, LOCAL_BANK_4,
GORON_DOUKUTU_01_T0 },
{ WORLD_EVENT_TYPE_18, 2, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 288, 120, 280, 2632, 2056, CND_1, LOCAL_BANK_4,
GORON_DOUKUTU_01_T0 },
{ WORLD_EVENT_TYPE_18, 3, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 288, 120, 280, 2632, 2056, CND_1, LOCAL_BANK_4,
GORON_DOUKUTU_01_T0 },
{ WORLD_EVENT_TYPE_18, 4, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 144, 120, 136, 2632, 2056, CND_1, LOCAL_BANK_4,
GORON_DOUKUTU_01_T0 },
{ WORLD_EVENT_TYPE_18, 5, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 0, 144, 120, 136, 2632, 2056, CND_1, LOCAL_BANK_4,
GORON_DOUKUTU_01_T0 },
#endif
{ WORLD_EVENT_TYPE_19, 0, AREA_VEIL_FALLS_TOP, ROOM_VEIL_FALLS_TOP_0, 192, 0, 320, 104, 0, 0, CND_0, 0, 0 },
#if defined(EU) || defined(JP) || defined(DEMO_JP)
{ WORLD_EVENT_TYPE_20, 0, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_WITCH_HUT, 0, 0, 120, 56, 3656, 2248, CND_0, 0,
0 },
{ WORLD_EVENT_TYPE_21, 0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_BORLOV_ENTRANCE, 0, 0, 120, 72, 2152, 2152,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_22, 0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_POST_OFFICE, 0, 0, 72, 56, 1560, 1704,
CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_23, 0, AREA_MINISH_HOUSE_INTERIORS, ROOM_MINISH_HOUSE_INTERIORS_MINISH_WOODS_BOMB, 0, 0, 120, 88,
3288, 2952, CND_0, 0, 0 },
#ifdef DEMO_JP
{ WORLD_EVENT_TYPE_24, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 464, 176, 584, 264, 2072, 2744,
CND_1, LOCAL_BANK_1, 252 }, // TODO
#else
{ WORLD_EVENT_TYPE_24, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 464, 176, 584, 264, 2072, 2744,
CND_0, 0, 0 },
#endif
#else
{ WORLD_EVENT_TYPE_20, 0, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_WITCH_HUT, 0, 0, 120, 56, 3656, 2248, CND_2, 0,
ITEM_BOTTLE_RED_POTION },
{ WORLD_EVENT_TYPE_21, 0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_BORLOV_ENTRANCE, 0, 0, 120, 72, 2152, 2152,
CND_1, LOCAL_BANK_2, KS_B16 },
{ WORLD_EVENT_TYPE_22, 0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_POST_OFFICE, 0, 0, 72, 56, 1560, 1704,
CND_1, LOCAL_BANK_2, BILL01_TESSIN_8 },
{ WORLD_EVENT_TYPE_23, 0, AREA_MINISH_HOUSE_INTERIORS, ROOM_MINISH_HOUSE_INTERIORS_MINISH_WOODS_BOMB, 0, 0, 120, 88,
3288, 2952, CND_1, LOCAL_BANK_2, KHOUSE26_REMOCON },
{ WORLD_EVENT_TYPE_24, 0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD, 464, 176, 584, 264, 2072, 2744,
CND_1, LOCAL_BANK_1, KS_A06 },
#endif
{ WORLD_EVENT_TYPE_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CND_0, 0, 0 },
{ WORLD_EVENT_TYPE_0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CND_0, 0, 0 },
};
// kinstone data
// const TileEntity gUnk_080FEAC8[] = {
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 180, 30, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 166, 92, 113, 0x0, 0, 0 },
// { SMALL_CHEST, 167, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 168, 92, 110, 0x0, 0, 0 },
// { SMALL_CHEST, 181, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 169, 92, 112, 0x0, 0, 0 },
// { SMALL_CHEST, 170, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 171, 63, 200, 0x0, 0, 0 },
// { SMALL_CHEST, 172, 92, 113, 0x0, 0, 0 },
// { SMALL_CHEST, 182, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 183, 101, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 184, 92, 110, 0x0, 0, 0 },
// { SMALL_CHEST, 185, 92, 111, 0x0, 0, 0 },
// { SMALL_CHEST, 186, 92, 112, 0x0, 0, 0 },
// { SMALL_CHEST, 187, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 188, 63, 200, 0x0, 0, 0 },
// { SMALL_CHEST, 189, 92, 112, 0x0, 0, 0 },
// { SMALL_CHEST, 190, 92, 111, 0x0, 0, 0 },
// { SMALL_CHEST, 191, 92, 110, 0x0, 0, 0 },
// { SMALL_CHEST, 192, 63, 200, 0x0, 0, 0 },
// { SMALL_CHEST, 193, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 194, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 195, 92, 113, 0x0, 0, 0 },
// { SMALL_CHEST, 196, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 197, 63, 200, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// };
// const TileEntity gUnk_080FEAC8[] = {
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 3,178, 30, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 166, 92, 113, 0x0, 0, 0 },
// { SMALL_CHEST, 167, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 168, 92, 110, 0x0, 0, 0 },
// { SMALL_CHEST, 179, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 169, 92, 112, 0x0, 0, 0 },
// { SMALL_CHEST, 170, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 171, 63, 200, 0x0, 0, 0 },
// { SMALL_CHEST, 172, 92, 113, 0x0, 0, 0 },
// { SMALL_CHEST, 251, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 180, 101, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 181, 92, 110, 0x0, 0, 0 },
// { SMALL_CHEST, 182, 92, 111, 0x0, 0, 0 },
// { SMALL_CHEST, 183, 92, 112, 0x0, 0, 0 },
// { SMALL_CHEST, 184, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 185, 63, 200, 0x0, 0, 0 },
// { SMALL_CHEST, 186, 92, 112, 0x0, 0, 0 },
// { SMALL_CHEST, 187, 92, 111, 0x0, 0, 0 },
// { SMALL_CHEST, 188, 92, 110, 0x0, 0, 0 },
// { SMALL_CHEST, 189, 63, 200, 0x0, 0, 0 },
// { SMALL_CHEST, 190, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 191, 92, 114, 0x0, 0, 0 },
// { SMALL_CHEST, 192, 92, 113, 0x0, 0, 0 },
// { SMALL_CHEST, 193, 89, 0, 0x0, 0, 0 },
// { SMALL_CHEST, 194, 63, 200, 0x0, 0, 0 },
// { NONE, 0, 0, 0, 0x0, 0, 0 },
// };
extern TileEntity gUnk_080FEAC8[]; // TODO differs jp, demo_jp, eu
extern EntityData gUnk_080FEBE8[];
extern EntityData gUnk_080FEC28[];
extern EntityData gUnk_080FECC8[];
extern const EntityData gUnk_080FED18[];
extern EntityData gUnk_080FED58[];
// TODO need to find out what gRoomVars.field_0x8c[ptr->entity_idx] is.
extern const void* gUnk_080FED98[];
// gUnk_080FEDA4
// gUnk_080FEDDA
// gUnk_080FEDF8
extern const EntityData gUnk_080FEE18[];
extern const EntityData gUnk_080FEE38[];
extern const EntityData gUnk_080FEE48[];
extern const EntityData gUnk_080FEE58[]; // TODO differs jp, demo_jp, eu
extern EntityData gUnk_080FEE78[];
+240
View File
@@ -0,0 +1,240 @@
/**
* @file gameOverTask.c
* @ingroup Tasks
*
* @brief Game Over Task
*/
#include "common.h"
#include "fade.h"
#include "fileselect.h"
#include "functions.h"
#include "game.h"
#include "main.h"
#include "menu.h"
#include "save.h"
#include "sound.h"
#include "subtask.h"
typedef void(GameOverState)(void);
static GameOverState GameOver_Init;
static GameOverState GameOver_FadeIn;
static GameOverState GameOver_TextMove;
static GameOverState GameOver_Update;
static GameOverState GameOver_Exit;
void DrawGameOverText(void);
void GameOverTask(void) {
static GameOverState* const sStates[] = {
GameOver_Init, GameOver_FadeIn, GameOver_TextMove, GameOver_Update, GameOver_Exit,
};
sStates[gMain.state]();
if (gMain.state != GAMETASK_TRANSITION) {
FlushSprites();
DrawGameOverText();
CopyOAM();
}
}
void switch_state(u32 idx) {
gMain.state = idx;
SetMenuType(0);
}
void GameOver_Init(void) {
if (gFadeControl.active)
return;
sub_08052010();
gGenericMenu.unk10.a[0] = 80;
gMenu.transitionTimer = 60;
gSave.stats.health = 24;
gMain.field_0x5 = 60;
SoundReq(BGM_GAMEOVER);
SetFadeInverted(4);
gFadeControl.mask = 0xFFFF0001;
switch_state(GAMETASK_INIT);
}
void GameOver_FadeIn(void) {
if (gFadeControl.active)
return;
if (gMain.field_0x5 == 0) {
if (gGenericMenu.unk10.a[0] >= 38) {
gGenericMenu.unk10.a[0]--;
} else {
gMenu.transitionTimer--;
if (gMenu.transitionTimer == 0) {
switch_state(GAMETASK_MAIN);
#if defined(DEMO_USA) || defined(DEMO_JP)
SoundReq(SONG_VOL_FADE_OUT);
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 4);
#else
SetPopupState(0, 0);
gScreen.lcd.displayControl |= DISPCNT_BG1_ON | DISPCNT_BG2_ON;
gFadeControl.mask = 0x0000ffff;
SetFade(FADE_INSTANT, 16);
#endif
}
}
} else {
gMain.field_0x5--;
}
}
void GameOver_TextMove(void) {
#if defined(DEMO_USA) || defined(DEMO_JP)
if (gFadeControl.active == 0) {
DoSoftReset();
}
#else
s32 temp3;
u32 temp2;
if (gFadeControl.active)
return;
switch (gMenu.menuType) {
case 0:
gMenu.transitionTimer = 30;
gMenu.field_0x3 = 0;
SetMenuType(1);
SetPopupState(0, 0);
gFadeControl.mask = 0xffffffff;
return;
case 1:
if (gMenu.transitionTimer == 0) {
u32 temp = gMenu.field_0x3;
switch (gInput.newKeys) {
case DPAD_UP:
temp = 0;
break;
case DPAD_DOWN:
temp = 1;
break;
case A_BUTTON:
if (gMenu.field_0x3 != 0) {
temp2 = 4;
} else {
CreateDialogBox(8, 0);
temp2 = 2;
}
gMenu.transitionTimer = 60;
SetMenuType(temp2);
SoundReq(SFX_TEXTBOX_SELECT);
break;
}
if (gMenu.field_0x3 != temp) {
gMenu.field_0x3 = temp;
SetPopupState(0, temp);
SoundReq(SFX_TEXTBOX_CHOICE);
}
return;
}
gMenu.transitionTimer--;
return;
case 2:
temp3 = HandleSave(0);
gMenu.field_0x0 = temp3;
switch (temp3) {
case 1:
SetMenuType(4);
break;
case -1:
gMenu.transitionTimer = 60;
CreateDialogBox(9, 0);
SetMenuType(3);
break;
}
return;
case 3:
if (gMenu.transitionTimer != 0) {
gMenu.transitionTimer--;
} else if (gInput.newKeys & (A_BUTTON | B_BUTTON | START_BUTTON)) {
SetMenuType(0);
}
return;
case 4:
default:
gScreen.lcd.displayControl &= ~DISPCNT_BG1_ON;
sub_08050384();
switch_state(GAMETASK_EXIT);
return;
}
#endif
}
void GameOver_Update(void) {
switch (gMenu.menuType) {
case 0:
gMenu.transitionTimer = 30;
gMenu.field_0x3 = 0;
SetMenuType(1);
SetPopupState(1, 0);
return;
case 1:
gScreen.lcd.displayControl |= DISPCNT_BG1_ON;
if (gMenu.transitionTimer != 0) {
gMenu.transitionTimer--;
return;
} else {
u32 temp = gMenu.field_0x3;
switch (gInput.newKeys) {
case DPAD_UP:
temp = 0;
break;
case DPAD_DOWN:
temp = 1;
break;
case A_BUTTON:
SetMenuType(2);
SoundReq(SFX_TEXTBOX_SELECT);
if (temp == 0) {
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
} else {
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 8);
}
break;
}
if (gMenu.field_0x3 != temp) {
gMenu.field_0x3 = temp;
SetPopupState(1, temp);
SoundReq(SFX_TEXTBOX_CHOICE);
}
}
return;
case 2:
default:
if (gFadeControl.active == 0) {
if (gMenu.field_0x3 == 0) {
SetTask(TASK_GAME);
} else {
DoSoftReset();
}
}
return;
}
}
// Unused, since task is set above
// if we got here, it would be a softlock
void GameOver_Exit(void) {
}
void DrawGameOverText(void) {
static const u8 sOffsets[] = {
48, 68, 88, 108, 137, 156, 174, 192,
};
u32 i;
gOamCmd._4 = 0;
gOamCmd._6 = 0;
gOamCmd._8 = 0x8600;
gOamCmd.y = gGenericMenu.unk10.a[0];
for (i = 0; i < 8; ++i) {
gOamCmd.x = sOffsets[i];
#ifdef EU
DrawDirect(0x1fc, i);
#else
DrawDirect(0x1fd, i);
#endif
}
}
+945
View File
@@ -0,0 +1,945 @@
/**
* @file gameUtils.c
*
* @brief Game Utils
*/
#include "backgroundAnimations.h"
#include "enemy.h"
#include "entity.h"
#include "fade.h"
#include "fileselect.h"
#include "functions.h"
#include "game.h"
#include "item.h"
#include "itemMetaData.h"
#include "main.h"
#include "menu.h"
#include "npc.h"
#include "object.h"
#include "save.h"
#include "screen.h"
#include "script.h"
#include "sound.h"
#include "ui.h"
u32 StairsAreValid(void);
void ClearFlagArray(const u16*);
void DummyHandler(u32* a1);
void sub_08053434(u32* a1);
void sub_080534E4(u32* a1);
void InitAllRoomResInfo(void);
void InitRoomResInfo(RoomResInfo* info, RoomHeader* hdr, u32 area, u32 room);
void sub_080532E4(void);
void ResetTimerFlags(void);
extern void** gAreaTilesets[];
extern void** gAreaRoomMaps[];
extern void* gAreaMetatiles[];
extern void** gAreaTable[];
typedef struct {
u8 dest_off[8];
u8 _8;
u8 right_align;
u16 _a;
} PopupOption;
extern u8 gUnk_0200AF14;
void SetPopupState(u32 type, u32 choice_idx) {
static const Font sDefaultFont = {
.dest = gBG1Buffer,
.gfx_dest = (u16*)0x06006000,
.buffer_loc = gTextGfxBuffer,
._c = 0,
.gfx_src = 0xD300,
.width = 0xE0,
.right_align = 0,
.sm_border = 0,
.unused = 0,
.draw_border = 0,
.border_type = 0,
.fill_type = 6,
.charColor = 4,
._16 = 1,
.stylized = 0,
};
static const PopupOption sPopupOptions[] = {
{ { 11, 11, 11, 10, 11, 10, 10, 0 }, 8, 0, 16 },
{ { 10, 11, 11, 9, 11, 9, 9, 0 }, 8, 0, 17 },
{ { 15, 15, 15, 15, 15, 15, 15, 0 }, 5, 1, 13 },
};
Font font;
const PopupOption* opt;
u32 fakematch;
MemClear(gBG1Buffer, sizeof gBG1Buffer);
gUnk_020227E8[0]._0.WORD = 0xf;
gUnk_020227E8[1]._0.WORD = 0xf;
gUnk_020227E8[2]._0.WORD = 0xf;
gUnk_020227E8[3]._0.WORD = 0xf;
*(&gUnk_020227E8[choice_idx]._0.BYTES.byte0 + 1) = fakematch = 1;
MemCopy(&sDefaultFont, &font, sizeof font);
opt = &sPopupOptions[type];
font.dest = sDefaultFont.dest + (opt->dest_off[gSaveHeader->language] + opt->_8 * 32);
font.right_align = opt->right_align;
ShowTextBox(opt->_a, &font);
gScreen.bg1.updated = fakematch;
}
void InitializePlayer(void) {
static const u8 sPlayerSpawnStates[] = {
[PL_SPAWN_DEFAULT] = PLAYER_INIT,
[PL_SPAWN_MINISH] = PLAYER_MINISH,
[PL_SPAWN_DROP] = PLAYER_INIT,
[PL_SPAWN_WALKING] = PLAYER_ROOMTRANSITION,
[PL_SPAWN_STEP_IN] = PLAYER_ROOM_EXIT,
[PL_SPAWN_SLEEPING] = PLAYER_SLEEP,
[PL_SPAWN_DROP_MINISH] = PLAYER_MINISH,
[PL_SPAWN_STAIRS_ASCEND] = PLAYER_USEENTRANCE,
[PL_SPAWN_STAIRS_DESCEND] = PLAYER_USEENTRANCE,
[PL_SPAWN_9] = PLAYER_MINISH,
[PL_SPAWN_PARACHUTE_FORWARD] = PLAYER_WARP,
[PL_SPAWN_PARACHUTE_UP] = PLAYER_WARP,
[PL_SPAWN_FAST_TRAVEL] = PLAYER_WARP,
};
Entity* pl;
sub_080784C8();
MemClear(&gActiveItems, sizeof(gActiveItems));
MemClear(&gPlayerState, sizeof(gPlayerState));
MemFill32(0xffffffff, &gPlayerState.path_memory, sizeof(gPlayerState.path_memory));
MemClear(&gPlayerEntity, sizeof(gPlayerEntity));
pl = &gPlayerEntity;
gRoomControls.camera_target = pl;
gPlayerState.queued_action = sPlayerSpawnStates[gRoomTransition.player_status.spawn_type];
if (!CheckGlobalFlag(EZERO_1ST)) {
gPlayerState.flags |= PL_NO_CAP;
}
switch (gRoomTransition.player_status.spawn_type) {
case PL_SPAWN_DROP:
case PL_SPAWN_DROP_MINISH:
pl->z.HALF.HI = -0xc0;
break;
case PL_SPAWN_STEP_IN:
gPlayerState.field_0x38 = 16;
pl->direction = Direction8FromAnimationState(gRoomTransition.player_status.start_anim);
case PL_SPAWN_WALKING:
pl->speed = 224;
break;
case PL_SPAWN_STAIRS_ASCEND:
case PL_SPAWN_STAIRS_DESCEND:
gPlayerState.field_0x38 = 1;
gPlayerState.field_0x39 = gRoomTransition.player_status.spawn_type;
break;
case PL_SPAWN_PARACHUTE_FORWARD:
gPlayerState.field_0x38 = 1;
break;
case PL_SPAWN_PARACHUTE_UP:
gPlayerState.field_0x38 = 3;
break;
case PL_SPAWN_FAST_TRAVEL:
gPlayerState.field_0x38 = 4;
}
pl->kind = PLAYER;
pl->flags |= ENT_COLLIDE | ENT_PERSIST;
pl->spritePriority.b0 = 4;
pl->health = gSave.stats.health;
pl->x.HALF.HI = gRoomTransition.player_status.start_pos_x;
pl->y.HALF.HI = gRoomTransition.player_status.start_pos_y;
pl->animationState = gRoomTransition.player_status.start_anim;
pl->collisionLayer = gRoomTransition.player_status.layer;
UpdateSpriteForCollisionLayer(pl);
AppendEntityToList(pl, 1);
RegisterPlayerHitbox();
}
bool32 AreaIsOverworld(void) {
#ifdef EU
return gArea.areaMetadata == 0x01;
#else
return gArea.areaMetadata == 0x81;
#endif
}
bool32 CheckAreaOverworld(u32 area) {
#if EU
return gAreaMetadata[area].flags == 0x01;
#else
return gAreaMetadata[area].flags == 0x81;
#endif
}
#ifndef EU
bool32 AreaAllowsWarp(void) {
return (gArea.areaMetadata >> 7) & 1;
}
#endif
bool32 AreaIsDungeon(void) {
return (gArea.areaMetadata >> 2) & 1;
}
bool32 AreaHasEnemies(void) {
return (gArea.areaMetadata >> 4) & 1;
}
bool32 AreaHasNoEnemies(void) {
return (gArea.areaMetadata >> 6) & 1;
}
bool32 AreaHasMap(void) {
return (gArea.areaMetadata >> 3) & 1;
}
s32 ModHealth(s32 delta) {
s32 newHealth;
Stats* stats = &gSave.stats;
newHealth = stats->health + delta;
if (newHealth < 0) {
newHealth = 0;
}
if (stats->maxHealth < newHealth) {
newHealth = (u32)stats->maxHealth;
}
stats->health = newHealth;
gPlayerEntity.health = newHealth;
return newHealth;
}
void ModRupees(s32 delta) {
s32 newRupeeCount;
Stats* s = &gSave.stats;
newRupeeCount = s->rupees + delta;
if (newRupeeCount < 0) {
newRupeeCount = 0;
} else {
if (newRupeeCount > (u16)gWalletSizes[s->walletType * 2]) {
newRupeeCount = (u16)gWalletSizes[s->walletType * 2];
}
}
s->rupees = newRupeeCount;
}
void ModDungeonKeys(s32 keys) {
if (AreaHasKeys()) {
u8* p = &gSave.dungeonKeys[gArea.dungeon_idx];
if (*p + keys < 0)
*p = 0;
else
*p += keys;
}
}
bool32 AreaHasKeys(void) {
return (gArea.areaMetadata >> 1) & 1;
}
bool32 HasDungeonMap(void) {
u32 tmp;
if (AreaHasKeys())
tmp = gSave.dungeonKeys[gArea.dungeon_idx];
return tmp ? 1 : 0;
}
bool32 HasDungeonCompass(void) {
u32 tmp;
if (AreaHasKeys())
tmp = gSave.dungeonItems[gArea.dungeon_idx] & 4;
return tmp ? 1 : 0;
}
bool32 HasDungeonBigKey(void) {
if (!AreaHasKeys())
return 0;
return (gSave.dungeonItems[gArea.dungeon_idx] >> 1) & 1;
}
bool32 HasDungeonSmallKey(void) {
u32 tmp;
if (!AreaHasKeys())
return 0;
return gSave.dungeonItems[gArea.dungeon_idx] & 1;
}
extern u8 gPaletteBufferBackup[];
void RestoreGameTask(u32 a1) {
LoadGfxGroups();
#ifndef EU
CleanUpGFXSlots();
#endif
sub_080ADE24();
InitUI(TRUE);
sub_0801AE44(a1);
MemCopy(gPaletteBufferBackup, gPaletteBuffer, 1024);
gUsedPalettes = 0xffffffff;
}
void LoadRoomBgm(void) {
gArea.queued_bgm = gAreaMetadata[gRoomControls.area]._3;
if (CheckLocalFlagByBank(FLAG_BANK_10, LV6_KANE_START)) {
gArea.queued_bgm = BGM_FIGHT_THEME2;
}
}
#ifndef EU
void sub_08052878(void) {
gArea.bgm = gArea.queued_bgm;
SoundReq(SONG_STOP_ALL);
}
void sub_0805289C(void) {
gArea.queued_bgm = gArea.bgm;
}
#endif
bool32 CheckGameOver(void) {
if (gRoomTransition.field_0x4[1]) {
InitFade();
gMain.state = GAMETASK_EXIT;
gMain.substate = GAMEMAIN_INITROOM;
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
SoundReq(SONG_STOP_BGM);
return TRUE;
}
return FALSE;
}
void RoomExitCallback(void) {
if (gArea.transitionManager != NULL && gArea.onExit != NULL)
gArea.onExit(gArea.transitionManager);
}
bool32 CheckRoomExit(void) {
if (gRoomTransition.transitioningOut && gSave.stats.health != 0 && gPlayerState.framestate != PL_STATE_DIE) {
if (StairsAreValid()) {
gRoomTransition.transitioningOut = 0;
return FALSE;
}
switch (gRoomTransition.type) {
case TRANSITION_CUT:
SetFade(FADE_IN_OUT | FADE_INSTANT | FADE_MOSAIC, 8);
break;
case TRANSITION_CUT_FAST:
SetFade(FADE_IN_OUT | FADE_INSTANT | FADE_MOSAIC, 3);
break;
case TRANSITION_FADE_WHITE_SLOW:
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 4);
break;
case TRANSITION_FADE_BLACK_SLOW:
SetFade(FADE_IN_OUT | FADE_INSTANT, 4);
break;
case TRANSITION_FADE_BLACK:
SetFade(FADE_IN_OUT | FADE_INSTANT, 16);
break;
case TRANSITION_FADE_BLACK_FAST:
SetFade(FADE_IN_OUT | FADE_INSTANT, 256);
break;
case TRANSITION_7:
case TRANSITION_FADE_WHITE_FAST:
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 256);
break;
default:
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 16);
break;
}
RoomExitCallback();
gMain.substate = GAMEMAIN_CHANGEAREA;
*(&gMain.pauseInterval + 1) = 1;
return TRUE;
}
return FALSE;
}
u32 StairsAreValid(void) {
static const u16 sStairTypes[] = { 0x91, PL_SPAWN_STAIRS_ASCEND, 0x92, PL_SPAWN_STAIRS_DESCEND,
0x93, PL_SPAWN_STAIRS_ASCEND, 0x94, PL_SPAWN_STAIRS_DESCEND,
0x95, PL_SPAWN_STAIRS_ASCEND, 0x96, PL_SPAWN_STAIRS_DESCEND,
0x97, PL_SPAWN_STAIRS_ASCEND, 0x98, PL_SPAWN_STAIRS_DESCEND,
0 };
const u16* i;
u32 tgt = gRoomTransition.stairs_idx;
for (i = sStairTypes; i[0] != 0; i += 2) {
if (tgt == i[0]) {
gPlayerState.queued_action = PLAYER_USEENTRANCE;
gPlayerState.field_0x38 = 0;
gPlayerState.field_0x39 = i[1];
if (!gRoomTransition.player_status.spawn_type)
gRoomTransition.player_status.spawn_type = i[1];
return 1;
}
}
return 0;
}
void InitParachuteRoom(void) {
gRoomTransition.transitioningOut = 1;
gRoomTransition.player_status.start_pos_x = (gPlayerEntity.x.HALF.HI - gRoomControls.origin_x) & 0x3F8;
gRoomTransition.player_status.start_pos_y = (gPlayerEntity.y.HALF.HI - gRoomControls.origin_y) & 0x3F8;
gRoomTransition.player_status.start_anim = 4;
gRoomTransition.player_status.spawn_type = PL_SPAWN_PARACHUTE_FORWARD;
gRoomTransition.player_status.area_next = gRoomControls.area;
gRoomTransition.player_status.room_next = gRoomControls.room - 1;
}
void InitRoomTransition(void) {
switch (gRoomTransition.type) {
case TRANSITION_CUT:
SetFade(FADE_INSTANT | FADE_MOSAIC, 8);
break;
case TRANSITION_CUT_FAST:
SetFade(FADE_INSTANT | FADE_MOSAIC, 3);
break;
case TRANSITION_FADE_WHITE_SLOW:
SetFade(FADE_BLACK_WHITE | FADE_INSTANT, 4);
break;
case TRANSITION_3:
break;
case TRANSITION_FADE_BLACK_FAST:
SetFade(FADE_IN_OUT | FADE_INSTANT, 256);
break;
case TRANSITION_7:
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 256);
break;
case TRANSITION_FADE_BLACK:
SetFade(FADE_INSTANT, 16);
break;
case TRANSITION_FADE_WHITE_FAST:
SetFade(FADE_BLACK_WHITE | FADE_INSTANT, 8);
break;
default:
SetFadeInverted(16);
break;
}
}
bool32 CanDispEzloMessage(void) {
s32 tmp = PL_STATE_WALK;
if (!(gInput.heldKeys & SELECT_BUTTON) || gPlayerState.controlMode != CONTROL_ENABLED ||
gPauseMenuOptions.disabled || gUnk_0200AF00.unk_1)
return FALSE;
if ((gPlayerState.flags & (PL_NO_CAP | PL_CAPTURED | PL_DISABLE_ITEMS)) || (gPlayerState.framestate_last > tmp) ||
gPlayerState.item || gPlayerEntity.field_0x7a.HWORD)
return FALSE;
if ((gPlayerEntity.z.HALF.HI & 0x8000) && !gPlayerState.field_0xa)
return FALSE;
GenerateAreaHint();
ForceSetPlayerState(PL_STATE_TALKEZLO);
SetPlayerEventPriority();
return TRUE;
}
void DisplayEzloMessage(void) {
u32 height;
u32 idx;
#if defined(JP) || defined(EU)
idx = 0x10;
#else
idx = 0x11;
#endif
if (gRoomTransition.player_status.field_0x24[idx] == 0) {
height = gPlayerEntity.y.HALF.HI - gRoomControls.scroll_y > 96 ? 1 : 13;
} else {
height = gRoomTransition.player_status.field_0x24[idx];
}
MessageAtHeight(gRoomTransition.hint_idx, height);
}
#if defined(USA) || defined(DEMO_USA) || defined(DEMO_JP)
void CreateMiscManager(void) {
Entity* e = NULL;
if (gRoomTransition.player_status.field_0x24[13])
return;
gRoomTransition.player_status.field_0x24[13] = 1;
#ifndef DEMO_JP
gRoomTransition.player_status.field_0x24[10] = gArea.locationIndex;
#endif
e = (Entity*)GetEmptyManager();
if (e == NULL)
return;
e->kind = MANAGER;
e->id = MISC_MANAGER;
e->type = 15;
AppendEntityToList(e, 0);
}
#endif
void DecreasePortalTimer(void) {
if (gArea.portal_mode == 0)
gArea.portal_timer = 0;
if (gArea.portal_timer) {
gArea.portal_timer--;
gArea.portal_mode = 0;
}
}
void UpdatePlayerMapCoords(void) {
if (!AreaHasNoEnemies()) {
if (AreaIsOverworld()) {
gRoomTransition.player_status.overworld_map_x = gPlayerEntity.x.HALF_U.HI;
gRoomTransition.player_status.overworld_map_y = gPlayerEntity.y.HALF_U.HI;
} else if (AreaIsDungeon()) {
gRoomTransition.player_status.dungeon_map_x = gPlayerEntity.x.HALF.HI;
gRoomTransition.player_status.dungeon_map_y = gPlayerEntity.y.HALF.HI;
}
}
}
void SetWorldMapPos(u32 area, u32 room, u32 x, u32 y) {
RoomHeader* hdr = gAreaRoomHeaders[area] + room;
gRoomTransition.player_status.overworld_map_x = hdr->map_x + x;
gRoomTransition.player_status.overworld_map_y = hdr->map_y + y;
}
void SetDungeonMapPos(u32 area, u32 room, u32 x, u32 y) {
RoomHeader* hdr = gAreaRoomHeaders[area] + room;
gRoomTransition.player_status.dungeon_map_x = hdr->map_x + x;
gRoomTransition.player_status.dungeon_map_y = hdr->map_y + y;
}
void InitRoom(void) {
AreaHeader* a_hdr = NULL;
MemClear(&gArea, sizeof gArea);
a_hdr = &gAreaMetadata[gRoomControls.area];
gArea.areaMetadata = a_hdr->flags;
gArea.locationIndex = a_hdr->location;
gArea.dungeon_idx = a_hdr->location - 23;
gArea.localFlagOffset = gLocalFlagBanks[a_hdr->flag_bank];
gArea.flag_bank = a_hdr->flag_bank;
gArea.portal_timer = 180;
gArea.lightLevel = 256;
InitRoomTransition();
InitAllRoomResInfo();
}
u32 GetFlagBankOffset(u32 idx) {
AreaHeader* a_hdr = &gAreaMetadata[idx];
return gLocalFlagBanks[a_hdr->flag_bank];
}
void RegisterTransitionManager(void* mgr, void (*onEnter)(), void (*onExit)()) {
if (gMain.substate != GAMEMAIN_SUBTASK) {
gArea.transitionManager = mgr;
gArea.onEnter = onEnter;
gArea.onExit = onExit;
}
}
void InitAllRoomResInfo(void) {
RoomHeader* r_hdr = gAreaRoomHeaders[gRoomControls.area];
RoomResInfo* info = gArea.roomResInfos;
u32 i;
for (i = 0; i < MAX_ROOMS && *(u16*)r_hdr != 0xFFFF; i++, r_hdr++) {
if (r_hdr->tileset_id != 0xFFFF)
InitRoomResInfo(info, r_hdr, gRoomControls.area, i);
info++;
}
gArea.pCurrentRoomInfo = GetCurrentRoomInfo();
}
void InitRoomResInfo(RoomResInfo* info, RoomHeader* r_hdr, u32 area, u32 room) {
info->map_x = r_hdr->map_x;
info->map_y = r_hdr->map_y;
info->pixel_width = r_hdr->pixel_width;
info->pixel_height = r_hdr->pixel_height;
info->tileset = *(gAreaTilesets[area] + r_hdr->tileset_id);
info->map = *(gAreaRoomMaps[area] + room);
info->metatiles = gAreaMetatiles[area];
info->bg_anim = (void*)gUnk_080B755C[area];
info->exits = gExitLists[area][room];
if (gAreaTable[area] != NULL) {
info->properties = *(gAreaTable[area] + room);
}
}
RoomResInfo* GetCurrentRoomInfo(void) {
return &gArea.roomResInfos[gRoomControls.room];
}
void sub_08052EA0(void) {
MemClear(&gRoomVars, sizeof gRoomVars);
gRoomVars.unk_10[0] = -1;
gRoomVars.unk_10[1] = gRoomVars.unk_10[0];
gRoomVars.unk_10[2] = gRoomVars.unk_10[0];
gRoomVars.unk_10[3] = gRoomVars.unk_10[0];
gRoomVars.lightLevel = 256;
gArea.locationIndex = gAreaMetadata[gRoomControls.area].location;
UpdateRoomTracker();
InitScriptData();
sub_08054524();
sub_080186D4();
sub_0806F364();
UpdateGlobalProgress();
}
u32 sub_08052EF4(s32 idx) {
AreaHeader* a_hdr = NULL;
u32 i = idx < 0 ? gRoomControls.area : idx;
a_hdr = &gAreaMetadata[i];
return gLocalFlagBanks[a_hdr->flag_bank];
}
/**
* @brief If enabled, this type of transition does not change the room
* and keeps all entities.
*/
void UpdateFakeScroll(void) {
u32 x, y;
LinkedList* ll;
Entity* e;
if (gArea.unk_0c_0 == 0 || !gRoomVars.field_0x0)
return;
y = 0;
x = 0;
// WTF?
switch (gRoomControls.scroll_direction) {
case 0:
y = gArea.pCurrentRoomInfo->pixel_height;
case 1:
y = gArea.pCurrentRoomInfo->pixel_height;
case 2:
y = gArea.pCurrentRoomInfo->pixel_height;
case 3:
x = gArea.pCurrentRoomInfo->pixel_width;
}
gArea.pCurrentRoomInfo->map_x += x;
gArea.pCurrentRoomInfo->map_y += y;
gRoomControls.origin_x += x;
gRoomControls.origin_y += y;
gRoomControls.scroll_x += x;
gRoomControls.scroll_y += y;
ll = gEntityLists;
do {
for (e = ll->first; e != (Entity*)ll; e = e->next) {
if (e->kind != MANAGER) {
e->x.HALF.HI += x;
e->y.HALF.HI += y;
}
}
} while (++ll < gEntityLists + 9);
}
void LoadAuxiliaryRoom(u32 area, u32 room) {
sub_08052FF4(area, room);
gRoomControls.camera_target = NULL;
CloneMapData();
InitializeCamera();
}
void sub_08052FF4(u32 area, u32 room) {
RoomHeader* r_hdr = NULL;
ClearTilemaps();
SetBGDefaults();
gRoomControls.area = area;
gRoomControls.room = room;
gScreen.lcd.displayControl = 0x1740;
MemClear(&gArea.currentRoomInfo, sizeof gArea.currentRoomInfo);
gArea.pCurrentRoomInfo = &gArea.currentRoomInfo;
r_hdr = gAreaRoomHeaders[area] + room;
gArea.currentRoomInfo.map_x = r_hdr->map_x;
gArea.currentRoomInfo.map_y = r_hdr->map_y;
gArea.currentRoomInfo.pixel_width = r_hdr->pixel_width;
gArea.currentRoomInfo.pixel_height = r_hdr->pixel_height;
gArea.currentRoomInfo.tileset = *(gAreaTilesets[area] + r_hdr->tileset_id);
gArea.currentRoomInfo.map = *(gAreaRoomMaps[area] + room);
gArea.currentRoomInfo.metatiles = gAreaMetatiles[area];
gArea.currentRoomInfo.bg_anim = (void*)gUnk_080B755C[area];
}
void ChangeLightLevel(s32 lightLevel) {
lightLevel += gRoomVars.lightLevel;
if (lightLevel < 0)
lightLevel = 0;
if (lightLevel > 256)
lightLevel = 256;
gRoomVars.lightLevel = lightLevel;
}
void sub_080530B0(void) {
static const u16 sMinecartData[] = { 0x189, 0x0, 0x102, 0x4, 0x1af, 0x0, 0x204, 0x0,
0x1cf, 0x0, 0x10, 0x4, 0x0, 0x0, 0x0, 0x0 };
MemCopy(sMinecartData, gRoomTransition.minecart_data, sizeof sMinecartData);
}
void UpdateGlobalProgress(void) {
u8 pcnt = 1;
if (CheckLocalFlagByBank(FLAG_BANK_3, SEIIKI_STAINED_GLASS)) {
pcnt = 9;
} else if (CheckGlobalFlag(LV5_CLEAR)) {
pcnt = 8;
} else if (CheckLocalFlagByBank(FLAG_BANK_3, OUBO_KAKERA)) {
pcnt = 7;
} else if (CheckGlobalFlag(LV4_CLEAR)) {
pcnt = 6;
} else if (CheckGlobalFlag(LV3_CLEAR)) {
pcnt = 5;
} else if (CheckLocalFlagByBank(FLAG_BANK_1, SOUGEN_08_TORITSUKI)) {
pcnt = 4;
} else if (CheckGlobalFlag(LV1_CLEAR)) {
pcnt = 2;
}
gSave.global_progress = pcnt;
}
u32 sub_08053144(void) {
u32 ret;
if (CheckGlobalFlag(ENDING))
return 0;
ret = 0;
if (gArea.locationIndex != 0)
ret = !!(gRoomTransition.player_status.field_0x24[10] ^ gArea.locationIndex);
return ret;
}
void CheckAreaDiscovery(void) {
if (!sub_08053144())
return;
gRoomTransition.player_status.field_0x24[10] = gArea.locationIndex;
if (!CheckGlobalFlag(TABIDACHI))
return;
if (!CheckGlobalFlag(ENDING)) {
Entity* e = (Entity*)GetEmptyManager();
if (e != NULL) {
e->kind = MANAGER;
e->id = ENTER_ROOM_TEXTBOX_MANAGER;
AppendEntityToList(e, 8);
if (!gRoomVars.field_0x0 && !ReadBit(gSave.areaVisitFlags, gArea.locationIndex)) {
e->type2 = 1;
SetPlayerControl(3);
SetInitializationPriority();
}
}
}
WriteBit(gSave.areaVisitFlags, gArea.locationIndex);
}
void UpdatePlayerRoomStatus(void) {
gPlayerState.startPosX = gPlayerEntity.x.HALF.HI;
gPlayerState.startPosY = gPlayerEntity.y.HALF.HI;
if (sub_08053144()) {
MemCopy(&gRoomTransition.player_status, &gSave.saved_status, sizeof gRoomTransition.player_status);
if (AreaIsDungeon()) {
gRoomTransition.player_status.dungeon_area = gRoomControls.area;
gRoomTransition.player_status.dungeon_room = gRoomControls.room;
gRoomTransition.player_status.dungeon_x = gPlayerEntity.x.HALF.HI;
gRoomTransition.player_status.dungeon_y = gPlayerEntity.y.HALF.HI;
}
}
}
void sub_08053250(void) {
gRoomTransition.player_status.spawn_type = PL_SPAWN_DEFAULT;
gRoomTransition.player_status.start_pos_x = gPlayerEntity.x.HALF.HI - gRoomControls.origin_x;
gRoomTransition.player_status.start_pos_y = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y;
gRoomTransition.player_status.start_anim = gPlayerEntity.animationState;
gRoomTransition.player_status.layer = gPlayerEntity.collisionLayer;
gRoomTransition.player_status.area_next = gRoomControls.area;
gRoomTransition.player_status.room_next = gRoomControls.room;
MemCopy(&gRoomTransition.player_status, &gSave.saved_status, sizeof gRoomTransition.player_status);
}
void sub_0805329C(void) {
if (sub_08053144()) {
switch (gRoomControls.area) {
case AREA_DEEPWOOD_SHRINE:
gSave.unk7 = 0;
break;
case AREA_CAVE_OF_FLAMES:
sub_080530B0();
break;
case AREA_OUTER_FORTRESS_OF_WINDS:
sub_080532E4();
break;
default:
ResetTimerFlags();
break;
}
}
}
void sub_080532E4(void) {
s32 x, y;
RoomHeader* r_hdr = gAreaRoomHeaders[AREA_FORTRESS_OF_WINDS] + 33;
gRoomTransition.player_status.dungeon_area = AREA_FORTRESS_OF_WINDS;
gRoomTransition.player_status.dungeon_room = 33;
gRoomTransition.player_status.dungeon_x = r_hdr->map_x + r_hdr->pixel_width / 2;
gRoomTransition.player_status.dungeon_map_x = gRoomTransition.player_status.dungeon_x;
gRoomTransition.player_status.dungeon_y = r_hdr->map_y + r_hdr->pixel_height + 0xa0;
gRoomTransition.player_status.dungeon_map_y = gRoomTransition.player_status.dungeon_y;
}
void LoadGfxGroups(void) {
MemClear(&gBG0Buffer, sizeof gBG0Buffer);
MemClear(&gBG1Buffer, sizeof gBG1Buffer);
MemClear(&gBG2Buffer, sizeof gBG2Buffer);
MemClear(&gBG3Buffer, sizeof gBG3Buffer);
LoadGfxGroup(16);
LoadGfxGroup(23);
if (gRoomControls.area == AREA_CASTOR_WILDS)
LoadGfxGroup(26);
LoadItemGfx();
LoadPaletteGroup(11);
LoadPaletteGroup(12);
SetColor(0, 0);
}
void LoadItemGfx(void) {
LoadGfxGroup(GetInventoryValue(ITEM_REMOTE_BOMBS) ? 24 : 25);
if (GetInventoryValue(ITEM_LIGHT_ARROW))
LoadGfxGroup(29);
LoadGfxGroup(GetInventoryValue(ITEM_MAGIC_BOOMERANG) ? 28 : 27);
}
extern u16 gUnk_020178E0[];
void sub_080533CC(void) {
u16* p1 = gUnk_020178E0;
u16* p2 = gUnk_020178E0 - 0x100;
*p2++ = *p1++;
*p2++ = *p1++;
*p2++ = *p1++;
*p2++ = *p1++;
*p2++ = *p1++;
gUsedPalettes |= 8;
}
void UpdateTimerCallbacks(void) {
static void (*const sHandlers[])(u32*) = {
sub_08053434, DummyHandler, sub_080534E4, DummyHandler, DummyHandler, DummyHandler, DummyHandler, DummyHandler,
};
u32* p;
u32 i;
p = gSave.timers;
for (i = 0; i < 8; i++, p++) {
(sHandlers[i])(p);
}
}
void DummyHandler(u32* a1) {
}
void sub_08053434(u32* a1) {
if (gArea.locationIndex == 29 && *a1) {
if (!--*a1) {
ResetTimerFlags();
MenuFadeIn(5, 6);
}
}
}
void ResetTimerFlags(void) {
static const u16 sClearFlags[] = {
FLAG_BANK_10, LV6_GUFUU1_GISHIKI, //
FLAG_BANK_10, LV6_GUFUU1_DEMO, //
FLAG_BANK_10, LV6_ZELDA_DISCURSE, //
FLAG_BANK_10, LV6_00_ESCAPE, //
FLAG_BANK_10, LV6_GUFUU2_DEAD, //
FLAG_BANK_G, ENDING, //
FLAG_BANK_10, LV6_KANE_START, //
FLAG_BANK_10, LV6_KANE_1ST, //
FLAG_BANK_10, LV6_KANE_2ND, //
FLAG_BANK_10, LV6_SOTO_ENDING, //
0xFFFF,
};
gSave.timers[0] = 0;
if (CheckLocalFlagByBank(FLAG_BANK_10, LV6_ZELDA_DISCURSE))
ClearGlobalFlag(ZELDA_CHASE);
ClearFlagArray(sClearFlags);
}
void StartDarkNutTimer(void) {
gSave.timers[0] = 10800;
}
void sub_080534AC(void) {
if (CheckLocalFlagByBank(FLAG_BANK_10, LV6_KANE_START)) {
ClearLocalFlagByBank(FLAG_BANK_10, LV6_KANE_START);
gSave.timers[0] = 0;
SoundReq(SONG_STOP_BGM);
}
}
void sub_080534E4(u32* a1) {
if (gRoomControls.area != AREA_VEIL_FALLS_TOP) {
if (*a1)
--*a1;
}
}
void InitBiggoronTimer(void) {
gSave.timers[2] = 36000;
}
void ResetTmpFlags(void) {
static const u16 sClearFlags[] = {
FLAG_BANK_2, BILL00_SHICHOU_00, //
FLAG_BANK_2, BILL0A_YADO_TAKARA_00, //
FLAG_BANK_2, BILL0C_SCHOOLR_00, //
FLAG_BANK_1, MACHI00_00, //
FLAG_BANK_1, MACHI00_02, //
FLAG_BANK_2, MHOUSE06_00, //
FLAG_BANK_2, MHOUSE14_00, //
FLAG_BANK_2, MHOUSE2_00_02, //
FLAG_BANK_2, MHOUSE2_01_T0, //
FLAG_BANK_2, MHOUSE2_02_KAME, //
FLAG_BANK_2, SHOP00_ITEM_01, //
FLAG_BANK_2, SHOP01_CAFE_01, //
0xFFFF,
};
ResetTimerFlags();
ClearFlagArray(sClearFlags);
if (!CheckGlobalFlag(WATERBEAN_PUT))
ClearGlobalFlag(WATERBEAN_OUT);
if (!GetInventoryValue(ITEM_EARTH_ELEMENT))
ClearGlobalFlag(LV1_CLEAR);
if (!GetInventoryValue(ITEM_FIRE_ELEMENT))
ClearGlobalFlag(LV2_CLEAR);
if (!GetInventoryValue(ITEM_WATER_ELEMENT))
ClearGlobalFlag(LV4_CLEAR);
}
void ClearFlagArray(const u16* p) {
const u16* i;
for (i = p; i[0] != 0xFFFF; i += 2)
ClearLocalFlagByBank(i[0], i[1]);
}
+141 -1
View File
@@ -1,4 +1,4 @@
#include "global.h"
#include "game.h"
#include "itemMetaData.h"
#include "item.h"
#include "message.h"
@@ -123,3 +123,143 @@ const ItemMetaData gItemMetaData[] = {
[ITEM_SKILL_FAST_SPLIT] = { 0x63u, 0u, 0u, 0x2u, 0x74u, TEXT_ITEM_GET, 0x74u, 0x5u },
[ITEM_SKILL_LONG_SPIN] = { 0x63u, 0u, 0u, 0x2u, 0x75u, TEXT_ITEM_GET, 0x75u, 0x5u },
};
// TODO Shop price and item get message
const struct_080FD964 gUnk_080FD964[] = {
[ITEM_NONE] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x1) },
[ITEM_SMITH_SWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x1) },
[ITEM_GREEN_SWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x2) },
[ITEM_RED_SWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x3) },
[ITEM_BLUE_SWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x4) },
[ITEM_UNUSED_SWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x5) },
[ITEM_FOURSWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x6) },
[ITEM_BOMBS] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x1c) },
[ITEM_REMOTE_BOMBS] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x8) },
[ITEM_BOW] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x9) },
[ITEM_LIGHT_ARROW] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0xa) },
[ITEM_BOOMERANG] = { 300, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x24), TEXT_INDEX(TEXT_ITEM_GET, 0xb) },
[ITEM_MAGIC_BOOMERANG] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0xc) },
[ITEM_SHIELD] = { 40, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x02), TEXT_INDEX(TEXT_ITEM_GET, 0x1d) },
[ITEM_MIRROR_SHIELD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0xe) },
[ITEM_LANTERN_OFF] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0xf) },
[ITEM_LANTERN_ON] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x10) },
[ITEM_GUST_JAR] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x11) },
[ITEM_PACCI_CANE] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x12) },
[ITEM_MOLE_MITTS] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x13) },
[ITEM_ROCS_CAPE] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x14) },
[ITEM_PEGASUS_BOOTS] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x15) },
[ITEM_FIRE_ROD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x16) },
[ITEM_OCARINA] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x17) },
[ITEM_ORB_GREEN] = { 0, 0, 0x0, 0x0 },
[ITEM_ORB_BLUE] = { 0, 0, 0x0, 0x0 },
[ITEM_ORB_RED] = { 0, 0, 0x0, 0x0 },
[ITEM_TRY_PICKUP_OBJECT] = { 0, 0, 0x0, 0x0 },
[ITEM_BOTTLE1] = { 100, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x20) },
[ITEM_BOTTLE2] = { 100, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x06), TEXT_INDEX(TEXT_ITEM_GET, 0x20) },
[ITEM_BOTTLE3] = { 100, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x20) },
[ITEM_BOTTLE4] = { 100, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x20) },
[ITEM_BOTTLE_EMPTY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x20) },
[ITEM_BOTTLE_BUTTER] = { 120, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x21) },
[ITEM_BOTTLE_MILK] = { 100, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x22) },
[ITEM_BOTTLE_HALF_MILK] = { 60, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x23) },
[ITEM_BOTTLE_RED_POTION] = { 150, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x24) },
[ITEM_BOTTLE_BLUE_POTION] = { 60, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x25) },
[ITEM_BOTTLE_WATER] = { 1, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x26) },
[ITEM_BOTTLE_MINERAL_WATER] = { 5, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x27) },
[ITEM_BOTTLE_FAIRY] = { 7, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x28) },
#ifdef EU
[ITEM_BOTTLE_PICOLYTE_RED] = { 100, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x01), TEXT_INDEX(TEXT_ITEM_GET, 0x29) },
[ITEM_BOTTLE_PICOLYTE_ORANGE] = { 300, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x06), TEXT_INDEX(TEXT_ITEM_GET, 0x2a) },
[ITEM_BOTTLE_PICOLYTE_YELLOW] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x04), TEXT_INDEX(TEXT_ITEM_GET, 0x2b) },
[ITEM_BOTTLE_PICOLYTE_GREEN] = { 100, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x03), TEXT_INDEX(TEXT_ITEM_GET, 0x2c) },
[ITEM_BOTTLE_PICOLYTE_BLUE] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x05), TEXT_INDEX(TEXT_ITEM_GET, 0x2d) },
[ITEM_BOTTLE_PICOLYTE_WHITE] = { 100, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x02), TEXT_INDEX(TEXT_ITEM_GET, 0x2e) },
#else
[ITEM_BOTTLE_PICOLYTE_RED] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x01), TEXT_INDEX(TEXT_ITEM_GET, 0x29) },
[ITEM_BOTTLE_PICOLYTE_ORANGE] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x06), TEXT_INDEX(TEXT_ITEM_GET, 0x2a) },
[ITEM_BOTTLE_PICOLYTE_YELLOW] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x04), TEXT_INDEX(TEXT_ITEM_GET, 0x2b) },
[ITEM_BOTTLE_PICOLYTE_GREEN] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x03), TEXT_INDEX(TEXT_ITEM_GET, 0x2c) },
[ITEM_BOTTLE_PICOLYTE_BLUE] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x05), TEXT_INDEX(TEXT_ITEM_GET, 0x2d) },
[ITEM_BOTTLE_PICOLYTE_WHITE] = { 200, 0, TEXT_INDEX(TEXT_PICOLYTE, 0x02), TEXT_INDEX(TEXT_ITEM_GET, 0x2e) },
#endif
[BOTTLE_CHARM_NAYRU] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x2f) },
[BOTTLE_CHARM_FARORE] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x30) },
[BOTTLE_CHARM_DIN] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x31) },
[ITEM_32] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x32) },
[ITEM_33] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x33) },
[ITEM_QST_SWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x34) },
[ITEM_QST_BROKEN_SWORD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x35) },
[ITEM_QST_DOGFOOD] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x36) },
[ITEM_QST_LONLON_KEY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x37) },
[ITEM_QST_MUSHROOM] = { 60, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x38) },
[ITEM_QST_BOOK1] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x39) },
[ITEM_QST_BOOK2] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x3a) },
[ITEM_QST_BOOK3] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x3b) },
[ITEM_QST_GRAVEYARD_KEY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x3d) },
[ITEM_QST_TINGLE_TROPHY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x95) },
[ITEM_QST_CARLOV_MEDAL] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x96) },
[ITEM_SHELLS] = { 15, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x05), TEXT_INDEX(TEXT_ITEM_GET, 0x77) },
[ITEM_EARTH_ELEMENT] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x40) },
[ITEM_FIRE_ELEMENT] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x41) },
[ITEM_WATER_ELEMENT] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x42) },
[ITEM_WIND_ELEMENT] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x43) },
[ITEM_GRIP_RING] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x44) },
[ITEM_POWER_BRACELETS] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x45) },
[ITEM_FLIPPERS] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x46) },
[ITEM_MAP] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x47) },
[ITEM_SKILL_SPIN_ATTACK] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x48) },
[ITEM_SKILL_ROLL_ATTACK] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x49) },
[ITEM_SKILL_DASH_ATTACK] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x4a) },
[ITEM_SKILL_ROCK_BREAKER] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x4b) },
[ITEM_SKILL_SWORD_BEAM] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x4c) },
[ITEM_SKILL_GREAT_SPIN] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x4d) },
[ITEM_SKILL_DOWN_THRUST] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x4e) },
[ITEM_SKILL_PERIL_BEAM] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x4f) },
[ITEM_DUNGEON_MAP] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x50) },
[ITEM_COMPASS] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x51) },
[ITEM_BIG_KEY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x52) },
[ITEM_SMALL_KEY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x53) },
[ITEM_RUPEE1] = { 1, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x54) },
[ITEM_RUPEE5] = { 5, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x55) },
[ITEM_RUPEE20] = { 20, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x56) },
[ITEM_RUPEE50] = { 50, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x57) },
[ITEM_RUPEE100] = { 100, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x58) },
[ITEM_RUPEE200] = { 200, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x59) },
[ITEM_5A] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x5a) },
[ITEM_JABBERNUT] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x5b) },
[ITEM_KINSTONE] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x5c) },
[ITEM_BOMBS5] = { 15, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x5d) },
[ITEM_ARROWS5] = { 15, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x5e) },
[ITEM_HEART] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x5f) },
[ITEM_FAIRY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x60) },
#ifdef EU
[ITEM_SHELLS30] = { 300, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x05), TEXT_INDEX(TEXT_ITEM_GET, 0x76) },
#else
[ITEM_SHELLS30] = { 200, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x05), TEXT_INDEX(TEXT_ITEM_GET, 0x76) },
#endif
[ITEM_HEART_CONTAINER] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x62) },
[ITEM_HEART_PIECE] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x18) },
[ITEM_WALLET] = { 80, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x04), TEXT_INDEX(TEXT_ITEM_GET, 0x64) },
#ifdef EU
[ITEM_BOMBBAG] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x07) },
#else
[ITEM_BOMBBAG] = { 600, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x25), TEXT_INDEX(TEXT_ITEM_GET, 0x63) },
#endif
[ITEM_LARGE_QUIVER] = { 600, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x07), TEXT_INDEX(TEXT_ITEM_GET, 0x66) },
[ITEM_KINSTONE_BAG] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x67) },
[ITEM_BRIOCHE] = { 20, 0, TEXT_INDEX(TEXT_BAKERY, 0x01), TEXT_INDEX(TEXT_ITEM_GET, 0x68) },
[ITEM_CROISSANT] = { 30, 0, TEXT_INDEX(TEXT_BAKERY, 0x0a), TEXT_INDEX(TEXT_ITEM_GET, 0x69) },
[ITEM_PIE] = { 40, 0, TEXT_INDEX(TEXT_BAKERY, 0x0b), TEXT_INDEX(TEXT_ITEM_GET, 0x6a) },
[ITEM_CAKE] = { 60, 0, TEXT_INDEX(TEXT_BAKERY, 0x0c), TEXT_INDEX(TEXT_ITEM_GET, 0x6b) },
[ITEM_BOMBS10] = { 30, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x03), TEXT_INDEX(TEXT_ITEM_GET, 0x91) },
[ITEM_BOMBS30] = { 80, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x09), TEXT_INDEX(TEXT_ITEM_GET, 0x92) },
[ITEM_ARROWS10] = { 20, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x08), TEXT_INDEX(TEXT_ITEM_GET, 0x93) },
[ITEM_ARROWS30] = { 50, 0, TEXT_INDEX(TEXT_STOCKWELL, 0x0a), TEXT_INDEX(TEXT_ITEM_GET, 0x94) },
[ITEM_ARROW_BUTTERFLY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x70) },
[ITEM_DIG_BUTTERFLY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x71) },
[ITEM_SWIM_BUTTERFLY] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x72) },
[ITEM_SKILL_FAST_SPIN] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x73) },
[ITEM_SKILL_FAST_SPLIT] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x74) },
[ITEM_SKILL_LONG_SPIN] = { 0, 0, 0x0, TEXT_INDEX(TEXT_ITEM_GET, 0x75) },
};
+591
View File
@@ -0,0 +1,591 @@
/**
* @file itemUtils.c
*
* @brief Item Utils
*/
#include "item.h"
#include "game.h"
#include "itemMetaData.h"
#include "sound.h"
#include "save.h"
#include "object.h"
#include "enemy.h"
#include "message.h"
const s16 gWalletSizes[] = { 100, -4000, 300, -3996, 500, -3992, 999, -3988 };
const u8 gBombBagSizes[] = {
10,
30,
50,
99,
};
const u8 gQuiverSizes[] = {
30,
50,
70,
99,
};
const u16 gUnk_080FD5A8[] = { 1, 5, 20, 50, 100, 200 };
u32 GetSaleItemConfirmMessageID(u32 item) {
const struct_080FD964* ptr = &gUnk_080FD964[item];
return ptr->saleItemConfirmMessageId;
}
s32 GetItemPrice(u32 item) {
const struct_080FD964* ptr = &gUnk_080FD964[item];
return ptr->itemPrice;
}
u32 GiveItem(Item item, u32 param_2) {
u32 uVar4;
u32 result;
u32 uVar9;
const ItemMetaData* metaData;
uVar4 = GetInventoryValue(item);
metaData = &gItemMetaData[item];
if (uVar4 == 0) {
result = *(u16*)&metaData->textId;
} else {
result = *(u16*)&metaData->unk6;
}
if (!ItemIsBottle(item)) {
PutItemOnSlot(item);
if (uVar4 == 0) {
SetInventoryValue(item, 1);
}
}
switch (metaData->unk1) {
case 0:
default:
break;
case 1:
ModHealth(metaData->unk2);
SoundReq(SFX_HEART_GET);
break;
case 2:
ModRupees((u32)gUnk_080FD5A8[metaData->unk2]);
SoundReq(SFX_RUPEE_GET);
break;
case 3:
uVar9 = 0;
while (TRUE) {
if (3 < uVar9) {
return result;
}
if (GetInventoryValue(ITEM_BOTTLE1 + uVar9) == 0)
break;
uVar9++;
}
item = ITEM_BOTTLE1 + uVar9;
if (gSave.stats.bottles[uVar9] == 0) {
gSave.stats.bottles[uVar9] = 0x20;
}
SetInventoryValue(item, 1);
PutItemOnSlot(item);
break;
case 4:
uVar9 = 0;
while (gSave.stats.bottles[uVar9] != 0x20) {
uVar9++;
if (3 < uVar9) {
return result;
}
}
if (3 < uVar9) {
break;
}
gSave.stats.bottles[uVar9] = (u8)item;
SetInventoryValue(item, 1);
SoundReq(SFX_ITEM_GET);
break;
case 5:
ModDungeonKeys(1);
SoundReq(SFX_103);
break;
case 6: // TODO dungeon item?
gSave.dungeonItems[gArea.dungeon_idx] |= metaData->unk2;
break;
case 0xd:
sub_0801E738(0x72);
break;
case 0x12:
if (item == ITEM_BOOMERANG) {
SetInventoryValue(ITEM_MAGIC_BOOMERANG, 0);
} else {
SetInventoryValue(ITEM_BOOMERANG, 0);
}
case 0x11:
LoadItemGfx();
break;
case 7:
if (item == ITEM_BOMBS) {
SetInventoryValue(ITEM_REMOTE_BOMBS, 0);
} else {
SetInventoryValue(ITEM_BOMBS, 0);
}
ModBombs(99);
LoadItemGfx();
break;
case 8:
if (uVar4 == 0) {
SetInventoryValue(ITEM_BOMBS, 1);
PutItemOnSlot(7);
} else {
gSave.stats.bombBagType++;
if (3 < gSave.stats.bombBagType) {
gSave.stats.bombBagType = 3;
}
}
ModBombs(99);
break;
case 9:
ModBombs(metaData->unk2);
SoundReq(SFX_103);
break;
case 0xb:
if (GetInventoryValue(ITEM_LARGE_QUIVER) == 0) {
SetInventoryValue(ITEM_LARGE_QUIVER, 1);
}
ModArrows(99);
LoadItemGfx();
break;
case 0xa:
gSave.stats.quiverType++;
if (3 < gSave.stats.quiverType) {
gSave.stats.quiverType = 3;
}
ModArrows(99);
break;
case 0xc:
ModArrows(metaData->unk2);
SoundReq(SFX_103);
break;
case 0x0e:
SetInventoryValue(ITEM_SHELLS, 1);
ModShells(param_2);
SoundReq(SFX_103);
break;
case 0x0f:
sub_0801E738(param_2);
break;
case 0x10:
gSave.stats.walletType++;
if (gSave.stats.walletType < 4) {
break;
}
gSave.stats.walletType = 3;
break;
}
return result;
}
// TODO Adapt ItemMetaData struct
void sub_08054288(s32 param_1) {
const ItemMetaData* ptr1 = gItemMetaData;
u16* ptr = (u16*)&((ptr1)[param_1]);
MessageFromTarget(ptr[3]);
}
u32 getItemMetaDataGetTextIndex(s32 itemIndex) {
const ItemMetaData* ptr1 = gItemMetaData;
u16* ptr = (u16*)&((ptr1)[itemIndex]);
return ptr[2];
}
u32 sub_080542AC(u32 param_1) {
const ItemMetaData* ptr1 = gItemMetaData;
u8* ptr = (u8*)&((ptr1)[param_1]);
return ptr[3] & 1;
}
void ModShells(s32 shells) {
if (shells == 0) {
shells = 1;
}
shells += gSave.stats.shells;
if (shells < 0) {
shells = 0;
} else if (999 < shells) {
shells = 999;
}
gSave.stats.shells = shells;
}
void ModBombs(s32 bombs) {
s32 bombCount = bombs;
s32 bagSize;
bombCount += gSave.stats.bombCount;
bagSize = gBombBagSizes[gSave.stats.bombBagType];
if (bombCount < 0) {
bombCount = 0;
} else if (bagSize < bombCount) {
bombCount = bagSize;
}
gSave.stats.bombCount = bombCount;
}
void ModArrows(s32 arrows) {
s32 quiverSize;
s32 arrowCount = arrows;
arrowCount += gSave.stats.arrowCount;
quiverSize = gQuiverSizes[gSave.stats.quiverType];
if (arrowCount < 0) {
arrowCount = 0;
} else if (quiverSize < arrowCount) {
arrowCount = quiverSize;
}
gSave.stats.arrowCount = arrowCount;
}
/**
* @brief Returns the slot the item is equipped in.
*
* 0: A
* 1: B
* 2: Not equipped
*/
EquipSlot IsItemEquipped(u32 itemId) {
EquipSlot equipSlot;
if (itemId == gSave.stats.itemButtons[SLOT_A]) {
equipSlot = EQUIP_SLOT_A;
} else if (itemId == gSave.stats.itemButtons[SLOT_B]) {
equipSlot = EQUIP_SLOT_B;
} else {
equipSlot = EQUIP_SLOT_NONE;
}
return equipSlot;
}
void PutItemOnSlot(u32 itemId) {
EquipSlot equipSlot;
u32 itemId2 = itemId;
if (itemId2 < 0x47) {
SetInventoryValue(0, 1);
}
if (itemId2 - 1 < 0x1f) {
equipSlot = EQUIP_SLOT_NONE;
if (gSave.stats.itemButtons[SLOT_A] == ITEM_NONE) {
equipSlot = EQUIP_SLOT_A;
} else if (gSave.stats.itemButtons[SLOT_B] == ITEM_NONE) {
equipSlot = EQUIP_SLOT_B;
}
if (equipSlot == EQUIP_SLOT_NONE) {
u32 temp = gItemMetaData[itemId2].menuSlot;
if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_A]].menuSlot) {
equipSlot = EQUIP_SLOT_A;
} else {
if (temp == gItemMetaData[gSave.stats.itemButtons[SLOT_B]].menuSlot) {
equipSlot = EQUIP_SLOT_B;
}
}
if (equipSlot == EQUIP_SLOT_NONE) {
return;
}
}
ForceEquipItem(itemId2, equipSlot);
}
}
void ForceEquipItem(u32 itemId, u32 equipSlot) {
u32 otherItem;
u32 otherItemSlot;
u32 replacedItem;
if ((itemId - 1 < 0x1f) && (equipSlot < EQUIP_SLOT_NONE)) {
otherItemSlot = equipSlot == EQUIP_SLOT_A;
replacedItem = gSave.stats.itemButtons[equipSlot];
otherItem = gSave.stats.itemButtons[otherItemSlot];
if (gItemMetaData[otherItem].menuSlot == gItemMetaData[itemId].menuSlot) {
otherItem = replacedItem;
}
gSave.stats.itemButtons[equipSlot] = itemId;
gSave.stats.itemButtons[otherItemSlot] = otherItem;
gUnk_0200AF00.unk_13 = 0x7f;
gUnk_0200AF00.unk_14 = 0x7f;
}
}
u32 SetBottleContents(u32 itemId, u32 bottleIndex) {
if (bottleIndex > 3) {
bottleIndex = 0;
for (bottleIndex = 0; gSave.stats.bottles[bottleIndex] != ITEM_BOTTLE_EMPTY;) {
if (++bottleIndex > 3) {
return bottleIndex;
}
}
if (bottleIndex > 3) {
return bottleIndex;
}
}
gSave.stats.bottles[bottleIndex] = itemId;
return bottleIndex;
}
bool32 ItemIsSword(u32 item) {
switch (item) {
case ITEM_SMITH_SWORD:
case ITEM_GREEN_SWORD:
case ITEM_RED_SWORD:
case ITEM_BLUE_SWORD:
case ITEM_FOURSWORD:
return TRUE;
default:
return FALSE;
}
}
bool32 ItemIsShield(u32 id) {
switch (id) {
case ITEM_SHIELD:
case ITEM_MIRROR_SHIELD:
return TRUE;
default:
return FALSE;
}
}
bool32 ItemIsBottle(u32 id) {
switch (id) {
case ITEM_BOTTLE1:
case ITEM_BOTTLE2:
case ITEM_BOTTLE3:
case ITEM_BOTTLE4:
return TRUE;
default:
return FALSE;
}
}
u32 GetBottleContaining(u32 id) {
if (id == gSave.stats.bottles[0]) {
return 1;
} else if (id == gSave.stats.bottles[1]) {
return 2;
} else if (id == gSave.stats.bottles[2]) {
return 3;
} else if (id == gSave.stats.bottles[3]) {
return 4;
} else {
return 0;
}
}
extern u8 gUnk_080FE1C6[];
void sub_08054524(void) {
u32 bVar1;
bVar1 = gArea.locationIndex;
if (gArea.locationIndex == 0) {
bVar1 = gRoomTransition.player_status.field_0x24[0xa];
}
if (bVar1 > 0x16) {
bVar1 = 0;
}
bVar1 = gUnk_080FE1C6[bVar1];
MemCopy(&gAreaDroptables[bVar1], &gRoomVars.currentAreaDroptable, sizeof(Droptable));
}
void DisableRandomDrops(void) {
gRoomVars.randomDropsDisabled = TRUE;
}
void EnableRandomDrops(void) {
gRoomVars.randomDropsDisabled = FALSE;
}
extern void sub_08000F14(s16*, const s16*, const s16*, const s16*);
extern u32 sub_08000F2C(s16*, const s16*, const s16*, const s16*);
u32 CreateItemDrop(Entity* arg0, u32 itemId, u32 itemParameter);
u32 CreateRandomItemDrop(Entity* arg0, u32 arg1) {
extern const u8 gUnk_080FE1B4[] /* = {
ITEM_NONE, ITEM_RUPEE1, ITEM_RUPEE5, ITEM_RUPEE20, ITEM_HEART, ITEM_FAIRY,
ITEM_BOMBS5, ITEM_ARROWS5, ITEM_SHELLS, ITEM_KINSTONE_GREEN, ITEM_KINSTONE_BLUE, ITEM_KINSTONE_RED,
ITEM_ENEMY_BEETLE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE,
}*/;
int r0, r1, rand, summOdds, item;
u32 r3;
const Droptable *ptr2, *ptr3, *ptr4;
Droptable droptable;
r3 = arg1;
if (gRoomVars.randomDropsDisabled != TRUE) {
ptr2 = &gDroptableModifiers[DROPTABLE_NONE];
ptr4 = NULL;
switch (r3) {
case 1 ... 12:
ptr4 = &gEnemyDroptables[r3];
break;
#ifndef EU
case 24:
case 25:
r0 = gRoomVars.unk2;
ptr4 = &gUnk_0800191C[0];
if (r0) {
ptr4++;
}
break;
#endif
case 16 ... 23:
#ifdef EU
case 24:
#endif
ptr2 = &gObjectDroptables[r3 - 16];
case 15:
ptr4 = &gRoomVars.currentAreaDroptable;
break;
case 0:
default:
break;
}
if (ptr4 != 0) {
if ((r1 = gSave.stats.picolyteType) == 0) {
// nop
ptr3 = &gDroptableModifiers[DROPTABLE_NONE];
} else {
#ifdef EU
ptr3 = &gEnemyDroptables[r1 + 9];
#else
ptr3 = &gEnemyDroptables[r1 + 6];
#endif
}
// vector addition, s0 = ptr4 + ptr2 + ptr3
sub_08000F14(droptable.a, ptr4->a, ptr2->a, ptr3->a);
if (gSave.stats.health <= 8) {
droptable.s.hearts += 5;
}
if (gSave.stats.bombCount == 0) {
droptable.s.bombs += 3;
}
if (gSave.stats.arrowCount == 0) {
droptable.s.arrows += 3;
}
if (gSave.stats.rupees <= 10) {
droptable.s.rupee5++;
}
ptr2 = &gDroptableModifiers[DROPTABLE_NONE];
r0 = gSave.stats.hasAllFigurines;
ptr3 = &gDroptableModifiers[DROPTABLE_NONE];
// don't drop shells anymore
if (r0 != 0) {
ptr2 = &gDroptableModifiers[DROPTABLE_NO_SHELLS];
}
// don't drop kinstones anymore
if (gSave.didAllFusions != 0) {
ptr3 = &gDroptableModifiers[DROPTABLE_NO_KINSTONES];
}
// vector addition, s0 = s0 + ptr2 + ptr3
// resulting values are clamped to be >= 0
// returns sum over s0
summOdds = sub_08000F2C(droptable.a, droptable.a, ptr2->a, ptr3->a);
rand = Random();
item = (rand >> 0x18);
item &= 0xF;
rand = rand % summOdds;
{
u32 r3;
for (r3 = 0, r1 = 0; r3 < 0x10; r3++, item = (item + 1) & 0xF) {
if ((r1 += droptable.a[item]) > rand) {
break;
}
}
}
r1 = gUnk_080FE1B4[item];
if (r1 != ITEM_NONE) {
return CreateItemDrop(arg0, r1, 0);
}
}
}
return ITEM_NONE;
}
extern u8 gUnk_080FE1DD[];
u32 CreateItemDrop(Entity* arg0, u32 itemId, u32 itemParameter) {
u32 adjustedParam = itemParameter;
Entity* itemEntity;
switch (itemId) {
case ITEM_ENEMY_BEETLE:
if (!GetInventoryValue(ITEM_SMITH_SWORD)) {
return ITEM_NONE;
}
break;
case ITEM_BOMBS5:
if (!GetInventoryValue(ITEM_BOMBBAG)) {
return ITEM_NONE;
}
break;
case ITEM_ARROWS5:
if (!GetInventoryValue(ITEM_BOW)) {
return ITEM_NONE;
}
break;
case ITEM_SHELLS: {
if (!GetInventoryValue(ITEM_EARTH_ELEMENT)) {
return ITEM_NONE;
}
if (itemParameter == 0) {
adjustedParam = 1;
}
break;
}
case ITEM_KINSTONE:
case ITEM_KINSTONE_GREEN ... ITEM_KINSTONE_RED: {
u32 rand;
if (GetInventoryValue(ITEM_KINSTONE_BAG) == 0) {
return ITEM_NONE;
}
if (3 < gRoomVars.filler1[0]) {
return ITEM_NONE;
}
if (itemId != ITEM_KINSTONE) {
adjustedParam = itemId - ITEM_KINSTONE_GREEN;
rand = (Random() & 0x3f);
adjustedParam = gUnk_080FE1DD[(rand + adjustedParam * 0x40)];
if (adjustedParam == 0) {
itemId = ITEM_NONE;
} else {
itemId = ITEM_KINSTONE;
}
}
break;
}
}
if (itemId != ITEM_NONE) {
if (itemId != ITEM_ENEMY_BEETLE) {
itemEntity = CreateObject(GROUND_ITEM, itemId, adjustedParam);
if (itemEntity != NULL) {
if (arg0 == &gPlayerEntity) {
itemEntity->timer = 1;
} else {
itemEntity->timer = 0;
}
if (arg0->kind == OBJECT) {
if (arg0->id == 99) {
arg0->child = itemEntity;
} else if (arg0->id == 0x1e) {
itemEntity->direction = arg0->animationState << 3 | 0x80;
itemEntity->speed = 0xc0;
itemEntity->zVelocity = Q_16_16(1.5);
}
}
CopyPosition(arg0, itemEntity);
}
} else {
itemEntity = CreateEnemy(BEETLE, 0);
if (itemEntity != NULL) {
itemEntity->x.HALF.HI = arg0->x.HALF.HI;
itemEntity->y.HALF.HI = arg0->y.HALF.HI;
itemEntity->collisionLayer = arg0->collisionLayer;
UpdateSpriteForCollisionLayer(itemEntity);
}
}
}
return itemId;
}
+72 -71
View File
@@ -25,12 +25,12 @@ extern const EntityData gUnk_080FEE58[];
extern const void* gUnk_080FED98[];
void sub_08018AB4(int);
void sub_08018BB4(int);
void sub_08018A58(int);
void sub_08018B50(int);
void sub_080189EC(int);
void sub_0801876C(int, int);
void sub_08018738(u32, int);
void sub_08018BB4(u32 worldEventId);
void sub_08018A58(u32 worldEventId);
void sub_08018B50(u32 worldEventId);
void sub_080189EC(u32 worldEventId);
void sub_0801876C(u32 worldEventId, bool32 isKinstoneFused);
void sub_08018738(u32 kinstoneId, u32 worldEventId);
void ShuffleEzloHints(int count, u16* basePtr);
void sub_08018500();
bool32 sub_080185B4(const struct_gUnk_080B3D20* param_1);
@@ -239,60 +239,60 @@ void sub_080186D4(void) {
}
void sub_080186EC(u32 param_1) {
const struct_080C9CBC* psVar1;
const KinstoneWorldEvent* psVar1;
u32 i;
for (i = 0, psVar1 = gUnk_080C9CBC; i <= 100; psVar1++, i++) {
if (psVar1->unk3 == 8) {
sub_08018738(i, psVar1->evt_type);
for (i = 0, psVar1 = gKinstoneWorldEvents; i <= 100; psVar1++, i++) {
if (psVar1->subtask == SUBTASK_WORLDEVENT) {
sub_08018738(i, psVar1->worldEventId);
}
}
}
void sub_08018710(u32 param_1) {
const struct_080C9CBC* psVar1;
void sub_08018710(u32 previousworldEventId) {
const KinstoneWorldEvent* psVar1;
u32 i;
for (i = 0, psVar1 = gUnk_080C9CBC; i <= 100; psVar1++, i++) {
if (psVar1->unk3 == 8 && param_1 != psVar1->evt_type) {
sub_08018738(i, psVar1->evt_type);
for (i = 0, psVar1 = gKinstoneWorldEvents; i <= 100; psVar1++, i++) {
if (psVar1->subtask == SUBTASK_WORLDEVENT && previousworldEventId != psVar1->worldEventId) {
sub_08018738(i, psVar1->worldEventId);
}
}
}
void sub_08018738(u32 param_1, int param_2) {
struct_080FE320* ptr = &gUnk_080FE320[param_2];
void sub_08018738(u32 kinstoneId, u32 worldEventId) {
const WorldEvent* ptr = &gWorldEvents[worldEventId];
if (ptr->area == gRoomControls.area && ptr->room == gRoomControls.room) {
sub_0801876C(param_2, CheckKinstoneFused(param_1));
sub_0801876C(worldEventId, CheckKinstoneFused(kinstoneId));
}
}
void sub_0801876C(int param_1, int param_2) {
void sub_0801876C(u32 worldEventId, bool32 isKinstoneFused) {
Entity* roomEnt;
Entity* ent;
u32 uVar3;
u32 tmp;
u8* puVar4;
u32 uVar5;
struct_080FE320* ptr;
const WorldEvent* ptr;
ptr = &gUnk_080FE320[param_1];
switch (ptr->evt_type) {
case 6:
if (param_2 == 0) {
ptr = &gWorldEvents[worldEventId];
switch (ptr->type) {
case WORLD_EVENT_TYPE_6:
if (isKinstoneFused == 0) {
sub_08018AB4((ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6);
}
break;
case 0:
case WORLD_EVENT_TYPE_0:
break;
case 2:
if (param_2 != 0) {
sub_08018BB4(param_1);
case WORLD_EVENT_TYPE_2:
if (isKinstoneFused != 0) {
sub_08018BB4(worldEventId);
}
break;
case 1:
if (param_2 == 0) {
case WORLD_EVENT_TYPE_1:
if (isKinstoneFused == 0) {
return;
}
if (CheckGlobalFlag(ptr->flag)) {
@@ -300,8 +300,8 @@ void sub_0801876C(int param_1, int param_2) {
}
LoadRoomEntity(gUnk_080FEC28 + ptr->entity_idx);
break;
case 3:
if (param_2 == 0) {
case WORLD_EVENT_TYPE_3:
if (isKinstoneFused == 0) {
return;
}
if (GetInventoryValue(ptr->flag)) {
@@ -309,47 +309,47 @@ void sub_0801876C(int param_1, int param_2) {
}
LoadRoomEntity(gUnk_080FEBE8 + ptr->entity_idx);
break;
case 4:
if (param_2 == 0) {
sub_08018A58(param_1);
case WORLD_EVENT_TYPE_4:
if (isKinstoneFused == 0) {
sub_08018A58(worldEventId);
}
break;
case 5:
if (param_2 != 0) {
sub_08018B50(param_1);
case WORLD_EVENT_TYPE_5:
if (isKinstoneFused != 0) {
sub_08018B50(worldEventId);
}
break;
case 7:
if (param_2 != 0) {
case WORLD_EVENT_TYPE_7:
if (isKinstoneFused != 0) {
return;
}
if (ptr->entity_idx != 0x80) {
LoadRoomEntity(gUnk_080FECC8 + ptr->entity_idx);
} else {
sub_080189EC(param_1);
sub_080189EC(worldEventId);
}
break;
case 0x19:
case WORLD_EVENT_TYPE_25:
roomEnt = LoadRoomEntity(&gUnk_080FED18[ptr->entity_idx]);
if (roomEnt != 0) {
roomEnt->type = param_2 ? 2 : 0;
roomEnt->type = isKinstoneFused ? 2 : 0;
}
break;
case 8:
if (param_2 == 0) {
case WORLD_EVENT_TYPE_8:
if (isKinstoneFused == 0) {
return;
}
SetTileType(0x168, (ptr->x >> 4 & 0x3f) | (ptr->y >> 4 & 0x3f) << 6, 1);
break;
case 0xb:
if (param_2 != 0) {
case WORLD_EVENT_TYPE_11:
if (isKinstoneFused != 0) {
LoadRoomEntity(&gUnk_080FED58[ptr->entity_idx]);
gRoomVars.field_0x8c[ptr->entity_idx] = (void*)gUnk_080FED98[ptr->entity_idx];
}
break;
case 9:
if (param_2 == 0) {
case WORLD_EVENT_TYPE_9:
if (isKinstoneFused == 0) {
return;
}
ent = LoadRoomEntity(&gUnk_080FEE78[ptr->entity_idx]);
@@ -366,38 +366,38 @@ void sub_0801876C(int param_1, int param_2) {
SetTileType(uVar3, uVar5, 1);
}
break;
case 0x18:
if (param_2 != 0) {
case WORLD_EVENT_TYPE_24:
if (isKinstoneFused != 0) {
LoadRoomEntityList(gUnk_080FEE18);
}
break;
case 0xf:
if (param_2 != 0) {
case WORLD_EVENT_TYPE_15:
if (isKinstoneFused != 0) {
LoadRoomEntity(gUnk_080FEE58);
} else {
LoadRoomEntity(gUnk_080FEE48);
}
break;
case 0x11:
if (param_2 != 0) {
case WORLD_EVENT_TYPE_17:
if (isKinstoneFused != 0) {
SetLocalFlagByBank(FLAG_BANK_1, SOUGEN_05_BOMB_00);
LoadRoomEntityList(gUnk_080FEE38);
}
break;
case 0x1a:
case 0x1b:
case 0x1c:
case WORLD_EVENT_TYPE_26:
case WORLD_EVENT_TYPE_27:
case WORLD_EVENT_TYPE_28:
break;
}
}
void sub_080189EC(int param_1) {
void sub_080189EC(u32 worldEventId) {
u32 i;
int iVar1;
int tilePosition;
struct_080FE320* ptr;
const WorldEvent* ptr;
ptr = &gUnk_080FE320[param_1];
ptr = &gWorldEvents[worldEventId];
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
@@ -414,14 +414,14 @@ void sub_080189EC(int param_1) {
}
}
void sub_08018A58(int param_1) {
void sub_08018A58(u32 worldEventId) {
u32 i;
int iVar2;
u32 j;
int tilePosition;
struct_080FE320* ptr;
const WorldEvent* ptr;
ptr = &gUnk_080FE320[param_1];
ptr = &gWorldEvents[worldEventId];
tilePosition = (ptr->x >> 4) & 0x3f;
tilePosition |= ((ptr->y >> 4) & 0x3f) << 6;
@@ -470,14 +470,14 @@ void sub_08018B10(int param_1) {
}
}
void sub_08018B50(int param_1) {
void sub_08018B50(u32 worldEventId) {
u32 i;
int iVar2;
u32 j;
int tilePosition;
struct_080FE320* ptr;
const WorldEvent* ptr;
ptr = &gUnk_080FE320[param_1];
ptr = &gWorldEvents[worldEventId];
if ((ptr->entity_idx & 0x80) == 0) {
iVar2 = 0x200;
} else {
@@ -495,14 +495,15 @@ void sub_08018B50(int param_1) {
}
}
void sub_08018BB4(int param_1) {
// TODO world event that loads tile entity
void sub_08018BB4(u32 worldEventId) {
u32 layer;
TileEntity tile;
struct_080FE320* ptr;
const WorldEvent* ptr;
u32 position;
MemCopy(gUnk_080FEAC8 + param_1, &tile, sizeof(TileEntity));
ptr = &gUnk_080FE320[param_1];
MemCopy(gUnk_080FEAC8 + worldEventId, &tile, sizeof(TileEntity));
ptr = &gWorldEvents[worldEventId];
tile.tilePos = (ptr->x >> 4 & 0x3f) | (((ptr->y) >> 4 & 0x3f) << 6);
sub_0804B3C4(&tile);
if (CheckLocalFlag(tile.localFlag) == 0) {
+1 -1
View File
@@ -169,7 +169,7 @@ const SaveHeader sDefaultSettings = {
};
// single misplaced ldr
NONMATCH("asm/non_matching/InitSaveHeader.inc", /*static*/ void InitSaveHeader(void)) {
/*static*/ NONMATCH("asm/non_matching/InitSaveHeader.inc", void InitSaveHeader(void)) {
u32 b;
if (!CheckHeaderValid()) {
+20 -13
View File
@@ -7,6 +7,7 @@
#include "manager/enterRoomTextboxManager.h"
#include "area.h"
#include "common.h"
#include "fileselect.h"
#include "functions.h"
#include "game.h"
#include "message.h"
@@ -14,18 +15,24 @@
extern u8 gUnk_02034DF0[0x2F2];
extern const u16 gUnk_08108DE8[];
extern void (*const EnterRoomTextboxManager_Actions[])(EnterRoomTextboxManager*);
extern const u8 gUnk_08108E30[0x18];
extern const u8 gUnk_08108E48[0x18];
extern const u8 gUnk_08108E60[];
const u16 gUnk_08108DE8[] = { 0, 0x70b, 0x70c, 0x70d, 0x70e, 0x70f, 0x710, 0x711, 0x712, 0x713, 0x714,
0x715, 0x716, 0x717, 0x718, 0x719, 0x71a, 0x71b, 0x71c, 0x71d, 0x71e, 0x71f,
0x726, 0x720, 0x720, 0x721, 0x722, 0x723, 0x725, 0x727, 0x724, 0x728 };
void sub_0805E140(EnterRoomTextboxManager*);
void sub_0805E18C(EnterRoomTextboxManager*);
void (*const EnterRoomTextboxManager_Actions[])(EnterRoomTextboxManager*) = {
sub_0805E140,
sub_0805E18C,
};
extern void sub_0805F46C(void*, const void*);
extern const Font gUnk_08108E30;
extern const Font gUnk_08108E48;
extern const u8 gUnk_08108E60[];
void sub_0805E140(EnterRoomTextboxManager*);
void sub_0805E18C(EnterRoomTextboxManager*); // unused?
void sub_0805E1D8(EnterRoomTextboxManager*);
void sub_0805E1F8(u32, u32);
void sub_0805E1F8(u32, bool32);
void EnterRoomTextboxManager_Main(EnterRoomTextboxManager* this) {
EnterRoomTextboxManager_Actions[super->action](this);
@@ -65,21 +72,21 @@ void sub_0805E1D8(EnterRoomTextboxManager* this) {
DeleteThisEntity();
}
void sub_0805E1F8(u32 unk0, u32 unk1) {
void sub_0805E1F8(u32 unk0, bool32 isDungeon) {
struct {
u8 unk_00[4];
u8 unk_04;
u8 unk_05;
u8 unk_06[3];
} PACKED tmp;
const u8* tmp2;
const Font* font;
MemClear(&gUnk_02034DF0, 0x80);
MemCopy(gUnk_08108E60, &tmp, sizeof(tmp));
tmp.unk_04 = unk0 >> 8;
tmp.unk_05 = unk0;
tmp2 = gUnk_08108E48;
if (!unk1)
tmp2 = gUnk_08108E30;
sub_0805F46C(&tmp, tmp2);
font = &gUnk_08108E48;
if (!isDungeon)
font = &gUnk_08108E30;
ShowTextBox((u32)&tmp, font);
gScreen.bg0.updated = 1;
}
+2 -2
View File
@@ -63,14 +63,14 @@ void sub_0805B474(StaticBackgroundManager* this) {
}
void sub_0805B4B4(StaticBackgroundManager* this) {
sub_0805B4D0(super->type);
LoadStaticBackground(super->type);
if (super->type == 2) {
sub_0806D0F8();
}
StaticBackgroundManager_Main(this);
}
void sub_0805B4D0(u32 param_1) {
void LoadStaticBackground(u32 param_1) {
static const u8 gUnk_08108C5C[] = { 0x14, 0x15, 0x14, 0x2f, 0x4b, 0x4e, 0x4d, 0 };
s32 iVar1;
u32 uVar2;
+1 -1
View File
@@ -58,7 +58,7 @@ void sub_080595E4(WeatherChangeManager* this) {
gRoomVars.unk_10[0] = 0xFF;
sub_08059690(this);
sub_080596E0(this);
sub_0805B4D0(0);
LoadStaticBackground(0);
}
void sub_08059608(WeatherChangeManager* this) {
@@ -1,23 +1,27 @@
#include "global.h"
/**
* @file figurineMenu.c
* @ingroup Subtasks
*
* @brief Figurine Menu Subtask
*/
#include "figurineMenu.h"
#include "common.h"
#include "flags.h"
#include "functions.h"
#include "game.h"
#include "main.h"
#include "menu.h"
#include "sound.h"
#include "common.h"
#include "screen.h"
#include "save.h"
#include "flags.h"
#include "subtask.h"
#include "object.h"
#include "game.h"
#include "functions.h"
#include "message.h"
#include "object.h"
#include "pauseMenu.h"
#include "save.h"
#include "screen.h"
#include "sound.h"
#include "subtask.h"
#include "subtask2.h"
#include "ui.h"
extern const struct {
u8 filler[7];
u8 unk7;
} gUnk_080FC3E4[];
void sub_080A4DA8(u32);
void sub_080A4B44(void);
void FigurineMenu_080A4978(void);
@@ -47,13 +51,7 @@ const KeyButtonLayout gUnk_0812813C = {
};
extern u8 gUnk_020344A0[8];
typedef struct {
u8 unk0;
u8 unk1;
u16 unk2;
u16 unk4;
u16 unk6;
} struct_08128AD8;
extern const struct_08128AD8 gUnk_08128AD8[];
Subtask FigurineMenu0_Type0;
@@ -64,6 +62,7 @@ Subtask FigurineMenu1_Type0;
Subtask FigurineMenu1_Type1;
Subtask FigurineMenu1_Type2;
Subtask FigurineMenu1_Type3;
void Subtask_FigurineMenu(void) {
static Subtask* const figurineMenu1_Types[] = {
FigurineMenu0_Type0,
@@ -135,7 +134,7 @@ void FigurineMenu0_Type0(void) {
void FigurineMenu0_Type1(void) {
if (gFadeControl.active == 0) {
CreateObject(OBJECT_A2, gUnk_080FC3E4[gFigurineMenu.figure_idx].unk7, 0);
CreateObject(OBJECT_A2, gUnk_080FC3E4[gFigurineMenu.figure_idx].type, 0);
SetMenuType(2);
}
}
@@ -444,7 +443,7 @@ const struct_08128184 gUnk_08128184 = {
};
extern struct_020227E8 gUnk_020227E8[];
extern void sub_0805F46C(u32, const struct_0812816C*);
extern void ShowTextBox(u32, const struct_0812816C*);
void sub_080A4BA0(u32 arg1, u32 arg2) {
int r0, r5, r6;
@@ -497,9 +496,9 @@ void sub_080A4BA0(u32 arg1, u32 arg2) {
s2.unk9 = r5;
s0.unk0 += 0xb;
if (gSaveHeader->language == 0) {
sub_0805F46C((u32)&s2, &s0);
ShowTextBox((u32)&s2, &s0);
} else {
sub_0805F46C(r5, &s0);
ShowTextBox(r5, &s0);
}
}
gScreen.bg3.updated = 1;
@@ -538,7 +537,7 @@ u32 sub_080A4CBC(u32 param_1) {
MemCopy(&gBG1Buffer, (void*)0x600e000, sizeof(gBG1Buffer));
iVar1 = sub_080A4948(param_1);
if (iVar1 != 0) {
sub_0805F46C(param_1 + 0x900, &gUnk_08128190);
ShowTextBox(param_1 + 0x900, &gUnk_08128190);
}
gScreen.bg1.updated = 1;
}
@@ -585,6 +584,7 @@ void sub_080A4DA8(u32 param_1) {
sub_080A4DB8(param_1);
}
// Render screen?
void sub_080A4DB8(u32 param_1) {
const struct_08128AD8* ptr;
@@ -603,25 +603,25 @@ void sub_080A4DB8(u32 param_1) {
gScreen.bg0.updated = 1;
gScreen.bg1.xOffset = 0;
gScreen.bg1.yOffset = 0;
gScreen.bg1.control = ptr->unk4;
gScreen.bg1.control = ptr->bg1Control;
gScreen.bg1.updated = 1;
gScreen.bg2.xOffset = 0;
gScreen.bg2.yOffset = 0;
gScreen.bg2.control = ptr->unk6;
gScreen.bg2.control = ptr->bg2Control;
gScreen.bg2.updated = 1;
gScreen.bg3.xOffset = 0;
gScreen.bg3.yOffset = 0;
gScreen.bg3.control = 0x1e0b;
if (ptr->unk0 != 0) {
LoadPaletteGroup(ptr->unk0);
if (ptr->paletteGroup != 0) {
LoadPaletteGroup(ptr->paletteGroup);
}
if (ptr->unk1 != 0) {
LoadGfxGroup(ptr->unk1);
if (ptr->gfxGroup != 0) {
LoadGfxGroup(ptr->gfxGroup);
}
}
void sub_080A4E84(u8 param_1) {
gPauseMenuOptions.unk14 = param_1;
gPauseMenuOptions.screen2 = param_1;
}
void sub_080A4E90(u8 param_1) {
@@ -1,3 +1,9 @@
/**
* @file kinstoneMenu.c
* @ingroup Subtasks
*
* @brief Kinstone Menu Subtask
*/
#include "area.h"
#include "common.h"
#include "enemy.h"
@@ -221,12 +227,12 @@ void KinstoneMenu_Type1(void) {
}
void KinstoneMenu_Type2(void) {
const struct_080C9CBC* ptr;
const KinstoneWorldEvent* ptr;
if (gMenu.column_idx == 6) {
gFuseInfo._0 = 6;
ptr = &gUnk_080C9CBC[gFuseInfo._3];
if (ptr->unk3 != 0) {
MenuFadeIn(ptr->unk3, ptr->evt_type);
ptr = &gKinstoneWorldEvents[gFuseInfo.kinstoneId];
if (ptr->subtask != 0) {
MenuFadeIn(ptr->subtask, ptr->worldEventId);
} else {
Subtask_Exit();
}
@@ -259,8 +265,8 @@ void KinstoneMenu_Type3_Overlay0(void) {
}
void KinstoneMenu_Type3_Overlay1(void) {
u32 temp = gUnk_080C9CBC[gKinstoneMenu.unk2a].unk5;
if (temp != gUnk_080C9CBC[gFuseInfo._3].unk5) {
u32 temp = gKinstoneWorldEvents[gKinstoneMenu.unk2a].unk5;
if (temp != gKinstoneWorldEvents[gFuseInfo.kinstoneId].unk5) {
SoundReq(SFX_ITEM_SHIELD_BOUNCE);
SetMenuType(4);
} else {
@@ -313,8 +319,8 @@ void KinstoneMenu_Type5(void) {
void KinstoneMenu_Type5_Overlay0(void) {
gMenu.column_idx = 5;
WriteBit(gSave.unk241, gFuseInfo._3);
if (++gSave.unk117 > 99) {
WriteBit(gSave.fusedKinstones, gFuseInfo.kinstoneId);
if (++gSave.fusedKinstoneCount > 99) {
gSave.didAllFusions = 1;
}
KinstoneMenu_080A4468();
@@ -499,16 +505,16 @@ void KinstoneMenu_080A422C(void) {
}
gOamCmd.x = t2;
sub_080A42E0(gFuseInfo._3, 0);
sub_080A42E0(gFuseInfo.kinstoneId, 0);
}
void sub_080A42E0(u32 param_1, u32 param_2) {
void sub_080A42E0(u32 kinstoneId, u32 param_2) {
u8 uVar1;
s32 sVar2;
s32 sVar3;
s32 iVar4;
const struct_080C9CBC* ptr = &gUnk_080C9CBC[param_1];
const KinstoneWorldEvent* ptr = &gKinstoneWorldEvents[kinstoneId];
if (param_2 == 0xff) {
uVar1 = ptr->unk2;
@@ -538,7 +544,7 @@ void sub_080A42E0(u32 param_1, u32 param_2) {
}
{
int t;
t = ptr->unk0;
t = ptr->objPalette;
t <<= 0xc;
t |= 0x800;
t |= (iVar4 << 4) + 0x300;
@@ -602,7 +608,7 @@ u32 sub_080A4418(u32 param_1, u32 param_2) {
void KinstoneMenu_080A4468(void) {
gUnk_03003DF0.unk_2 = 0;
gUnk_03003DF0.unk_4[3] = 0;
sub_0801E6C8(gFuseInfo._3);
sub_0801E6C8(gFuseInfo.kinstoneId);
sub_0801E798(gKinstoneMenu.unk2a);
}
File diff suppressed because it is too large Load Diff
+276
View File
@@ -0,0 +1,276 @@
/**
* @file pauseMenuScreen6.c
*
* @brief Pause Menu Screen 6
*/
#include "common.h"
#include "fileselect.h"
#include "flags.h"
#include "functions.h"
#include "kinstone.h"
#include "main.h"
#include "menu.h"
#include "pauseMenu.h"
#include "save.h"
#include "screen.h"
typedef struct {
u8 unk0;
u8 unk1;
u16 unk2;
u16 unk4;
u16 unk6;
} struct_sub_080A698C;
extern u8 gUnk_08128E80[];
extern u16 gUnk_02017AA0[];
void sub_080A68D4();
void PauseMenu_Screen_6(void) {
extern void (*const gUnk_08128E78[])(void);
const struct_gUnk_08128E94* ptr;
gUnk_08128E78[gMenu.menuType]();
ptr = &gUnk_08128E94[gMenu.field_0x3];
gScreen.bg1.yOffset = -ptr->unk5;
gScreen.bg2.yOffset = gMenu.field_0xa - (s8)ptr->unk6;
sub_080A66D0();
}
void sub_080A6650(void) {
extern u8 gUnk_08128E84[];
u32 temp;
sub_080A70AC((KeyButtonLayout*)gUnk_08128E84);
temp = gPauseMenuOptions.unk2[4];
gMenu.field_0x3 = temp;
sub_080A67C4(temp);
sub_080A68D4();
SetMenuType(1);
}
void sub_080A667C(void) {
u32 uVar1;
u32 uVar2;
const struct_gUnk_08128E94* ptr;
gMenu.field_0xc = gUnk_08128E80;
ptr = &gUnk_08128E94[gMenu.field_0x3];
uVar2 = gMenu.field_0xa;
switch (gInput.heldKeys) {
case DPAD_UP:
if (uVar2 != 0) {
uVar2 -= 2;
}
break;
case DPAD_DOWN:
uVar1 = ptr->unk2;
if (uVar1 > uVar2) {
uVar2 += 2;
}
if (uVar1 < uVar2) {
uVar2 = uVar1;
}
break;
}
gMenu.field_0xa = uVar2;
sub_080A6FB4(gMenu.field_0x3, 0);
}
void sub_080A66D0(void) {
u32 bVar2;
u32 bVar3;
u8 bVar4;
u32 uVar5;
u32 uVar8;
struct_sub_080A698C* ptr;
const struct_gUnk_08128E94* ptr2;
gOamCmd._4 = 0;
gOamCmd._6 = 0;
gOamCmd.x = 0x78;
ptr2 = &gUnk_08128E94[gMenu.field_0x3];
gGenericMenu.unk2c++;
if (gGenericMenu.unk2b != 1 && ((gGenericMenu.unk2c & 0x10) != 0)) {
gOamCmd._8 = 0x800;
if (gMenu.field_0xa != 0) {
gOamCmd.y = 0xc;
DrawDirect(DRAW_DIRECT_SPRITE_INDEX, 0x71);
}
if (ptr2->unk2 > gMenu.field_0xa) {
gOamCmd.y = 0x84;
DrawDirect(DRAW_DIRECT_SPRITE_INDEX, 0x72);
}
}
bVar2 = ptr2->unk7;
bVar3 = ptr2->unk3;
uVar5 = gMenu.field_0xa;
gOamCmd._4 = 0;
gOamCmd._6 = 0;
gOamCmd._8 = 0xc00;
bVar4 = gGenericMenu.unk2c & 0x20;
for (ptr = (struct_sub_080A698C*)&gMapDataBottomSpecial; ptr->unk2 != 0; ptr++) {
uVar8 = 0;
if (ptr->unk0 == 1) {
if (bVar4 != 0) {
uVar8 = 1;
}
} else if (bVar4 == 0) {
uVar8 = 1;
}
if (uVar8 != 0) {
gOamCmd.x = ptr->unk4 + bVar2;
gOamCmd.y = ptr->unk6 + bVar3 - uVar5;
DrawDirect(ptr->unk2, ptr->unk1);
}
}
}
void sub_080A67C4(u32 param_1) {
u16* puVar2;
int i;
int iVar4;
s32 room;
const struct_gUnk_08128E94* ptr;
LoadPaletteGroup(param_1 + 0xba);
iVar4 = param_1 + 0x5f;
switch (param_1) {
case 0x9:
if (CheckGlobalFlag(TATEKAKE_HOUSE)) {
iVar4 = 0x70;
}
break;
case 0xb:
if (CheckKinstoneFused(KINSTONE_E)) {
iVar4 = 0x71;
}
break;
case 0xe:
if (gUI.roomControls.area == 8) {
room = gUI.roomControls.room;
iVar4 = (u8)(room % 3) + 0x72;
}
break;
}
LoadGfxGroup(iVar4);
ptr = &gUnk_08128E94[param_1];
puVar2 = &gUnk_02017AA0[gUnk_03003DE4[0] * 0x500];
for (i = 0; i <= 7; puVar2++, i++) {
*puVar2 = 0x1e0a;
}
for (i = 8; i < (int)(ptr->unk5 + ptr->unk4); puVar2++, i++) {
*puVar2 = 0x1e0b;
}
for (; i < 0xa0; puVar2++, i++) {
*puVar2 = 0x1e0a;
}
SetVBlankDMA((u16*)&gUnk_02017AA0[gUnk_03003DE4[0] * 0x500], (u16*)REG_ADDR_BG3CNT,
((DMA_ENABLE | DMA_START_HBLANK | DMA_16BIT | DMA_REPEAT | DMA_SRC_INC | DMA_DEST_RELOAD) << 16) +
0x1);
gMenu.field_0xa = ptr->unk2 >> 1;
MemClear(&gMapDataBottomSpecial, 0x400);
}
void sub_080A68D4(void) {
u32 uVar1;
int iVar6;
struct_gUnk_08128F58* pcVar4;
u32 i;
u32 uVar4;
const WorldEvent* ptr;
if ((gPlayerState.flags & PL_NO_CAP) != 0) {
iVar6 = 101;
} else {
iVar6 = 100;
}
sub_080A698C(gRoomTransition.player_status.overworld_map_x, gRoomTransition.player_status.overworld_map_y,
DRAW_DIRECT_SPRITE_INDEX, iVar6 + 0x100);
uVar1 = sub_080A6F40();
uVar1 &= gSave.field_0x20;
for (pcVar4 = gUnk_08128F58, i = 0; pcVar4->frameIndex != 0; i++, pcVar4++) {
if (((1 << i) & uVar1) != 0) {
sub_080A698C(pcVar4->unk4, pcVar4->unk6, DRAW_DIRECT_SPRITE_INDEX, pcVar4->unk3);
}
}
for (i = 10; i <= 100; i++) {
if (CheckKinstoneFused(i) && !sub_0801E810(i)) {
uVar4 = gKinstoneWorldEvents[i].unk7;
ptr = &gWorldEvents[gKinstoneWorldEvents[i].worldEventId];
sub_080A698C(ptr->_c, ptr->_e, DRAW_DIRECT_SPRITE_INDEX, uVar4 + 100);
}
}
}
void sub_080A698C(u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
int iVar1;
iVar1 = sub_080A69E0(param_1, param_2);
if (0 < iVar1) {
((struct_sub_080A698C*)&gMapDataBottomSpecial)[gGenericMenu.unk2d].unk0 = param_4 >> 8;
((struct_sub_080A698C*)&gMapDataBottomSpecial)[gGenericMenu.unk2d].unk1 = param_4;
((struct_sub_080A698C*)&gMapDataBottomSpecial)[gGenericMenu.unk2d].unk2 = param_3;
((struct_sub_080A698C*)&gMapDataBottomSpecial)[gGenericMenu.unk2d].unk4 = iVar1;
((struct_sub_080A698C*)&gMapDataBottomSpecial)[gGenericMenu.unk2d].unk6 = iVar1 >> 0x10;
gGenericMenu.unk2d++;
}
}
s32 sub_080A69E0(u32 param_1, u32 param_2) {
const struct_08127F94* pbVar1;
int iVar3;
if ((param_1 | param_2) == 0)
return -1;
pbVar1 = sub_080A6A80(param_1, param_2);
if (pbVar1 == NULL)
return -1;
if (gMenu.field_0x3 != pbVar1->_4)
return -1;
switch (gMenu.field_0x3) {
case 4:
case 7:
if (gMenu.field_0x3 == 4) {
iVar3 = 9;
} else {
iVar3 = 7;
}
param_2 -= gAreaRoomHeaders[iVar3]->map_y;
break;
break;
case 15:
param_1 -= 0x108;
break;
}
param_1 = (s32)((param_1 - pbVar1->_0 * 0x10) * 100) / 0x23a;
param_2 = (s32)((param_2 - pbVar1->_1 * 0x10) * 100) / 0x23a;
return (param_2 << 0x10) | param_1;
}
struct_08127F94* sub_080A6A80(u32 param_1, u32 param_2) {
struct_08127F94* pbVar1;
param_1 >>= 4;
param_2 >>= 4;
for (pbVar1 = gUnk_08127F94; pbVar1->_0 != 0xff; pbVar1++) {
if (pbVar1->_0 <= param_1 && pbVar1->_2 >= param_1 && pbVar1->_1 <= param_2 && pbVar1->_3 >= param_2) {
return pbVar1;
}
}
return NULL;
}
-567
View File
@@ -1,567 +0,0 @@
#include "global.h"
#include "menu.h"
#include "sound.h"
#include "subtask.h"
#include "screen.h"
#include "item.h"
#include "common.h"
#include "game.h"
#include "main.h"
#include "save.h"
#include "itemMetaData.h"
#include "structures.h"
#include "functions.h"
#include "ui.h"
extern void sub_080A4DB8(u32);
void sub_080A5128(void);
void sub_080A51D4(void);
bool32 sub_080A51F4(void);
void sub_080A5F48(u32, u32);
Subtask PauseMenu_Variant0;
Subtask PauseMenu_Variant1;
Subtask PauseMenu_Variant2;
Subtask PauseMenu_Variant3;
Subtask PauseMenu_Variant4;
Subtask PauseMenu_Variant5;
void Subtask_PauseMenu(void) {
static Subtask* const pauseMenu_Variants[] = {
PauseMenu_Variant0, PauseMenu_Variant1, PauseMenu_Variant2,
PauseMenu_Variant3, PauseMenu_Variant4, PauseMenu_Variant5,
};
if (gPauseMenuOptions.unk11 == 6) {
SetBgmVolume(0x100);
Subtask_Exit();
} else {
FlushSprites();
pauseMenu_Variants[gPauseMenuOptions.unk11]();
sub_080A5128();
UpdateUIElements();
DrawUIElements();
if (gPauseMenuOptions.unk11 != 4) {
gUnk_08128A38[gPauseMenuOptions.unk1].func();
}
CopyOAM();
{
u32 t = gPauseMenuOptions.unk16;
u32 t2 = (t != 0) ? 0xe46 : 0;
gScreen.controls.layerFXControl = t2;
gScreen.controls.alphaBlend = (t << 8) | (0x10 - t);
}
}
}
struct_08127F94* sub_080A6A80(u32, u32);
extern u8 gUnk_02034492[];
void sub_0801E8D4(void);
s32 sub_080A50A0(s32);
void PauseMenu_Variant0(void) {
struct_08127F94* ptr;
int r0, r1;
sub_0801E8D4();
sub_080A4D34();
r1 = 4;
do {
gUnk_02034492[r1] = 0;
r1++;
} while (r1 <= 0xd);
ptr = sub_080A6A80((u16)gRoomTransition.player_status.overworld_map_x,
(u16)gRoomTransition.player_status.overworld_map_y);
gPauseMenuOptions.unk2[4] = ptr->_4;
gPauseMenuOptions.unk2[5] = sub_0801DB94();
if (IsItemEquipped(ITEM_LANTERN_ON) != EQUIP_SLOT_NONE) {
r1 = 0x10;
} else {
r1 = 0xf;
}
gPauseMenuOptions.unk15 = r1;
r0 = gUnk_08128A38[gPauseMenuOptions.unk1].unk1;
r0 = sub_080A50A0(r0);
gPauseMenuOptions.unk1 = r0;
gPauseMenuOptions.unk14 = r0;
sub_080A4DB8(r0);
SetFade(FADE_INSTANT, 0x20);
sub_080A4E90(1);
}
void PauseMenu_Variant1(void) {
if (gFadeControl.active == 0) {
sub_080A4E90(2);
}
}
void PauseMenu_Variant2(void) {
int iVar1;
u32 uVar2;
int iVar4;
s32 bVar5;
if (sub_080A51F4() && (gMenu.field_0xc != NULL)) {
iVar1 = -1;
switch (gInput.newKeys) {
case START_BUTTON:
iVar1 = 0;
break;
case L_BUTTON:
iVar1 = 1;
break;
case R_BUTTON:
iVar1 = 2;
break;
case B_BUTTON:
iVar1 = 3;
break;
}
if (iVar1 >= 0) {
switch (bVar5 = gMenu.field_0xc[iVar1]) {
case 0:
break;
case 4 ... 6:
case 0xf:
uVar2 = GetInventoryValue(ITEM_MAP);
if (uVar2 == 0) {
iVar4 = 1;
if (iVar1 == 1) {
iVar4 = 2;
}
bVar5 = gMenu.field_0xc[iVar4];
}
default:
gPauseMenuOptions.unk14 = bVar5;
SoundReq(SFX_TEXTBOX_OPEN);
gMenu.field_0xc = NULL;
break;
}
}
}
bVar5 = sub_080A50A0(gPauseMenuOptions.unk14);
if (gPauseMenuOptions.unk1 != bVar5) {
gPauseMenuOptions.unk14 = bVar5;
sub_080A51D4();
if (bVar5 == 0xe) {
sub_080A4E90(6);
} else {
sub_080A4E90(3);
MemClear(&gBG0Buffer, sizeof(gBG0Buffer));
gScreen.bg0.updated = 1;
}
}
}
s32 sub_080A50A0(s32 param_1) {
s32 iVar1;
if (param_1 == 0xf) {
iVar1 = AreaHasMap();
param_1 = 4;
if (iVar1 != 0) {
param_1 = 5;
}
}
return param_1;
}
void PauseMenu_Variant3(void) {
s32 iVar1;
iVar1 = gPauseMenuOptions.unk16 + 2;
if (0x10 < iVar1) {
gScreen.lcd.displayControl &= 0xf8ff;
sub_080A4E90(4);
iVar1 = 0x10;
}
gPauseMenuOptions.unk16 = iVar1;
}
void PauseMenu_Variant4(void) {
u32 t;
gPauseMenuOptions.unk16 = 0x10;
gPauseMenuOptions.unk1 = t = gPauseMenuOptions.unk14;
sub_080A4DB8(t);
sub_080A4E90(5);
}
void PauseMenu_Variant5(void) {
s32 iVar1;
iVar1 = gPauseMenuOptions.unk16 - 2;
if (iVar1 < 0) {
sub_080A4E90(2);
iVar1 = 0;
}
gPauseMenuOptions.unk16 = iVar1;
}
void sub_080A5128(void) {
int r5, t;
struct {
int x;
int y;
} p[3];
switch (gPauseMenuOptions.unk1) {
case 7:
case 8:
p[0].x = 0x60;
p[0].y = 0x18;
p[1].x = -0x10;
p[1].y = 0x48;
p[2].x = 0x100;
p[2].y = 0x48;
break;
case 9:
case 10:
case 11:
return;
default:
p[0].x = 0x40;
p[0].y = 0x10 - (gPauseMenuOptions.unk16 << 1);
t = (gPauseMenuOptions.unk16 / 3);
p[1].x = 0x10 - t;
p[1].y = 0x48;
p[2].x = 0xe0 + t;
p[2].y = 0x48;
break;
}
gOamCmd._4 = 0;
gOamCmd._6 = 0;
gOamCmd._8 = 0x400;
gOamCmd.x = p[0].x;
gOamCmd.y = p[0].y;
#ifdef EU
r5 = 0x1fa;
#else
r5 = 0x1fb;
#endif
DrawDirect(r5, 0);
gOamCmd.x = p[1].x;
gOamCmd.y = p[1].y;
DrawDirect(r5, 1);
gOamCmd.x = p[2].x;
gOamCmd.y = p[2].y;
DrawDirect(r5, 2);
}
void sub_080A51D4(void) {
u32 i = gPauseMenuOptions.unk1;
if (i < 0xe) {
gPauseMenuOptions.unk2[i] = gMenu.field_0x3;
}
}
bool32 sub_080A51F4(void) {
bool32 retval = TRUE;
if (gFadeControl.active != 0)
retval = FALSE;
if (gPauseMenuOptions.unk11 != 2)
retval = FALSE;
return retval;
}
typedef struct {
u8 up;
u8 down;
u8 left;
u8 right;
u8 type;
u8 unk0;
u8 x;
u8 y;
} ItemMenuTableEntry;
Subtask PauseMenu_ItemMenu_Draw;
Subtask PauseMenu_ItemMenu_Init;
Subtask PauseMenu_ItemMenu_Update;
void PauseMenu_ItemMenu(void) {
static Subtask* const pauseMenu_Types[] = { PauseMenu_ItemMenu_Init, PauseMenu_ItemMenu_Update };
pauseMenu_Types[gMenu.menuType]();
PauseMenu_ItemMenu_Draw();
}
void PauseMenu_ItemMenu_Init(void) {
static const KeyButtonLayout gUnk_08128B50 = {
0xd0u,
0x10u,
0u,
0xb8u,
0x10u,
0u,
0xffu,
0xd8u,
0u,
{
0x3u,
0u,
0x4u,
0u,
0u,
0u,
0x1u,
0u,
0xffu,
0u,
0u,
},
};
u32 uVar1;
u32 i;
u32 item;
gMenu.field_0xc = NULL;
sub_080A70AC((KeyButtonLayout*)&gUnk_08128B50);
for (item = ITEM_SMITH_SWORD; item < ITEM_BOTTLE_EMPTY; item++) {
uVar1 = GetInventoryValue(item);
if ((uVar1 == 1) && (i = gItemMetaData[item].menuSlot, i <= MENU_SLOT_SAVE_BUTTON_JP)) {
switch (item) {
case ITEM_LANTERN_OFF:
case ITEM_LANTERN_ON:
item = gPauseMenuOptions.unk15;
break;
default:
break;
}
gPauseMenu.items[i] = item;
sub_080A5F48(item, i * 8 + 0x360);
}
}
SetMenuType(1);
}
const ItemMenuTableEntry gItemMenuTable[] = {
[MENU_SLOT_SWORD] = { MENU_SLOT_BOTTLE0, MENU_SLOT_SHIELD, MENU_SLOT_BOOMERANG, MENU_SLOT_GUST_JAR, 0x01, 0x0c,
0x42, 0x33 },
[MENU_SLOT_GUST_JAR] = { MENU_SLOT_BOTTLE1, MENU_SLOT_MOLE_MITTS, MENU_SLOT_SWORD, MENU_SLOT_CANE, 0x01, 0x10, 0x66,
0x33 },
[MENU_SLOT_CANE] = { MENU_SLOT_BOTTLE3, MENU_SLOT_LANTERN, MENU_SLOT_GUST_JAR, MENU_SLOT_BOOMERANG, 0x01, 0x14,
0x8a, 0x33 },
[MENU_SLOT_BOOMERANG] = { MENU_SLOT_SAVE_BUTTON, MENU_SLOT_BOMBS, MENU_SLOT_CANE, MENU_SLOT_SWORD, 0x01, 0x15, 0xae,
0x33 },
[MENU_SLOT_SHIELD] = { MENU_SLOT_SWORD, MENU_SLOT_PEGASUS_BOOTS, MENU_SLOT_BOMBS, MENU_SLOT_MOLE_MITTS, 0x01, 0x16,
0x42, 0x4b },
[MENU_SLOT_MOLE_MITTS] = { MENU_SLOT_GUST_JAR, MENU_SLOT_ROCS_CAPE, MENU_SLOT_SHIELD, MENU_SLOT_LANTERN, 0x01, 0x17,
0x66, 0x4b },
[MENU_SLOT_LANTERN] = { MENU_SLOT_CANE, MENU_SLOT_OCARINA, MENU_SLOT_MOLE_MITTS, MENU_SLOT_BOMBS, 0x01, 0x00, 0x8a,
0x4b },
[MENU_SLOT_BOMBS] = { MENU_SLOT_BOOMERANG, MENU_SLOT_BOW, MENU_SLOT_LANTERN, MENU_SLOT_SHIELD, 0x01, 0x00, 0xae,
0x4b },
[MENU_SLOT_PEGASUS_BOOTS] = { MENU_SLOT_SHIELD, MENU_SLOT_BOTTLE0, MENU_SLOT_BOW, MENU_SLOT_ROCS_CAPE, 0x01, 0x00,
0x42, 0x63 },
[MENU_SLOT_ROCS_CAPE] = { MENU_SLOT_MOLE_MITTS, MENU_SLOT_BOTTLE1, MENU_SLOT_PEGASUS_BOOTS, MENU_SLOT_OCARINA, 0x01,
0x00, 0x66, 0x63 },
[MENU_SLOT_OCARINA] = { MENU_SLOT_LANTERN, MENU_SLOT_BOTTLE3, MENU_SLOT_ROCS_CAPE, MENU_SLOT_BOW, 0x01, 0x00, 0x8a,
0x63 },
[MENU_SLOT_BOW] = { MENU_SLOT_BOMBS, MENU_SLOT_SAVE_BUTTON, MENU_SLOT_OCARINA, MENU_SLOT_PEGASUS_BOOTS, 0x01, 0x00,
0xae, 0x63 },
[MENU_SLOT_BOTTLE0] = { MENU_SLOT_PEGASUS_BOOTS, MENU_SLOT_SWORD, MENU_SLOT_SAVE_BUTTON, MENU_SLOT_BOTTLE1, 0x01,
0x00, 0x42, 0x7b },
[MENU_SLOT_BOTTLE1] = { MENU_SLOT_ROCS_CAPE, MENU_SLOT_GUST_JAR, MENU_SLOT_BOTTLE0, MENU_SLOT_BOTTLE2, 0x01, 0x00,
0x5a, 0x7b },
[MENU_SLOT_BOTTLE2] = { MENU_SLOT_ROCS_CAPE, MENU_SLOT_GUST_JAR, MENU_SLOT_BOTTLE1, MENU_SLOT_BOTTLE3, 0x01, 0x00,
0x72, 0x7b },
[MENU_SLOT_BOTTLE3] = { MENU_SLOT_OCARINA, MENU_SLOT_CANE, MENU_SLOT_BOTTLE2, MENU_SLOT_SAVE_BUTTON, 0x01, 0x00,
0x8a, 0x7b },
[MENU_SLOT_SAVE_BUTTON] = { MENU_SLOT_BOW, MENU_SLOT_BOOMERANG, MENU_SLOT_BOTTLE3, MENU_SLOT_BOTTLE0, 0x03, 0x00,
0xb5, 0x75 },
[MENU_SLOT_SAVE_BUTTON_JP] = { MENU_SLOT_BOW, MENU_SLOT_BOOMERANG, MENU_SLOT_BOTTLE3, MENU_SLOT_BOTTLE0, 0x05, 0x00,
0xb5, 0x75 },
};
void sub_080A6F6C(u32);
void PauseMenu_ItemMenu_Update(void) {
static const u8 gUnk_08128BF4[] = { 14, 15, 2, 0 };
u32 item;
u32 menuSlot;
const ItemMenuTableEntry* entry;
if (sub_080A51F4()) {
gMenu.field_0xc = (u8*)gUnk_08128BF4;
menuSlot = gMenu.field_0x3;
entry = &gItemMenuTable[menuSlot];
switch (gInput.newKeys) {
case A_BUTTON:
if (menuSlot == MENU_SLOT_SAVE_BUTTON) {
#if defined(DEMO_USA) || defined(DEMO_JP)
SoundReq(SFX_MENU_ERROR);
#else
sub_080A4E84(0xb);
SoundReq(SFX_TEXTBOX_SELECT);
#endif
break;
}
case B_BUTTON:
if (gPauseMenu.items[menuSlot] != 0) {
u32 slot = !!(gInput.newKeys ^ 1);
ForceEquipItem(gPauseMenu.items[menuSlot], slot);
SoundReq(SFX_TEXTBOX_SELECT);
}
break;
default:
switch (gInput.unk4) {
case DPAD_UP:
menuSlot = entry->up;
break;
case DPAD_DOWN:
menuSlot = entry->down;
break;
case DPAD_LEFT:
menuSlot = entry->left;
break;
case DPAD_RIGHT:
menuSlot = entry->right;
break;
}
break;
}
if (gMenu.field_0x3 != menuSlot) {
gMenu.field_0x3 = menuSlot;
SoundReq(SFX_TEXTBOX_CHOICE);
}
item = gPauseMenu.items[menuSlot];
switch (menuSlot) {
case MENU_SLOT_BOTTLE0:
case MENU_SLOT_BOTTLE1:
case MENU_SLOT_BOTTLE2:
case MENU_SLOT_BOTTLE3:
if (item != 0) {
item = gSave.saved_status.field_0x24[item - 6];
}
break;
case MENU_SLOT_SAVE_BUTTON:
// ITEM_SKILL_FAST_SPIN, but that does not make any sense at all
item = 0x73;
break;
default:
break;
}
sub_080A6F6C(item + 0x400);
}
}
u32 GetMenuSlotForItem(u32 item);
extern u8* gSpriteAnimations_322[];
#ifdef EU
#define sub_080A5384_draw_constant0 0x1fa
#define sub_080A5384_draw_constant1 0x141
#else
#define sub_080A5384_draw_constant0 0x1fb
#define sub_080A5384_draw_constant1 0x142
#endif
void PauseMenu_ItemMenu_Draw(void) {
u32 tmp;
u32 i;
s32 color;
const ItemMenuTableEntry* entry;
gOamCmd._4 = 0x400;
gOamCmd._6 = 0;
gOamCmd._8 = 0;
for (i = 0; i < MENU_SLOT_COUNT; i++) {
u32 item;
if (gPauseMenu.items[i] != 0) {
entry = &gItemMenuTable[i];
gOamCmd.x = entry->x;
gOamCmd.y = entry->y;
item = gPauseMenu.items[i];
switch (item) {
case ITEM_BOTTLE1:
case ITEM_BOTTLE2:
case ITEM_BOTTLE3:
case ITEM_BOTTLE4:
item = gSave.stats.bottles[item - ITEM_BOTTLE1];
break;
default:
break;
}
color = 3;
switch (item) {
case ITEM_BOMBS:
case ITEM_REMOTE_BOMBS:
if (gBombBagSizes[gSave.stats.bombBagType] <= gSave.stats.bombCount) {
color = 4;
}
break;
case ITEM_BOW:
case ITEM_LIGHT_ARROW:
if (gQuiverSizes[gSave.stats.quiverType] <= gSave.stats.arrowCount) {
color = 4;
}
break;
default:
break;
}
gOamCmd._8 = 0x800 | color << 0xc | ((i * 8) + 0x360);
DrawDirect(sub_080A5384_draw_constant1, *gSpriteAnimations_322[item]);
}
}
gOamCmd._8 = 0x800;
{
u32 slot = gMenu.field_0x3;
if ((slot == MENU_SLOT_SAVE_BUTTON) && (gSaveHeader->language != 0)) {
slot = MENU_SLOT_SAVE_BUTTON_JP;
}
entry = &gItemMenuTable[slot];
gOamCmd.x = entry->x;
gOamCmd.y = entry->y;
tmp = entry->type + ((gMain.ticks & 0x10) != 0 ? 3 : 4);
DrawDirect(sub_080A5384_draw_constant0, tmp);
}
{
u32 slot;
if (gSaveHeader->language != 0) {
slot = MENU_SLOT_SAVE_BUTTON;
} else {
slot = MENU_SLOT_SAVE_BUTTON_JP;
}
entry = &gItemMenuTable[slot];
gOamCmd.x = entry->x;
gOamCmd.y = entry->y;
gOamCmd._8 = 0x800;
DrawDirect(sub_080A5384_draw_constant0, 0x22);
}
i = GetMenuSlotForItem(gSave.stats.itemButtons[SLOT_A]);
if (i < MENU_SLOT_COUNT) {
entry = &gItemMenuTable[i];
gOamCmd.x = entry->x;
gOamCmd.y = entry->y;
DrawDirect(sub_080A5384_draw_constant0, 3);
}
i = GetMenuSlotForItem(gSave.stats.itemButtons[SLOT_B]);
if (i < MENU_SLOT_COUNT) {
entry = &gItemMenuTable[i];
gOamCmd.x = entry->x;
gOamCmd.y = entry->y;
DrawDirect(sub_080A5384_draw_constant0, 3);
}
}
u32 GetMenuSlotForItem(u32 item) {
u32 i;
if (item != 0) {
for (i = 0; i < MENU_SLOT_COUNT; i++) {
if (item == gPauseMenu.items[i])
return i;
}
}
return MENU_SLOT_SAVE_BUTTON_JP;
}
Subtask sub_080A5594;
Subtask sub_080A56A0;
void PauseMenu2(void) {
static Subtask* const pauseMenu2_Types[] = {
sub_080A5594,
sub_080A56A0,
};
pauseMenu2_Types[gMenu.menuType]();
sub_080A57F4();
}
+22 -23
View File
@@ -67,31 +67,30 @@ bool32 TileCollisionFunction0(s32 x, s32 y) {
bool32 TileCollisionFunction1(s32 x, s32 y) {
return TRUE;
}
const u16 gUnk_08133918[] = {
/*
0b1000000000000000,
0b1100000000000000,
0b1110000000000000,
0b1111000000000000,
0b1111100000000000,
0b1111110000000000,
0b1111111000000000,
0b1111111100000000,
0b1111111110000000,
0b1111111111000000,
0b1111111111100000,
0b1111111111110000,
0b1111111111111000,
0b1111111111111100,
0b1111111111111110,
0b1111111111111111,
*/
0x8000, 0xC000, 0xE000, 0xF000, 0xF800, 0xFC00, 0xFE00, 0xFF00,
0xFF80, 0xFFC0, 0xFFE0, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF,
};
/** Diagonal North West filled*/
bool32 TileCollisionFunction2(s32 x, s32 y) {
static const u16 gUnk_08133918[] = {
/*
0b1000000000000000,
0b1100000000000000,
0b1110000000000000,
0b1111000000000000,
0b1111100000000000,
0b1111110000000000,
0b1111111000000000,
0b1111111100000000,
0b1111111110000000,
0b1111111111000000,
0b1111111111100000,
0b1111111111110000,
0b1111111111111000,
0b1111111111111100,
0b1111111111111110,
0b1111111111111111,
*/
0x8000, 0xC000, 0xE000, 0xF000, 0xF800, 0xFC00, 0xFE00, 0xFF00,
0xFF80, 0xFFC0, 0xFFE0, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF,
};
return gUnk_08133918[y & 0xf] >> (x & 0xf) & 1;
}
+2 -2
View File
@@ -70,7 +70,7 @@ void sub_080632C8(Entity* this) {
}
void sub_080632E0(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_0810C8D4) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810C8D4)) {
InitializeAnimation(this, 0);
sub_08078778(this);
this->spriteSettings.draw = 1;
@@ -127,7 +127,7 @@ void Beedle_Head(Entity* this) {
void sub_08063410(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_0810C8D4) == 0) {
if (!LoadExtraSpriteData(this, gUnk_0810C8D4)) {
return;
}
this->action++;
+197 -20
View File
@@ -11,25 +11,202 @@
#include "game.h"
#include "item.h"
extern void (*gUnk_081115C0[])(Entity*);
extern void (*gUnk_081115D0[])(Entity*);
void sub_08068A1C(Entity*);
void sub_08068A4C(Entity*);
void sub_08068AA4(Entity*);
void sub_08068ADC(Entity*);
void (*const gUnk_081115C0[])(Entity*) = {
sub_08068A1C,
sub_08068A4C,
sub_08068AA4,
sub_08068ADC,
};
void sub_08068AFC(Entity*);
void sub_08068b2c(Entity*);
void sub_08068B70(Entity*);
void (*const gUnk_081115D0[])(Entity*) = {
sub_08068AFC,
sub_08068b2c,
sub_08068B70,
};
const u16 gUnk_081115DC[] = { 183, 184, 185, 186, 187, 188, 189, 190 };
// TODO extract macros
extern const PlayerMacroEntry gUnk_08004A0C;
extern const PlayerMacroEntry gUnk_08004A16;
extern const PlayerMacroEntry gUnk_08004A24;
extern const PlayerMacroEntry gUnk_08004A32;
extern const PlayerMacroEntry gUnk_08004A48;
extern const PlayerMacroEntry gUnk_08004A72;
extern const PlayerMacroEntry gUnk_08004A8C;
extern const PlayerMacroEntry gUnk_08004AA6;
const PlayerMacroEntry* const BladeBrothers_PlayerMacros[] = {
&gUnk_08004A0C, &gUnk_08004A16, &gUnk_08004A24, &gUnk_08004A32, &gUnk_08004A48, &gUnk_08004A72,
&gUnk_08004A8C, &gUnk_08004AA6, NULL, NULL, NULL,
};
const u8 BladeBrothers_EquippedItem[] = {
0, 0, ITEM_PEGASUS_BOOTS, ITEM_ROCS_CAPE, 0, 0, 0, 0, 0, 0, 0,
};
const u8 gUnk_08111623[] = {
7, 0, 4, 6, 5, 8, 9, 10,
};
const u8 gUnk_0811162B[] = {
ITEM_SKILL_SPIN_ATTACK,
ITEM_SKILL_ROCK_BREAKER,
ITEM_SKILL_DASH_ATTACK,
ITEM_SKILL_DOWN_THRUST,
ITEM_SKILL_ROLL_ATTACK,
ITEM_SKILL_SWORD_BEAM,
ITEM_SKILL_PERIL_BEAM,
ITEM_SKILL_GREAT_SPIN,
243,
244,
245,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
1,
0,
0,
0,
1,
0,
0,
0,
};
const u16 gUnk_08111664[] = {
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x01), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x09), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x11),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x19), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x22), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x2b),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x34), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x3d), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x46),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x50), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x5a),
};
const u16 gUnk_0811167A[] = {
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x02), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x0a), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x12),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1a), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x23), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x2c),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x35), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x3e), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x47),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x51), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x5b),
};
const u16 gUnk_08111690[] = {
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x03),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x0b),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x13),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1b),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x24),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x2d),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x36),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x3f),
0x0,
0x0,
0x0,
};
const u16 gUnk_081116A6[] = {
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x04), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x0c), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x14),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1c), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x25), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x2e),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x37), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x40), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x48),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x52), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x5c),
};
const u16 gUnk_081116BC[] = {
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x05),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x0d),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x15),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1d),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x26),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x2f),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x38),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x41),
0x0,
0x0,
0x0,
};
const u16 gUnk_081116D2[] = {
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x06), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x0e), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x16),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1e), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x27), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x30),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x39), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x42), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x49),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x53), TEXT_INDEX(TEXT_BLADE_MASTERS, 0x5d),
};
const u16 gUnk_081116E8[] = {
0x0,
0x0,
0x0,
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1f),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x28),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x31),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x3a),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x43),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1f),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1f),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x1f),
};
const u16 gUnk_081116FE[] = {
0x0,
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x07),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x0f),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x17),
0x0,
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x32),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x3b),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x44),
0x0,
0x0,
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x5e),
};
const u16 gUnk_08111714[] = {
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x60),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x61),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x62),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x63),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x64),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x65),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x66),
TEXT_INDEX(TEXT_BLADE_MASTERS, 0x67),
0x0,
0x0,
0x0,
};
const u16 gUnk_0811172A[] = { 0, 0, 30, 0, 0, 0, 0, 30, 0, 0, 0 };
const u32 gUnk_08111740[] = { 1, 4, 3, 7, 2, 5, 8, 6, 10, 11, 12 };
extern u16 gUnk_081115DC[];
extern u8 BladeBrothers_EquippedItem[];
extern PlayerMacroEntry* BladeBrothers_PlayerMacros[];
extern u8 gUnk_08111623[];
extern u8 gUnk_0811162B[];
extern u16 gUnk_08111664[];
extern u16 gUnk_0811167A[];
extern u16 gUnk_08111690[];
extern u16 gUnk_081116A6[];
extern u16 gUnk_081116BC[];
extern u16 gUnk_081116D2[];
extern u16 gUnk_081116E8[];
extern u16 gUnk_081116FE[];
extern u16 gUnk_08111714[];
extern u32 gUnk_08111740[];
extern u16 gUnk_0811172A[];
extern u32 gUnk_0300402B;
extern EntityData gUnk_080F3494;
@@ -146,7 +323,7 @@ void BladeBrothers_StartPlayerDemonstration(Entity* this, ScriptExecutionContext
if (p = this->timer, BladeBrothers_EquippedItem[p]) {
ForceEquipItem(BladeBrothers_EquippedItem[this->timer], EQUIP_SLOT_A);
}
InitPlayerMacro(BladeBrothers_PlayerMacros[this->timer]);
InitPlayerMacro((PlayerMacroEntry*)BladeBrothers_PlayerMacros[this->timer]);
}
void sub_08068BB4(Entity* this) {
@@ -196,7 +373,7 @@ void BladeBrothers_GetScroll(Entity* this) {
}
void sub_08068C8C(Entity* this, ScriptExecutionContext* context) {
u8* arr = gUnk_0811162B + 0xd;
const u8* arr = gUnk_0811162B + 0xd;
context->condition = *(u32*)(arr + this->timer * 4);
}
+1 -1
View File
@@ -98,7 +98,7 @@ void sub_08067314(Entity* this) {
void Carpenter_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_08110CA8[this->type * 4]) != 0) {
if (LoadExtraSpriteData(this, &gUnk_08110CA8[this->type * 4])) {
this->action = this->action + 1;
this->spriteSettings.draw = 1;
SetDefaultPriority(this, PRIO_MESSAGE);
+1 -1
View File
@@ -66,7 +66,7 @@ void sub_08064570(CastleMaidEntity* this) {
tmp3 = 0;
}
data = &gUnk_0810F874[tmp3 * 3];
if (LoadExtraSpriteData(super, data) == 0) {
if (!LoadExtraSpriteData(super, data)) {
return;
}
super->action++;
+165 -20
View File
@@ -4,32 +4,177 @@
#include "npc.h"
#include "item.h"
extern void (*gUnk_08111D88[])(Entity*);
void sub_08069FE8(Entity*);
u32 sub_08069EF0(Entity*);
extern u8 gUnk_08111DA8[];
bool32 sub_08069EF0(Entity*);
bool32 sub_08069F90(Entity*);
void sub_08069F6C(Entity*);
void sub_08069D00(Entity*);
void sub_08069CB8(Entity*);
extern u8 gUnk_08111DB0[];
void sub_0806A028(Entity*);
void sub_08069FBC(Entity*);
extern SpriteLoadData gUnk_08111D58[];
extern u8 gUnk_08111E30[];
void sub_0806A080(Entity*);
extern Dialog gUnk_08111E34[][10];
const SpriteLoadData gUnk_08111D58[] = {
#ifdef EU
{ 82, 67, 4 }, { 7250, 67, 4 }, { 0, 0, 0 }, { 64, 69, 4 }, { 7232, 69, 4 }, { 0, 0, 0 },
#else
{ 82, 67, 4 }, { 7250, 67, 4 }, { 0, 0, 0 }, { 1, 69, 4 }, { 7169, 69, 4 }, { 0, 0, 0 },
#endif
{ 4, 68, 4 }, { 7172, 68, 4 }, { 0, 0, 0 }, { 83, 69, 4 }, { 7251, 69, 4 }, { 0, 0, 0 },
};
extern u16 gUnk_08111F74[][5];
void sub_08069B44(Entity*);
void sub_08069C40(Entity*);
void sub_08069D54(Entity*);
void sub_08069DF8(Entity*);
void sub_08069E44(Entity*);
void sub_08069E50(Entity*);
void sub_08069ECC(Entity*);
void sub_08069EE0(Entity*);
void (*const gUnk_08111D88[])(Entity*) = {
sub_08069B44, sub_08069C40, sub_08069D54, sub_08069DF8, sub_08069E44, sub_08069E50, sub_08069ECC, sub_08069EE0,
};
extern u16 gUnk_08111FD8[];
const u8 gUnk_08111DA8[] = { 7, 23, 8, 24, 8, 24, 9, 25 };
const u8 gUnk_08111DB0[] = {
24, 24, 24, 24, 25, 25, 25, 25, 77, 77, 77, 77, 78, 78, 78, 146, 146, 214, 214, 214, 215, 215,
215, 215, 27, 27, 27, 27, 24, 24, 24, 24, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77,
78, 78, 78, 78, 146, 146, 146, 146, 147, 147, 147, 215, 215, 27, 27, 27, 24, 24, 24, 24, 24, 76,
76, 76, 77, 77, 77, 77, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147,
215, 215, 215, 215, 212, 212, 212, 24, 24, 24, 24, 24, 25, 25, 25, 77, 77, 145, 145, 145, 146, 146,
146, 146, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 215, 215, 212, 212, 212, 212,
};
const u8 gUnk_08111E30[] = { 19, 13, 13, 13 };
void sub_0806A0A4(Entity*);
void sub_0806A144(Entity*);
const Dialog gUnk_08111E34[][10] = {
{
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_LON_LON, 0x8), TEXT_INDEX(TEXT_STOCKWELL, 0x23) } },
},
{
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN, 0x18), TEXT_INDEX(TEXT_TOWN, 0x19) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN, 0x18), TEXT_INDEX(TEXT_TOWN, 0x19) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN, 0x18), TEXT_INDEX(TEXT_TOWN, 0x19) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN, 0x18), TEXT_INDEX(TEXT_TOWN, 0x19) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN2, 0x14), TEXT_INDEX(TEXT_TOWN2, 0x15) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN3, 0x14), TEXT_INDEX(TEXT_TOWN3, 0x15) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN4, 0x14), TEXT_INDEX(TEXT_TOWN4, 0x15) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN5, 0x14), TEXT_INDEX(TEXT_TOWN5, 0x15) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN6, 0x13), TEXT_INDEX(TEXT_TOWN6, 0x14) } },
{ 0, 0, DIALOG_MINISH, 1, { TEXT_INDEX(TEXT_TOWN6, 0x13), TEXT_INDEX(TEXT_TOWN6, 0x14) } },
},
{
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A0A4 } },
},
{
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806A144 } },
}
};
const u16 gUnk_08111F74[][5] = {
{
TEXT_INDEX(TEXT_TOWN, 0x3b),
TEXT_INDEX(TEXT_TOWN, 0x3c),
TEXT_INDEX(TEXT_TOWN2, 0x32),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN2, 0x34),
},
{
TEXT_INDEX(TEXT_TOWN, 0x3b),
TEXT_INDEX(TEXT_TOWN, 0x3c),
TEXT_INDEX(TEXT_TOWN2, 0x32),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN2, 0x34),
},
{
TEXT_INDEX(TEXT_TOWN, 0x3b),
TEXT_INDEX(TEXT_TOWN, 0x3c),
TEXT_INDEX(TEXT_TOWN2, 0x32),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN2, 0x34),
},
{
TEXT_INDEX(TEXT_TOWN, 0x3b),
TEXT_INDEX(TEXT_TOWN, 0x3c),
TEXT_INDEX(TEXT_TOWN2, 0x32),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN2, 0x34),
},
{
TEXT_INDEX(TEXT_TOWN2, 0x30),
TEXT_INDEX(TEXT_TOWN2, 0x31),
TEXT_INDEX(TEXT_TOWN2, 0x32),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN2, 0x34),
},
{
TEXT_INDEX(TEXT_TOWN3, 0x2c),
TEXT_INDEX(TEXT_TOWN3, 0x2d),
TEXT_INDEX(TEXT_TOWN3, 0x2e),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN3, 0x2f),
},
{
TEXT_INDEX(TEXT_TOWN4, 0x28),
TEXT_INDEX(TEXT_TOWN4, 0x29),
TEXT_INDEX(TEXT_TOWN4, 0x2a),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN4, 0x2b),
},
{
TEXT_INDEX(TEXT_TOWN5, 0x28),
TEXT_INDEX(TEXT_TOWN5, 0x29),
TEXT_INDEX(TEXT_TOWN5, 0x2a),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN5, 0x2b),
},
{
TEXT_INDEX(TEXT_TOWN6, 0x21),
TEXT_INDEX(TEXT_TOWN6, 0x22),
TEXT_INDEX(TEXT_TOWN6, 0x23),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN6, 0x24),
},
{
TEXT_INDEX(TEXT_TOWN6, 0x21),
TEXT_INDEX(TEXT_TOWN6, 0x22),
TEXT_INDEX(TEXT_TOWN6, 0x23),
TEXT_INDEX(TEXT_TOWN2, 0x33),
TEXT_INDEX(TEXT_TOWN6, 0x24),
},
};
const u16 gUnk_08111FD8[] = {
TEXT_INDEX(TEXT_TOWN8, 0x7), TEXT_INDEX(TEXT_TOWN8, 0x8), TEXT_INDEX(TEXT_TOWN8, 0x9),
TEXT_INDEX(TEXT_TOWN8, 0x11), TEXT_INDEX(TEXT_TOWN8, 0x3),
};
void Dog(Entity* this) {
gUnk_08111D88[this->action](this);
sub_0806ED78(this);
@@ -41,7 +186,7 @@ void sub_08069B44(Entity* this) {
u32 sVar3;
u32 uVar4;
u32 uVar5;
if (sub_08069EF0(this) != 0) {
if (sub_08069EF0(this)) {
uVar5 = sub_0805ACC0(this);
if (uVar5 == 0) {
sVar3 = this->x.HALF.HI;
@@ -234,13 +379,13 @@ void sub_08069EE8(Entity* this) {
this->action = 5;
}
u32 sub_08069EF0(Entity* this) {
if (LoadExtraSpriteData(this, &gUnk_08111D58[this->type * 3]) == 0) {
return 0;
bool32 sub_08069EF0(Entity* this) {
if (!LoadExtraSpriteData(this, &gUnk_08111D58[this->type * 3])) {
return FALSE;
}
this->action = 1;
this->field_0x68.HWORD = gUnk_08111E30[this->type];
return 1;
return TRUE;
}
void Dog_Head(Entity* this) {
@@ -358,7 +503,7 @@ void sub_0806A144(Entity* this) {
void Dog_Fusion(Entity* this) {
if (this->action == 0) {
if (sub_08069EF0(this) != 0) {
if (sub_08069EF0(this)) {
this->action++;
this->spriteSettings.draw = 1;
SetDefaultPriority(this, PRIO_MESSAGE);
+3 -3
View File
@@ -11,7 +11,7 @@ void sub_0806BC58(Entity* this);
void Farmers(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_08113140[this->type * 3]) == 0) {
if (!LoadExtraSpriteData(this, &gUnk_08113140[this->type * 3])) {
return;
}
this->action++;
@@ -81,8 +81,8 @@ void sub_0806BCE8(Entity* this) {
void Farmers_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_08113140[this->type * 3]) != 0) {
this->action = this->action + 1;
if (LoadExtraSpriteData(this, &gUnk_08113140[this->type * 3])) {
this->action++;
this->spriteSettings.draw = 1;
this->spriteSettings.flipX = 0;
sub_0806BC58(this);
+505 -19
View File
@@ -1,24 +1,510 @@
#include "npc.h"
#include "object.h"
#include "functions.h"
#include "playeritem.h"
#include "item.h"
#include "kinstone.h"
#include "npc.h"
#include "object.h"
#include "playeritem.h"
#include "structures.h"
extern SpriteLoadData gUnk_0810A348;
extern u8* gUnk_08109D18[];
extern u8 gUnk_08109C98[];
extern u16 gUnk_0810A354[];
extern Dialog gUnk_08109DC8[];
extern u16 gUnk_0810A35A[];
extern u16 gUnk_0810A362[];
const FrameStruct gUnk_08109C98[] = {
{ 36, 26 }, { 37, 26 }, { 38, 26 }, { 39, 155 }, { 40, 155 }, { 41, 155 }, { 42, 155 }, { 43, 152 },
{ 28, 152 }, { 29, 152 }, { 30, 153 }, { 31, 153 }, { 32, 153 }, { 33, 153 }, { 34, 26 }, { 35, 26 },
{ 36, 154 }, { 37, 154 }, { 38, 27 }, { 39, 27 }, { 40, 27 }, { 41, 27 }, { 42, 27 }, { 43, 152 },
{ 28, 152 }, { 29, 152 }, { 30, 152 }, { 31, 153 }, { 32, 153 }, { 33, 153 }, { 34, 154 }, { 35, 154 },
{ 36, 154 }, { 37, 154 }, { 38, 155 }, { 39, 155 }, { 40, 155 }, { 41, 155 }, { 42, 24 }, { 43, 24 },
{ 28, 24 }, { 29, 24 }, { 30, 24 }, { 31, 153 }, { 32, 153 }, { 33, 153 }, { 34, 153 }, { 35, 154 },
{ 36, 154 }, { 37, 154 }, { 38, 154 }, { 39, 155 }, { 40, 155 }, { 41, 155 }, { 42, 152 }, { 43, 152 },
{ 28, 152 }, { 29, 152 }, { 30, 25 }, { 31, 25 }, { 32, 25 }, { 33, 25 }, { 34, 25 }, { 35, 154 },
};
extern Script script_BombMinish;
extern Script script_BombMinishKinstone;
extern Script script_ForestMinish1;
extern Script script_ForestMinish2;
extern Script script_ForestMinish3;
extern Script script_ForestMinish4;
extern Script script_ForestMinish5;
extern Script script_ForestMinish6;
extern Script script_ForestMinish7;
extern Script script_ForestMinish8;
extern Script script_ForestMinish9;
extern Script script_ForestMinish10;
extern Script script_ForestMinish11;
extern Script script_ForestMinish12;
extern Script script_ForestMinish13;
extern Script script_ForestMinish14;
extern Script script_ForestMinish15;
extern Script script_ForestMinish16;
extern Script script_ForestMinish17;
extern Script script_ForestMinish18;
extern Script script_ForestMinish19;
extern Script script_ForestMinish20;
extern Script script_ForestMinish21;
Script* const gUnk_08109D18[] = {
&script_BombMinish, &script_BombMinishKinstone, &script_ForestMinish12, &script_ForestMinish13,
&script_ForestMinish14, &script_ForestMinish15, &script_ForestMinish16, &script_ForestMinish17,
&script_ForestMinish18, &script_ForestMinish19, &script_ForestMinish20, &script_ForestMinish21,
&script_ForestMinish1, &script_ForestMinish1, &script_ForestMinish1, &script_ForestMinish2,
&script_ForestMinish3, &script_ForestMinish1, &script_ForestMinish1, &script_ForestMinish1,
&script_ForestMinish1, &script_ForestMinish1, &script_ForestMinish10, &script_ForestMinish4,
&script_ForestMinish4, &script_ForestMinish4, &script_ForestMinish4, &script_ForestMinish4,
&script_ForestMinish4, &script_ForestMinish4, &script_ForestMinish4, &script_ForestMinish4,
&script_ForestMinish4, &script_ForestMinish4, &script_ForestMinish4, &script_ForestMinish4,
&script_ForestMinish11, &script_ForestMinish11, &script_ForestMinish11, &script_ForestMinish5,
&script_ForestMinish6, &script_ForestMinish7, &script_ForestMinish8, &script_ForestMinish9,
};
void sub_080601D4(Entity*);
const Dialog gUnk_08109DC8[][4] = {
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ KINSTONE_24,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x4), TEXT_INDEX(TEXT_MINISH, 0x0) } },
{ KINSTONE_24,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x4), TEXT_INDEX(TEXT_MINISH, 0x0) } },
{ KINSTONE_24,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x4), TEXT_INDEX(TEXT_MINISH, 0x0) } },
{ KINSTONE_24,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x4), TEXT_INDEX(TEXT_MINISH, 0x0) } },
},
{
{ KINSTONE_14,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x9), TEXT_INDEX(TEXT_MINISH, 0x5) } },
{ KINSTONE_14,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x9), TEXT_INDEX(TEXT_MINISH, 0x5) } },
{ KINSTONE_14,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x9), TEXT_INDEX(TEXT_MINISH, 0x5) } },
{ KINSTONE_14,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x9), TEXT_INDEX(TEXT_MINISH, 0x5) } },
},
{
#if defined(USA) || defined(DEMO_USA)
{ KINSTONE_3F,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
{ KINSTONE_3F,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
{ KINSTONE_3F,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
{ KINSTONE_3F,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
#else
{ KINSTONE_22,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
{ KINSTONE_22,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
{ KINSTONE_22,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
{ KINSTONE_22,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0xe), TEXT_INDEX(TEXT_MINISH, 0xa) } },
#endif
},
{
{ KINSTONE_2E,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x22), TEXT_INDEX(TEXT_MINISH, 0x1e) } },
{ KINSTONE_2E,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x22), TEXT_INDEX(TEXT_MINISH, 0x1e) } },
{ KINSTONE_2E,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x22), TEXT_INDEX(TEXT_MINISH, 0x1e) } },
{ KINSTONE_2E,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x22), TEXT_INDEX(TEXT_MINISH, 0x1e) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x25) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x25) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x25) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x25) } },
},
{
{ KINSTONE_23,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x13), TEXT_INDEX(TEXT_MINISH, 0xf) } },
{ KINSTONE_23,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x13), TEXT_INDEX(TEXT_MINISH, 0xf) } },
{ KINSTONE_23,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x13), TEXT_INDEX(TEXT_MINISH, 0xf) } },
{ KINSTONE_23,
DIALOG_KINSTONE,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_MINISH, 0x13), TEXT_INDEX(TEXT_MINISH, 0xf) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1a) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1a) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1a) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x1a) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x15) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x15) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x15) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x15) } },
},
{
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_080601D4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_080601D4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_080601D4 } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_080601D4 } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x1) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x2) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x3) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x23) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x24) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x6) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0xe) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0xe) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0xe) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x15) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x15) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x15) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x1a) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x1a) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x1a) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x1f) } },
{ ITEM_GREEN_SWORD,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_FOREST_MINISH, 0x21), TEXT_INDEX(TEXT_FOREST_MINISH, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x21) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x24) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x25) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x25) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x29) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x2a) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x2b) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x2e) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x2f) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x2f) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x34) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x38) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x39) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x39) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x22) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x32) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x32) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x32) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_BELARI, 0x32) } },
},
{
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x31) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x31) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x31) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FOREST_MINISH, 0x31) } },
},
{
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0x9), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x3) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0x9), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x3) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0x9), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x3) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0x9), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x3) } },
},
{
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xb), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x5) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xb), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x5) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xb), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x5) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xb), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x5) } },
},
{
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xc), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x6) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xc), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x6) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xc), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x6) } },
{ ITEM_FLIPPERS,
DIALOG_INVENTORY,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_TOWN_MINISH2, 0xc), TEXT_INDEX(TEXT_TOWN_MINISH2, 0x6) } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
},
{
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
}
};
const SpriteLoadData gUnk_0810A348[] = {
{ 48, 31, 4 },
{ 8240, 31, 4 },
{ 0, 0, 0 },
};
const u16 gUnk_0810A354[] = {
TEXT_INDEX(TEXT_MINISH, 0x14),
TEXT_INDEX(TEXT_MINISH, 0x18),
TEXT_INDEX(TEXT_ANSWER_HOUSE, 0x26),
};
const u16 gUnk_0810A35A[] = {
TEXT_INDEX(TEXT_UNK_WISE, 0x1),
TEXT_INDEX(TEXT_UNK_WISE, 0x2),
TEXT_INDEX(TEXT_UNK_WISE, 0x3),
TEXT_INDEX(TEXT_UNK_WISE, 0x4),
};
const u16 gUnk_0810A362[] = {
TEXT_INDEX(TEXT_BELARI, 0x2),
TEXT_INDEX(TEXT_BELARI, 0x3),
TEXT_INDEX(TEXT_BELARI, 0x9),
TEXT_INDEX(TEXT_BELARI, 0x8),
};
static void sub_080600F0(Entity* this);
void ForestMinish(Entity* this) {
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, &gUnk_0810A348)) {
if (LoadExtraSpriteData(this, gUnk_0810A348)) {
this->action = 1;
this->spriteSettings.draw = TRUE;
this->field_0x68.HALF.HI = this->animationState = this->timer << 1;
@@ -100,7 +586,7 @@ void sub_0806014C(Entity* this) {
void sub_08060158(Entity* this) {
int index;
u8* idx3;
const FrameStruct* idx3;
u8 tmp1, tmp2;
if (this->timer) {
@@ -114,9 +600,9 @@ void sub_08060158(Entity* this) {
index = state * 4;
}
idx3 = gUnk_08109C98 + (this->animationState / 2) * 0x20 + (index >> 1) * 2;
tmp1 = idx3[0];
tmp2 = idx3[1];
idx3 = gUnk_08109C98 + (this->animationState / 2) * 0x10 + (index >> 1);
tmp1 = idx3->frame;
tmp2 = idx3->frameIndex;
if (tmp2 & 0x80) {
this->animationState = sub_0806F5B0(index);
@@ -144,7 +630,7 @@ void sub_080601D4(Entity* this) {
}
void sub_08060208(Entity* this) {
ShowNPCDialogue(this, &gUnk_08109DC8[this->type2 * 0x4]);
ShowNPCDialogue(this, gUnk_08109DC8[this->type2]);
}
void sub_0806021C(Entity* this) {
@@ -161,11 +647,11 @@ void sub_0806021C(Entity* this) {
if (GetInventoryValue(ITEM_MOLE_MITTS)) {
uVar2 = 3;
}
ShowNPCDialogue(this, gUnk_08109DC8 + this->type2 * 0x4 + uVar2);
ShowNPCDialogue(this, &gUnk_08109DC8[this->type2][uVar2]);
}
void sub_0806025C(Entity* this) {
ShowNPCDialogue(this, &gUnk_08109DC8[this->type2 * 0x4]);
ShowNPCDialogue(this, gUnk_08109DC8[this->type2]);
}
void sub_08060270(Entity* this) {
@@ -249,7 +735,7 @@ u32 sub_08060354(void) {
void ForestMinish_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_0810A348)) {
if (LoadExtraSpriteData(this, gUnk_0810A348)) {
this->action++;
this->spriteSettings.draw = TRUE;
SetDefaultPriority(this, PRIO_MESSAGE);
+57 -30
View File
@@ -1,30 +1,57 @@
#include "functions.h"
#include "npc.h"
extern void (*const gUnk_08111C48[])(Entity*);
void sub_080697A4(Entity* this);
void sub_08069838(Entity* this);
extern SpriteLoadData gUnk_08111C3C;
extern u8 gUnk_08111C9C[];
extern u8 gUnk_08111CA8[];
extern u8 gUnk_08111CB4[];
extern u8 gUnk_08111CB8[];
void sub_08069888(Entity* this);
extern u16 gUnk_08111C50[];
extern const s16 gUnk_08111C5C[];
extern const u8 gUnk_08111C74[];
extern const s16 gUnk_08111C84[];
extern const u8 gUnk_08111C8C[];
const SpriteLoadData gUnk_08111C3C[] = {
{ 193, 64, 4 },
{ 5313, 64, 4 },
{ 0, 0, 0 },
};
void sub_080697C4(Entity*);
void sub_080697EC(Entity*);
void (*const gUnk_08111C48[])(Entity*) = {
sub_080697C4,
sub_080697EC,
};
const u16 gUnk_08111C50[] = {
TEXT_INDEX(TEXT_GORMAN_ORACLES, 0x1), TEXT_INDEX(TEXT_GORMAN_ORACLES, 0x2), TEXT_INDEX(TEXT_GORMAN_ORACLES, 0xc),
TEXT_INDEX(TEXT_GORMAN_ORACLES, 0xd), TEXT_INDEX(TEXT_GORMAN_ORACLES, 0xe), TEXT_INDEX(TEXT_GORMAN_ORACLES, 0x15),
};
const Coords gUnk_08111C5C[] = {
{ .HALF = { 0x68, 0x1c8 } }, { .HALF = { 0x28, 0x1c8 } }, { .HALF = { 0x68, 0x188 } },
{ .HALF = { 0x68, 0x1c8 } }, { .HALF = { 0x28, 0x188 } }, { .HALF = { 0x68, 0x188 } }
};
const u8 gUnk_08111C74[] = {
0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0,
};
const Coords gUnk_08111C84[] = {
{ .HALF = { 0x178, 0x108 } },
{ .HALF = { 0x138, 0x108 } },
};
const u8 gUnk_08111C8C[] = {
0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0,
};
const u8 gUnk_08111C9C[] = {
0, 1, 0, 1, 2, 3, 2, 3, 4, 5, 4, 5,
};
const u8 gUnk_08111CA8[] = {
1, 2, 0, 0, 3, 4, 1, 2, 5, 5, 3, 4,
};
const u8 gUnk_08111CB4[] = {
0,
1,
0,
1,
};
const u8 gUnk_08111CB8[] = {
1,
1,
0,
0,
};
void Gorman(Entity* this) {
if ((this->flags & ENT_SCRIPTED) != 0) {
@@ -40,7 +67,7 @@ void sub_080697A4(Entity* this) {
}
void sub_080697C4(Entity* this) {
if (LoadExtraSpriteData(this, &gUnk_08111C3C) != 0) {
if (LoadExtraSpriteData(this, gUnk_08111C3C)) {
this->action = 1;
InitializeAnimation(this, 2);
sub_08078778(this);
@@ -69,7 +96,7 @@ void sub_080697EC(Entity* this) {
void sub_08069838(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_08111C3C) == 0) {
if (!LoadExtraSpriteData(this, gUnk_08111C3C)) {
return;
}
this->action++;
@@ -107,11 +134,11 @@ void sub_08069888(Entity* this) {
void sub_0806991C(Entity* this, ScriptExecutionContext* context) {
u32 tmp;
const s16* ptr;
const Coords* ptr;
this->field_0x68.HALF.LO = (Random() & 0x1f) + 0x3c;
ptr = &gUnk_08111C5C[*(s8*)&this->field_0x68.HALF.HI * 2];
context->x.HALF.HI = gRoomControls.origin_x + ptr[0];
context->y.HALF.HI = gRoomControls.origin_y + ptr[1];
ptr = &gUnk_08111C5C[*(s8*)&this->field_0x68.HALF.HI];
context->x.HALF.HI = gRoomControls.origin_x + ptr->HALF.x;
context->y.HALF.HI = gRoomControls.origin_y + ptr->HALF.y;
context->unk_19 = 8;
context->postScriptActions |= 2;
context->condition = 0;
@@ -123,11 +150,11 @@ void sub_0806991C(Entity* this, ScriptExecutionContext* context) {
void sub_080699AC(Entity* this, ScriptExecutionContext* context) {
u32 tmp;
const s16* ptr;
const Coords* ptr;
this->field_0x68.HALF.LO = (Random() & 0x1f) + 0x3c;
ptr = &gUnk_08111C84[*(s8*)&this->field_0x68.HALF.HI * 2];
context->x.HALF.HI = gRoomControls.origin_x + ptr[0];
context->y.HALF.HI = gRoomControls.origin_y + ptr[1];
ptr = &gUnk_08111C84[*(s8*)&this->field_0x68.HALF.HI];
context->x.HALF.HI = gRoomControls.origin_x + ptr->HALF.x;
context->y.HALF.HI = gRoomControls.origin_y + ptr->HALF.y;
context->unk_19 = 8;
context->postScriptActions |= 2;
context->condition = 0;
+3 -3
View File
@@ -1,8 +1,8 @@
#include "global.h"
#include "effects.h"
#include "entity.h"
#include "functions.h"
#include "kinstone.h"
#include "message.h"
#include "effects.h"
#include "npc.h"
void sub_08069310(Entity*);
@@ -158,7 +158,7 @@ void sub_080694EC(Entity* this) {
u32 anim;
this->animationState = 4;
anim = 2;
if (!CheckKinstoneFused(47))
if (!CheckKinstoneFused(KINSTONE_2F))
anim = 8;
InitAnimationForceUpdate(this, anim);
this->field_0x80.HWORD = anim;
+235 -5
View File
@@ -24,12 +24,242 @@ extern void sub_08064428(Entity*);
void sub_08063DC8(Entity*);
void sub_08063F20(Entity*);
extern void (*const gUnk_0810F544[])(Entity*);
extern void (*const gUnk_0810F550[])(Entity*);
// TODO guardWithSpear rodata before this
const Dialog gUnk_0810CF4C[] = {
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FINDING_EZLO, 0x17) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FINDING_EZLO, 0x18) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CARPENTERS, 0x6) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CARPENTERS, 0x5) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_PROLOGUE, 0x3e) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_PROLOGUE, 0x40) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_PROLOGUE, 0x3c) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_PROLOGUE, 0x3b) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ TABIDACHI,
DIALOG_GLOBAL_FLAG,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_PROLOGUE, 0x3f), TEXT_INDEX(TEXT_PROLOGUE, 0x3d) } },
{ TABIDACHI,
DIALOG_GLOBAL_FLAG,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_PROLOGUE, 0x3f), TEXT_INDEX(TEXT_PROLOGUE, 0x3d) } },
{ TABIDACHI,
DIALOG_GLOBAL_FLAG,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_PROLOGUE, 0x3f), TEXT_INDEX(TEXT_PROLOGUE, 0x3d) } },
{ TABIDACHI,
DIALOG_GLOBAL_FLAG,
DIALOG_CHECK_FLAG,
1,
{ TEXT_INDEX(TEXT_PROLOGUE, 0x3f), TEXT_INDEX(TEXT_PROLOGUE, 0x3d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_VAATI, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_VAATI, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_VAATI, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_VAATI, 0x22) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_VAATI, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FESTIVAL, 0x1d) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_PROLOGUE, 0x63) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_PROLOGUE, 0x64) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
};
// entity count
extern SpriteLoadData gUnk_0810F524[];
extern void* gUnk_0810F6BC[];
const Dialog gUnk_0810D0A4[] = {
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN, 0x32) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN, 0x32) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN2, 0x2d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x29) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN2, 0x29) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x26) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x24) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x24) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN6, 0x1d) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN6, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0xb) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN2, 0x26) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x23) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN6, 0x1c) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0x8) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN2, 0x35) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0xc) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN2, 0x24) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x21) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x22) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN6, 0x1b) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN2, 0x38) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x32) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x2d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x2d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN6, 0x26) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0xd) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN2, 0x16) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x16) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0x4) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN6, 0x15) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0x6) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0x5) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0x1) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0x9) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN7, 0xa) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN, 0x33) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x30) } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
{ 0, 0, DIALOG_NONE, 0, { 0, 0 } },
};
// Seemingly wasted space. Is this ever indexed?
const u32 emptyDialogs[2048] = {};
const SpriteLoadData gUnk_0810F524[] = {
{ 55, 43, 4 }, { 6199, 43, 4 }, { 22583, 43, 4 }, { 0, 0, 0 },
{ 4, 43, 4 }, { 16388, 43, 4 }, { 8196, 43, 4 }, { 0, 0, 0 },
};
void sub_08063E90(Entity*);
void sub_08063F20(Entity*);
void sub_08063F78(Entity*);
void (*const gUnk_0810F544[])(Entity*) = {
sub_08063E90,
sub_08063F20,
sub_08063F78,
};
void sub_08063D44(Entity*);
void sub_08063DC8(Entity*);
void sub_08063E54(Entity*);
void sub_08063E6C(Entity*);
void (*const gUnk_0810F550[])(Entity*) = {
sub_08063D44,
sub_08063DC8,
sub_08063E54,
sub_08063E6C,
};
extern void* gUnk_0810F6BC[]; // TODO find out type of second param for sub_0806EE04
void Guard(Entity* this) {
if ((this->flags & ENT_SCRIPTED) != 0) {
+2 -5
View File
@@ -13,7 +13,7 @@ void HurdyGurdyMan(Entity* this) {
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, gUnk_081144F0) != 0) {
if (LoadExtraSpriteData(this, gUnk_081144F0)) {
this->action = 1;
this->field_0x68.HALF.HI = 0;
SetDefaultPriority(this, PRIO_MESSAGE);
@@ -106,11 +106,8 @@ void sub_0806E440(Entity* this) {
}
void HurdyGurdyMan_Fusion(Entity* this) {
u32 uVar1;
if (this->action == 0) {
uVar1 = LoadExtraSpriteData(this, gUnk_081144F0);
if (uVar1 != 0) {
if (LoadExtraSpriteData(this, gUnk_081144F0)) {
this->action++;
this->spriteSettings.draw = 1;
SetDefaultPriority(this, PRIO_MESSAGE);
+183 -21
View File
@@ -2,14 +2,184 @@
#include "message.h"
#include "npc.h"
extern void (*const gUnk_0810BE0C[])(Entity*);
const SpriteLoadData gUnk_0810BD7C[] = {
{ 58, 59, 4 },
{ 10298, 59, 4 },
{ 12288, 59, 4 },
{ 0, 0, 0 },
};
const SpriteLoadData gUnk_0810BD8C[] = {
{ 58, 59, 4 },
{ 8250, 59, 4 },
{ 10241, 59, 4 },
{ 0, 0, 0 },
};
const SpriteLoadData gUnk_0810BD9C[] = {
{ 16385, 59, 4 },
{ 58, 59, 4 },
{ 8250, 59, 4 },
{ 0, 0, 0 },
};
const SpriteLoadData gUnk_0810BDAC[] = {
{ 58, 59, 4 },
{ 6202, 59, 4 },
{ 0, 0, 0 },
};
const SpriteLoadData gUnk_0810BDB8[] = {
{ 58, 59, 4 },
{ 6202, 59, 4 },
{ 0, 0, 0 },
};
const SpriteLoadData* const gUnk_0810BDC4[] = {
gUnk_0810BD7C, gUnk_0810BD7C, gUnk_0810BD7C, gUnk_0810BD7C, gUnk_0810BD8C,
gUnk_0810BD8C, gUnk_0810BD9C, gUnk_0810BDAC, gUnk_0810BDB8,
};
const u16 gUnk_0810BDE8[][2] = { {
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
},
{
TEXT_INDEX(TEXT_EMPTY, 0x1),
TEXT_INDEX(TEXT_EMPTY, 0x1),
} };
void sub_080620F4(Entity*);
void sub_08062130(Entity*);
void sub_08062194(Entity*);
void (*const gUnk_0810BE0C[])(Entity*) = { sub_080620F4, sub_08062130, sub_08062194 };
void sub_08062194(Entity*);
const Dialog gUnk_0810BE10[] = {
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FESTIVAL, 0xf) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x7) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x1d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x1d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x4) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x4) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x4) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x4) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x4) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x4) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0xb) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0xb) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x5) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x5) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x5) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x5) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x5) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x5) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0xc) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0xc) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SCHOOL, 0x8) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN8, 0x2e) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN8, 0x2e) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FESTIVAL, 0xe) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x35) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x35) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x35) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x35) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x35) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x35) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN8, 0x2d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN8, 0x2d) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x36) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x36) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x36) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x36) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x36) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x36) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x36) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SIMON, 0x13) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_SIMON, 0x13) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_FESTIVAL, 0x14) } },
{ 9, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x31), TEXT_INDEX(TEXT_TOWN, 0x30) } },
{ 9, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x31), TEXT_INDEX(TEXT_TOWN, 0x30) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x10) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x35) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x16) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x16) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x1e) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x1e) } },
{ 0, 0, DIALOG_CHECK_FLAG, 1, { TEXT_INDEX(TEXT_FESTIVAL, 0x20), TEXT_INDEX(TEXT_FESTIVAL, 0x13) } },
#if defined(USA) || defined(DEMO_USA)
{ 212, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2a), TEXT_INDEX(TEXT_TOWN, 0x29) } },
{ 212, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2a), TEXT_INDEX(TEXT_TOWN, 0x29) } },
#else
{ 209, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2a), TEXT_INDEX(TEXT_TOWN, 0x29) } },
{ 209, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2a), TEXT_INDEX(TEXT_TOWN, 0x29) } },
#endif
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x11) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x33) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x17) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x17) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x20) } },
{ 0, 0, DIALOG_CHECK_FLAG, 1, { TEXT_INDEX(TEXT_FESTIVAL, 0x21), TEXT_INDEX(TEXT_FESTIVAL, 0x1e) } },
#if defined(USA) || defined(DEMO_USA)
{ 213, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2c), TEXT_INDEX(TEXT_TOWN, 0x2b) } },
{ 213, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2c), TEXT_INDEX(TEXT_TOWN, 0x2b) } },
#else
{ 210, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2c), TEXT_INDEX(TEXT_TOWN, 0x2b) } },
{ 210, DIALOG_LOCAL_FLAG, DIALOG_SET_FLAG, 1, { TEXT_INDEX(TEXT_TOWN, 0x2c), TEXT_INDEX(TEXT_TOWN, 0x2b) } },
#endif
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x12) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN3, 0x34) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN4, 0x18) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_TOWN5, 0x18) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x21) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x21) } },
};
const FrameStruct gUnk_0810C0A0[] = {
{ 25, 0 }, { 128, 15 }, { 37, 0 }, { 128, 15 }, { 46, 0 }, { 128, 15 },
{ 55, 0 }, { 128, 15 }, { 64, 15 }, { 128, 15 }, { 72, 15 }, { 128, 15 },
{ 120, 83 }, { 128, 15 }, { 131, 102 }, { 128, 15 }, { 139, 111 }, { 128, 15 },
};
void sub_080621AC(Entity*);
extern SpriteLoadData* gUnk_0810BDC4[];
void sub_080622F4(Entity*);
void sub_0806265C(Entity*, ScriptExecutionContext*);
void sub_0806252C(Entity*);
typedef struct {
@@ -23,12 +193,6 @@ typedef struct {
#define KID_HEAP_COUNT 0x14
typedef KidHeapItem KidHeap[KID_HEAP_COUNT];
extern u16 gUnk_0810BDE8[][2];
extern Dialog gUnk_0810BE10[];
extern u8 gUnk_0810C0A0[];
void Kid(Entity* this) {
if ((this->flags & ENT_SCRIPTED) != 0) {
sub_080621AC(this);
@@ -38,7 +202,7 @@ void Kid(Entity* this) {
}
void sub_080620F4(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_0810BDC4[this->type]) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810BDC4[this->type])) {
this->animationState = 4;
this->field_0x68.HALF.LO = 0;
this->action = 1;
@@ -76,7 +240,7 @@ void sub_080621AC(Entity* this) {
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, gUnk_0810BDC4[this->type]) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810BDC4[this->type])) {
this->action = 1;
this->animationState = this->timer;
this->timer = 0;
@@ -204,7 +368,7 @@ void sub_0806265C(Entity* this, ScriptExecutionContext* context) {
if (gSave.global_progress == 0) {
MessageNoOverlap(0, this);
} else {
Dialog* pDialog = &gUnk_0810BE10[this->type * 9];
const Dialog* pDialog = &gUnk_0810BE10[this->type * 9 - 1];
pDialog += gSave.global_progress;
ShowNPCDialogue(this, pDialog);
}
@@ -273,17 +437,15 @@ void sub_080627E8(Entity* this, ScriptExecutionContext* context) {
}
void Kid_Head(Entity* this) {
u32 uVar1;
u32 uVar2;
u32 uVar3;
u32 uVar4;
u32 uVar5;
u8* ptr;
const FrameStruct* ptr;
uVar1 = this->type * 4;
ptr = &gUnk_0810C0A0[uVar1];
uVar3 = ((u8)this->frame & 0x1f) + ptr[0];
uVar4 = (this->frameIndex & 0x1f) + ptr[1];
ptr = &gUnk_0810C0A0[this->type * 2];
uVar3 = ((u8)this->frame & 0x1f) + ptr->frame;
uVar4 = (this->frameIndex & 0x1f) + ptr->frameIndex;
switch (this->type) {
case 0:
case 1:
@@ -400,7 +562,7 @@ void sub_08062A48(Entity* this, ScriptExecutionContext* context) {
void Kid_Fusion(Entity* this) {
u32 tmp;
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_0810BDC4[this->type]) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810BDC4[this->type])) {
this->action = this->action + 1;
this->spriteSettings.draw = 1;
this->y.HALF.HI = this->y.HALF.HI + -8;
+1 -1
View File
@@ -46,7 +46,7 @@ void Mama(Entity* this) {
}
bool32 sub_0806C454(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_08113754) == 0) {
if (!LoadExtraSpriteData(this, gUnk_08113754)) {
return FALSE;
} else {
SetDefaultPriority(this, PRIO_MESSAGE);
+2 -2
View File
@@ -26,7 +26,7 @@ void Melari(Entity* this) {
}
void sub_08068708(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_08111520) != 0) {
if (LoadExtraSpriteData(this, gUnk_08111520)) {
this->action = 1;
InitializeAnimation(this, 0);
sub_08078778(this);
@@ -60,7 +60,7 @@ void sub_08068780(Entity* this) {
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, gUnk_08111520) == 0) {
if (!LoadExtraSpriteData(this, gUnk_08111520)) {
return;
}
this->action = 1;
+1 -1
View File
@@ -22,7 +22,7 @@ void MinishEzlo(Entity* this) {
{ 0x0, 0x0, 0x0 },
};
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_0810C48C) == 0) {
if (!LoadExtraSpriteData(this, gUnk_0810C48C)) {
return;
}
this->action++;
+3 -3
View File
@@ -55,7 +55,7 @@ void MountainMinish(Entity* this) {
}
void sub_08067E60(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_08111358) != 0) {
if (LoadExtraSpriteData(this, gUnk_08111358)) {
this->action = 1;
sub_08078778(this);
InitializeAnimation(this, 2);
@@ -106,7 +106,7 @@ void sub_08067EF0(Entity* this) {
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, gUnk_08111358) == 0) {
if (!LoadExtraSpriteData(this, gUnk_08111358)) {
return;
}
this->action = 1;
@@ -265,7 +265,7 @@ void MountainMinish_Head(Entity* this) {
void MountainMinish_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_08111358) != 0) {
if (LoadExtraSpriteData(this, gUnk_08111358)) {
this->action++;
this->spriteSettings.draw = 1;
InitializeAnimation(this, 6);
+1 -1
View File
@@ -89,7 +89,7 @@ void sub_08067100(Entity* this) {
void Mutoh_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_08110C00) != 0) {
if (LoadExtraSpriteData(this, gUnk_08110C00)) {
this->action++;
this->spriteSettings.draw = TRUE;
InitializeAnimation(this, 2);
+1 -1
View File
@@ -14,7 +14,7 @@ void NPC58(Entity* this) {
Entity* entity;
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_081146D0) == 0) {
if (!LoadExtraSpriteData(this, gUnk_081146D0)) {
return;
}
this->action++;
+1 -1
View File
@@ -168,7 +168,7 @@ void sub_0806B60C(Entity* this) {
void Percy_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_08112E1C) != 0) {
if (LoadExtraSpriteData(this, gUnk_08112E1C)) {
this->action++;
this->spriteSettings.draw = 1;
InitializeAnimation(this, 2);
+2 -2
View File
@@ -193,14 +193,14 @@ const static Font gUnk_081146B8 = {
void sub_0806EABC(Entity* this) {
sub_08050384();
sub_08057044((s16)this->field_0x68.HWORD, gUnk_020227E8, 0x202020);
sub_0805F46C(0x3302, &gUnk_081146B8);
ShowTextBox(0x3302, &gUnk_081146B8);
gScreen.bg0.updated = 1;
}
#else
void sub_0806EABC(Entity* this, u32 param) {
sub_08050384();
sub_08057044(param, gUnk_020227E8, 0x202020);
sub_0805F46C(0x3302, &gUnk_081146B8);
ShowTextBox(0x3302, &gUnk_081146B8);
gScreen.bg0.updated = 1;
}
#endif
+150 -23
View File
@@ -3,24 +3,151 @@
#include "entity.h"
#include "functions.h"
#include "npc.h"
#include "structures.h"
extern void sub_08060528(Entity*);
extern void sub_080604DC(Entity*);
extern void sub_080606D8(Entity*);
extern void sub_080606C0(Entity*);
extern const s8 gUnk_0810AA70[][4][4];
const Coords gUnk_0810A66C[] = {
{ .HALF = { 0x0, 0x0 } }, { .HALF = { 0x48, 0xa8 } }, { .HALF = { 0x0, 0xf0 } },
{ .HALF = { 0x1f8, 0x0 } }, { .HALF = { 0x3f8, 0xf0 } }, { .HALF = { 0x1f8, 0x3c8 } },
{ .HALF = { 0x48, 0xf0 } }, { .HALF = { 0x60, 0xf0 } }, { .HALF = { 0x60, 0x188 } },
{ .HALF = { 0x78, 0x188 } }, { .HALF = { 0x78, 0x270 } }, { .HALF = { 0x38, 0x270 } },
{ .HALF = { 0x38, 0x328 } }, { .HALF = { 0x98, 0x328 } }, { .HALF = { 0xd8, 0x328 } },
{ .HALF = { 0x108, 0x328 } }, { .HALF = { 0x188, 0x328 } }, { .HALF = { 0x188, 0x368 } },
{ .HALF = { 0x108, 0x278 } }, { .HALF = { 0x128, 0x278 } }, { .HALF = { 0x128, 0x1d0 } },
{ .HALF = { 0x1a8, 0x1d0 } }, { .HALF = { 0x1f8, 0x1d0 } }, { .HALF = { 0x1a8, 0x288 } },
{ .HALF = { 0x1f8, 0x288 } }, { .HALF = { 0x1f8, 0x328 } }, { .HALF = { 0x268, 0x328 } },
{ .HALF = { 0x268, 0x368 } }, { .HALF = { 0x268, 0x390 } }, { .HALF = { 0x1f8, 0xf0 } },
{ .HALF = { 0x248, 0x1d0 } }, { .HALF = { 0x248, 0x1c0 } }, { .HALF = { 0x248, 0x288 } },
{ .HALF = { 0x298, 0x288 } }, { .HALF = { 0x298, 0x328 } }, { .HALF = { 0x328, 0x328 } },
{ .HALF = { 0x328, 0x390 } }, { .HALF = { 0x368, 0x328 } }, { .HALF = { 0x368, 0x318 } },
{ .HALF = { 0x3a0, 0x318 } }, { .HALF = { 0x3a0, 0x290 } }, { .HALF = { 0x370, 0x290 } },
{ .HALF = { 0x370, 0x280 } }, { .HALF = { 0x360, 0x280 } }, { .HALF = { 0x360, 0x270 } },
{ .HALF = { 0x340, 0x270 } }, { .HALF = { 0x340, 0x248 } }, { .HALF = { 0x320, 0x248 } },
{ .HALF = { 0x2e0, 0x248 } }, { .HALF = { 0x2e0, 0x1d0 } }, { .HALF = { 0x2d0, 0x1d0 } },
{ .HALF = { 0x2d0, 0x1c0 } }, { .HALF = { 0x320, 0x168 } }, { .HALF = { 0x378, 0x168 } },
{ .HALF = { 0x378, 0xf0 } }, { .HALF = { 0x2b0, 0x288 } }, { .HALF = { 0x2b0, 0x280 } },
{ .HALF = { 0x2c0, 0x280 } }, { .HALF = { 0x2c0, 0x270 } }, { .HALF = { 0x2d0, 0x270 } },
{ .HALF = { 0x2d0, 0x248 } }, { .HALF = { 0x78, 0x1f0 } }, { .HALF = { 0x78, 0x230 } },
};
typedef struct {
s16 x;
s16 y;
} Coords16;
// Indices into the coords array above
const s8 gUnk_0810A768[] = { 1, -4, 0, 1, 2 };
const s8 gUnk_0810A76D[] = { 6, 0, 2, 4, 21 };
const s8 gUnk_0810A772[] = { 6, 0, 2, 1, 21 };
const s8 gUnk_0810A777[] = { 2, -5, 3, 5, 7, 9 };
const s8 gUnk_0810A77D[] = { 29, 0, 3, 20, 17, 16 };
const s8 gUnk_0810A783[] = { 3, -5, 3, 3, 7, 9 };
const s8 gUnk_0810A789[] = { 54, 0, 2, 18, 62 };
const s8 gUnk_0810A78E[] = { 4, -5, 3, 3, 5, 9 };
const s8 gUnk_0810A794[] = { 25, 0, 3, 46, 30, 31 };
const s8 gUnk_0810A79A[] = { 5, -5, 3, 3, 5, 7 };
const s8 gUnk_0810A7A0[] = { 24, 0, 3, 45, 47, 14 };
const s8 gUnk_0810A7A6[] = { 22, 0, 3, 15, 66, 63 };
const s8 gUnk_0810A7AC[] = { 23, 24, 0, 3, 12, 47, 45 };
const s8 gUnk_0810A7B3[] = { 23, 21, 0, 2, 65, 26 };
const s8 gUnk_0810A7B9[] = { 29, 0, 3, 6, 20, 17 };
const s8 gUnk_0810A7BF[] = { 22, 0, 3, 66, 11, 63 };
const s8 gUnk_0810A7C5[] = { 54, 0, 2, 8, 62 };
const s8 gUnk_0810A7CA[] = { 29, 0, 3, 6, 20, 16 };
const s8 gUnk_0810A7D0[] = { 29, 0, 3, 6, 17, 16 };
const s8 gUnk_0810A7D6[] = { 7, 0, 2, 22, 23 };
const s8 gUnk_0810A7DB[] = { 7, 0, 2, 23, 19 };
const s8 gUnk_0810A7E0[] = { 6, 0, 2, 1, 4 };
const s8 gUnk_0810A7E5[] = { 8, 9, 61, -1, 62, 10, 11, 12, 13, -1, 14, 15, 0, 2, 27, 25 };
const s8 gUnk_0810A7F5[] = { 14, -1, 13, 12, 11, 10, 62, -1, 61, 9, 8, 7, 0, 2, 22, 19 };
const s8 gUnk_0810A805[] = { 18, 19, 20, 21, 0, 2, 65, 13 };
const s8 gUnk_0810A80D[] = { 20, 19, 18, 15, 0, 2, 24, 27 };
const s8 gUnk_0810A815[] = { 16, 0, 2, 29, 33 };
const s8 gUnk_0810A81A[] = { 15, 0, 2, 24, 25 };
const s8 gUnk_0810A81F[] = { 25, 0, 3, 46, 31, 10 };
const s8 gUnk_0810A825[] = { 16, 0, 2, 28, 33 };
const s8 gUnk_0810A82A[] = { 26, 0, 2, 41, 43 };
const s8 gUnk_0810A82F[] = { 25, 0, 3, 10, 46, 30 };
const s8 gUnk_0810A835[] = { 17, 27, 0, 2, 42, 35 };
const s8 gUnk_0810A83B[] = { 17, 16, 0, 2, 28, 29 };
const s8 gUnk_0810A841[] = { 28, 36, 35, 0, 2, 40, 37 };
const s8 gUnk_0810A848[] = { 36, 28, 27, 0, 2, 34, 42 };
const s8 gUnk_0810A84F[] = { 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, 2, 57, 61 };
const s8 gUnk_0810A85E[] = { 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 35, 0, 2, 36, 40 };
const s8 gUnk_0810A86D[] = { 35, 0, 2, 36, 37 };
const s8 gUnk_0810A872[] = { 34, 0, 2, 44, 52 };
const s8 gUnk_0810A877[] = { 27, 0, 2, 34, 35 };
const s8 gUnk_0810A87C[] = { 26, 0, 2, 32, 43 };
const s8 gUnk_0810A881[] = { 34, 0, 2, 52, 39 };
const s8 gUnk_0810A886[] = { 26, 0, 2, 32, 41 };
const s8 gUnk_0810A88B[] = { 25, 0, 3, 10, 30, 31 };
const s8 gUnk_0810A891[] = { 24, 0, 3, 14, 12, 47 };
const s8 gUnk_0810A897[] = { 32, 0, 2, 54, 49 };
const s8 gUnk_0810A89C[] = { 24, 0, 3, 14, 12, 45 };
const s8 gUnk_0810A8A2[] = { 33, 0, 2, 51, 55 };
const s8 gUnk_0810A8A7[] = { 32, 0, 2, 48, 54 };
const s8 gUnk_0810A8AC[] = { 34, 0, 2, 44, 39 };
const s8 gUnk_0810A8B1[] = { 33, 0, 2, 50, 55 };
const s8 gUnk_0810A8B6[] = { 32, 0, 2, 48, 49 };
const s8 gUnk_0810A8BB[] = { 30, 0, 2, 64, 59 };
const s8 gUnk_0810A8C0[] = { 55, 56, 57, 58, 59, 60, 48, 0, 2, 60, 58 };
const s8 gUnk_0810A8CB[] = { 60, 59, 58, 57, 56, 55, 33, 0, 2, 50, 51 };
const s8 gUnk_0810A8D6[] = { 48, 0, 2, 60, 56 };
const s8 gUnk_0810A8DB[] = { 47, 0, 2, 38, 61 };
const s8 gUnk_0810A8E0[] = { 31, 51, 50, 49, 48, 0, 2, 56, 58 };
const s8 gUnk_0810A8E9[] = { 49, 50, 51, 31, 30, 0, 2, 64, 53 };
const s8 gUnk_0810A8F2[] = { 52, 53, 54, 0, 2, 8, 18 };
const s8 gUnk_0810A8F9[] = { 53, 52, 47, 0, 2, 38, 57 };
const s8 gUnk_0810A900[] = { 30, 0, 2, 53, 59 };
const s8 gUnk_0810A905[] = { 22, 0, 3, 66, 11, 15 };
const s8 gUnk_0810A90B[] = { 22, 0, 3, 11, 15, 63 };
const s8 gUnk_0810A911[] = { 21, 0, 2, 26, 13, 0, 0 };
extern Coords16 gUnk_0810A66C[];
extern s8* gUnk_0810A918[];
const s8* const gUnk_0810A918[] = {
gUnk_0810A768, gUnk_0810A768, gUnk_0810A76D, gUnk_0810A772, gUnk_0810A777, gUnk_0810A77D, gUnk_0810A783,
gUnk_0810A789, gUnk_0810A78E, gUnk_0810A794, gUnk_0810A79A, gUnk_0810A7A0, gUnk_0810A7A6, gUnk_0810A7AC,
gUnk_0810A7B3, gUnk_0810A7B9, gUnk_0810A7BF, gUnk_0810A7C5, gUnk_0810A7CA, gUnk_0810A7D0, gUnk_0810A7D6,
gUnk_0810A7DB, gUnk_0810A7E0, gUnk_0810A7E5, gUnk_0810A7F5, gUnk_0810A805, gUnk_0810A80D, gUnk_0810A815,
gUnk_0810A81A, gUnk_0810A81F, gUnk_0810A825, gUnk_0810A82A, gUnk_0810A82F, gUnk_0810A835, gUnk_0810A83B,
gUnk_0810A841, gUnk_0810A848, gUnk_0810A84F, gUnk_0810A85E, gUnk_0810A86D, gUnk_0810A872, gUnk_0810A877,
gUnk_0810A87C, gUnk_0810A881, gUnk_0810A886, gUnk_0810A88B, gUnk_0810A891, gUnk_0810A897, gUnk_0810A89C,
gUnk_0810A8A2, gUnk_0810A8A7, gUnk_0810A8AC, gUnk_0810A8B1, gUnk_0810A8B6, gUnk_0810A8BB, gUnk_0810A8C0,
gUnk_0810A8CB, gUnk_0810A8D6, gUnk_0810A8DB, gUnk_0810A8E0, gUnk_0810A8E9, gUnk_0810A8F2, gUnk_0810A8F9,
gUnk_0810A900, gUnk_0810A905, gUnk_0810A90B, gUnk_0810A911,
};
void sub_08060428(Entity*);
void sub_0806045C(Entity*);
void sub_080604C8(Entity*);
void (*const gUnk_0810AA24[])(Entity*) = {
sub_08060428,
sub_0806045C,
sub_080604C8,
};
extern void (*const gUnk_0810AA24[])(Entity*);
extern Dialog gUnk_0810AA30[];
const Dialog gUnk_0810AA30[] = {
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0xc) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0xc) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0xd) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0xe) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0xf) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0x10) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0x11) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_POST, 0x12) } },
};
const Rect gUnk_0810AA70[][4] = {
{
{ 0, -16, 16, 16 },
{ 16, 0, 16, 16 },
{ 0, 16, 16, 16 },
{ -16, 0, 16, 16 },
},
{
{ 0, -16, 32, 32 },
{ 16, 0, 32, 32 },
{ 0, 16, 32, 32 },
{ -16, 0, 32, 32 },
},
};
void Postman(Entity* this) {
if ((this->flags & ENT_SCRIPTED) != 0) {
@@ -181,10 +308,10 @@ void sub_080606D8(Entity* this) {
}
void sub_08060700(Entity* entity, ScriptExecutionContext* context) {
s8* var0 = gUnk_0810A918[(s8)entity->field_0x68.HALF.LO];
Coords16* coords = &gUnk_0810A66C[var0[(s8)entity->field_0x68.HALF.HI]];
u32 x = coords->x + gRoomControls.origin_x;
u32 y = coords->y + gRoomControls.origin_y;
const s8* var0 = gUnk_0810A918[(s8)entity->field_0x68.HALF.LO];
const Coords* coords = &gUnk_0810A66C[var0[(s8)entity->field_0x68.HALF.HI]];
u32 x = coords->HALF.x + gRoomControls.origin_x;
u32 y = coords->HALF.y + gRoomControls.origin_y;
sub_0807DEDC(entity, context, x, y);
gActiveScriptInfo.flags |= 1;
}
@@ -200,8 +327,8 @@ void sub_0806076C(Entity* this, ScriptExecutionContext* context) {
u32 uVar6;
s32 uVar9;
int local_24;
Coords16* ptr;
s8* pbVar10;
const Coords* ptr;
const s8* pbVar10;
if (this->z.WORD < 0) {
gActiveScriptInfo.commandSize = 0;
@@ -244,8 +371,8 @@ void sub_0806076C(Entity* this, ScriptExecutionContext* context) {
this->field_0x68.HALF.LO = pbVar10[local_24];
cVar2 = gUnk_0810A918[(s8)this->field_0x68.HALF.LO][0];
ptr = &gUnk_0810A66C[cVar2];
this->x.HALF_U.HI = gRoomControls.origin_x + ptr->x;
this->y.HALF_U.HI = gRoomControls.origin_y + ptr->y;
this->x.HALF_U.HI = gRoomControls.origin_x + ptr->HALF.x;
this->y.HALF_U.HI = gRoomControls.origin_y + ptr->HALF.y;
if (CheckOnScreen(this) == 0)
break;
local_24 = (s32)(local_24 + 1) % uVar9;
@@ -265,14 +392,14 @@ void sub_080608E4(Entity* this, ScriptExecutionContext* context) {
if (this->z.WORD >= 0) {
if ((this->collisionLayer != 1 || gPlayerEntity.collisionLayer != 2) &&
(this->collisionLayer != 2 || gPlayerEntity.collisionLayer != 1)) {
const s8* ptr = gUnk_0810AA70[context->intVariable][this->animationState >> 1];
u32 x = this->x.HALF.HI + ptr[0];
u32 y = this->y.HALF.HI + ptr[1];
const Rect* ptr = &gUnk_0810AA70[context->intVariable][this->animationState >> 1];
u32 x = this->x.HALF.HI + ptr->x;
u32 y = this->y.HALF.HI + ptr->y;
x = gPlayerEntity.x.HALF.HI - x;
y = gPlayerEntity.y.HALF.HI - y;
x += ptr[2];
y += ptr[3];
if (ptr[2] * 2 > x && ptr[3] * 2 > y) {
x += ptr->width;
y += ptr->height;
if (ptr->width * 2 > x && ptr->height * 2 > y) {
context->condition = 1;
this->field_0x6a.HWORD += 2;
}
+105 -11
View File
@@ -1,15 +1,109 @@
#include "npc.h"
#include "functions.h"
extern void (*SittingPersion_Actions[])(Entity*);
const SpriteLoadData gUnk_0810CB78[] = {
{ 63, 61, 4 }, { 8255, 61, 4 }, { 0, 0, 0 }, { 62, 61, 4 }, { 8255, 61, 4 }, { 0, 0, 0 },
{ 64, 61, 4 }, { 8254, 61, 4 }, { 0, 0, 0 }, { 64, 61, 4 }, { 8256, 61, 4 }, { 0, 0, 0 },
{ 64, 61, 4 }, { 8255, 61, 4 }, { 0, 0, 0 }, { 62, 61, 4 }, { 8255, 61, 4 }, { 0, 0, 0 },
};
const FrameStruct gUnk_0810CBC0[] = {
{ 4, 0 }, { 0, 0 }, { 12, 0 }, { 0, 0 }, { 20, 0 }, { 0, 0 },
{ 28, 1 }, { 0, 0 }, { 36, 1 }, { 0, 0 }, { 44, 0 }, { 0, 0 },
};
void SittingPersion_Init(Entity*);
void sub_080637B8(Entity*);
void sub_08063830(Entity*);
void (*const SittingPersion_Actions[])(Entity*) = {
SittingPersion_Init,
sub_080637B8,
sub_08063830,
};
extern Dialog gUnk_0810CC08[];
const u16 gUnk_0810CBE4[][4] = { {
TEXT_INDEX(TEXT_TOWN4, 0x2f),
TEXT_INDEX(TEXT_TOWN4, 0x30),
TEXT_INDEX(TEXT_TOWN4, 0x31),
TEXT_INDEX(TEXT_TOWN4, 0x32),
},
{
TEXT_INDEX(TEXT_TOWN5, 0x2f),
TEXT_INDEX(TEXT_TOWN5, 0x30),
TEXT_INDEX(TEXT_TOWN5, 0x31),
TEXT_INDEX(TEXT_TOWN5, 0x32),
},
{
TEXT_INDEX(TEXT_TOWN6, 0x28),
TEXT_INDEX(TEXT_TOWN6, 0x29),
TEXT_INDEX(TEXT_TOWN6, 0x2a),
TEXT_INDEX(TEXT_TOWN6, 0x2b),
},
{
TEXT_INDEX(TEXT_TOWN7, 0xe),
TEXT_INDEX(TEXT_TOWN7, 0xf),
TEXT_INDEX(TEXT_TOWN7, 0x10),
TEXT_INDEX(TEXT_TOWN7, 0x11),
} };
extern SpriteLoadData gUnk_0810CB78[];
extern u16 gUnk_0810CC04[];
extern u16 gUnk_0810CBE4[][4];
extern u8 gUnk_0810CBC0[];
extern u8 gUnk_0810CD88[][4];
const u16 gUnk_0810CC04[] = {
TEXT_INDEX(TEXT_TOWN5, 0x37),
TEXT_INDEX(TEXT_TOWN5, 0x38),
};
void sub_0806387C(Entity*);
void sub_0806390C(Entity*);
const Dialog gUnk_0810CC08[] = {
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x5), TEXT_INDEX(TEXT_CAFE, 0x4) } },
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x5), TEXT_INDEX(TEXT_CAFE, 0x4) } },
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0xf), TEXT_INDEX(TEXT_CAFE, 0xe) } },
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x1d), TEXT_INDEX(TEXT_CAFE, 0x1c) } },
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x29), TEXT_INDEX(TEXT_CAFE, 0x28) } },
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x35), TEXT_INDEX(TEXT_CAFE, 0x34) } },
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x41), TEXT_INDEX(TEXT_CAFE, 0x40) } },
{ 2, DIALOG_ROOM_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x4b), TEXT_INDEX(TEXT_CAFE, 0x4a) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x8) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x8) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x12) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x20) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x2c) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x38) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x44) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_CAFE, 0x4e) } },
{ 0, 0, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_HAPPY_HEARTH, 0xf), TEXT_INDEX(TEXT_HAPPY_HEARTH, 0xe) } },
{ 0, 0, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_HAPPY_HEARTH, 0xf), TEXT_INDEX(TEXT_HAPPY_HEARTH, 0xe) } },
{ 0, 0, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_HAPPY_HEARTH, 0xf), TEXT_INDEX(TEXT_HAPPY_HEARTH, 0xe) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x16) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x17) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x19) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x1b) } },
{ 0, 0, DIALOG_NORMAL, 1, { 0, TEXT_INDEX(TEXT_HAPPY_HEARTH, 0x1b) } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806387C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 0, 0, DIALOG_CALL_FUNC, 0, { .func = sub_0806390C } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x52), TEXT_INDEX(TEXT_CAFE, 0x51) } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x52), TEXT_INDEX(TEXT_CAFE, 0x51) } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x54), TEXT_INDEX(TEXT_CAFE, 0x53) } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x56), TEXT_INDEX(TEXT_CAFE, 0x55) } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x58), TEXT_INDEX(TEXT_CAFE, 0x57) } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x5a), TEXT_INDEX(TEXT_CAFE, 0x59) } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x5c), TEXT_INDEX(TEXT_CAFE, 0x5b) } },
{ 89, DIALOG_LOCAL_FLAG, DIALOG_TOGGLE_FLAG, 1, { TEXT_INDEX(TEXT_CAFE, 0x5e), TEXT_INDEX(TEXT_CAFE, 0x5d) } },
};
const u8 gUnk_0810CD88[][4] = {
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 1, 2, 0 }, { 0, 1, 2, 0 }, { 0, 0, 0, 0 },
};
extern void sub_08096208(Entity*, u32);
void sub_080637B8(Entity* this);
@@ -134,9 +228,9 @@ void SittingPersion_ShowDialogue(Entity* this, ScriptExecutionContext* context)
}
void SittingPerson_Head(Entity* this) {
u8* ptr = &gUnk_0810CBC0[this->type * 4];
SetExtraSpriteFrame(this, 0, *ptr + (this->frame & 0xf));
SetExtraSpriteFrame(this, 1, gUnk_0810CD88[this->type][this->frameIndex & 3] + *(ptr + 1));
const FrameStruct* ptr = &gUnk_0810CBC0[this->type * 2];
SetExtraSpriteFrame(this, 0, ptr->frame + (this->frame & 0xf));
SetExtraSpriteFrame(this, 1, gUnk_0810CD88[this->type][this->frameIndex & 3] + ptr->frameIndex);
SetSpriteSubEntryOffsetData1(this, 1, 0);
sub_0807000C(this);
}
@@ -148,7 +242,7 @@ void sub_080639D0(Entity* this) {
void SittingPerson_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_0810CB78[this->type * 3]) != 0) {
if (LoadExtraSpriteData(this, &gUnk_0810CB78[this->type * 3])) {
this->action++;
this->spriteSettings.draw = 1;
this->spriteSettings.flipX = 0;
+3 -3
View File
@@ -71,7 +71,7 @@ void Smith_Head(Entity* this) {
}
void sub_080660EC(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_08110354) != 0) {
if (LoadExtraSpriteData(this, gUnk_08110354)) {
this->action = 1;
this->field_0x68.HALF.LO = sub_0801E99C(this);
InitAnimationForceUpdate(this, 2);
@@ -106,7 +106,7 @@ void sub_08066170(Entity* this) {
}
void sub_08066178(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_08110354) != 0) {
if (LoadExtraSpriteData(this, gUnk_08110354)) {
this->action = 1;
this->spriteSettings.draw = 1;
this->field_0x68.HALF.LO = sub_0801E99C(this);
@@ -221,7 +221,7 @@ void sub_08066288(Entity* this) {
void Smith_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_08110354) != 0) {
if (LoadExtraSpriteData(this, gUnk_08110354)) {
this->action++;
this->spriteSettings.draw = 1;
InitAnimationForceUpdate(this, 6);
+27 -11
View File
@@ -4,16 +4,32 @@
#include "object.h"
#include "item.h"
extern u16 gUnk_0810FA54[];
const SpriteLoadData gUnk_0810FA38[] = {
{ 59, 140, 0 },
{ 59, 140, 0 },
{ 0, 0, 0 },
};
void sub_08064B44(Entity*);
void sub_08064B88(Entity*);
void sub_08064C2C(Entity*);
void sub_08064C50(Entity*);
void (*const gUnk_0810FA44[])(Entity*) = {
sub_08064B44,
sub_08064B88,
sub_08064C2C,
sub_08064C50,
};
extern SpriteLoadData gUnk_0810FA38;
extern const u16 gUnk_0810FA54[];
// const u16 gUnk_0810FA54[] = {
// TEXT_INDEX(TEXT_LIBRARY, 0xe),
// TEXT_INDEX(TEXT_LIBRARY, 0x15),
// TEXT_INDEX(TEXT_LIBRARY, 0x11),
// };
extern u32 gUnk_0810FA5A; // TODO second parameter of sub_0806EE04
extern u32 gUnk_0810FA5A;
void sub_08064CC0(Entity* this);
extern void (*const gUnk_0810FA44[])(Entity*);
void sub_08064C9C(Entity* this);
void sub_08064CD8(Entity* this);
void Sturgeon(Entity* this) {
@@ -22,7 +38,7 @@ void Sturgeon(Entity* this) {
sub_0806ED78(this);
} else {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_0810FA38) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810FA38)) {
this->action = 1;
this->timer = 0;
sub_0807DD50(this);
@@ -30,13 +46,13 @@ void Sturgeon(Entity* this) {
} else {
u32 tmp = this->action & 0x80;
if (tmp) {
if (UpdateFuseInteraction(this) != 0) {
if (UpdateFuseInteraction(this)) {
this->action = 1;
}
} else {
if (this->interactType == 2) {
this->action = this->action | 0xff;
this->interactType = tmp;
this->interactType = 0;
InitAnimationForceUpdate(this, sub_0806F5A4(GetFacingDirection(this, &gPlayerEntity)));
sub_0806F118(this);
} else {
@@ -49,7 +65,7 @@ void Sturgeon(Entity* this) {
}
void sub_08064B44(Entity* this) {
if (LoadExtraSpriteData(this, &gUnk_0810FA38) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810FA38)) {
InitializeAnimation(this, 2);
sub_0806EE04(this, &gUnk_0810FA5A, 0);
sub_08064CC0(this);
@@ -152,7 +168,7 @@ void sub_08064D10(Entity* this) {
void Sturgeon_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_0810FA38) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810FA38)) {
this->action++;
this->spriteSettings.draw = 1;
InitializeAnimation(this, 6);
+1 -3
View File
@@ -29,13 +29,11 @@ void Syrup(Entity* this) {
}
void sub_0806A1F8(Entity* this) {
u32 iVar1;
const SpriteLoadData* paVar2;
this->type == 0 ? (paVar2 = gUnk_081121B4) : (paVar2 = gUnk_081121C4);
iVar1 = LoadExtraSpriteData(this, paVar2);
if (iVar1) {
if (LoadExtraSpriteData(this, paVar2)) {
this->action = 1;
SetDefaultPriority(this, PRIO_MESSAGE);
sub_0807DD50(this);
+3 -3
View File
@@ -35,7 +35,7 @@ void Talon(Entity* this) {
}
void sub_08065570(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_0810FEB0) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810FEB0)) {
InitializeAnimation(this, 0);
sub_08078778(this);
this->action = 1;
@@ -75,7 +75,7 @@ void sub_0806559C(Entity* this) {
}
void sub_08065608(Entity* this) {
if (LoadExtraSpriteData(this, gUnk_0810FEB0) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810FEB0)) {
this->action = 1;
this->spriteSettings.draw = 1;
this->field_0x68.HALF.LO = sub_0801E99C(this);
@@ -164,7 +164,7 @@ void Talon_Head(Entity* this) {
void Talon_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_0810FEB0) != 0) {
if (LoadExtraSpriteData(this, gUnk_0810FEB0)) {
this->action++;
this->spriteSettings.draw = 1;
InitializeAnimation(this, 6);
+12 -12
View File
@@ -127,8 +127,8 @@ void sub_08064EE8(Entity* this) {
void sub_08064F28(Entity* this, ScriptExecutionContext* context) {
u32 roomFlag;
u32 bVar2;
int iVar3;
int iVar4;
s32 iVar3;
s32 remainingFusions;
u32 uVar5;
context->condition = 0;
@@ -148,35 +148,35 @@ void sub_08064F28(Entity* this, ScriptExecutionContext* context) {
}
}
}
iVar4 = -1;
remainingFusions = -1;
} else {
if (CheckGlobalFlag(KAKERA_COMPLETE) == 0) {
iVar4 = 100 - gSave.unk117;
if (iVar4 < 1) {
remainingFusions = 100 - gSave.fusedKinstoneCount;
if (remainingFusions < 1) {
uVar5 = 8;
iVar4 = 0;
remainingFusions = 0;
SetGlobalFlag(KAKERA_COMPLETE);
context->condition = 1;
} else {
uVar5 = 7;
if (9 < iVar4) {
if (9 < remainingFusions) {
uVar5 = 6;
}
if (0x27 < iVar4) {
if (0x27 < remainingFusions) {
uVar5 = 5;
}
if (0x45 < iVar4) {
if (0x45 < remainingFusions) {
uVar5 = 4;
}
}
} else {
uVar5 = 8;
iVar4 = 0;
remainingFusions = 0;
}
}
MessageNoOverlap(TingleSiblings_MessageIndices[this->type][uVar5], this);
if (iVar4 > 0) {
gMessage.rupees = (u16)iVar4;
if (remainingFusions > 0) {
gMessage.rupees = (u16)remainingFusions;
}
if (CheckRoomFlag(roomFlag) == 0) {
+1 -1
View File
@@ -199,7 +199,7 @@ void sub_0806ACC4(Entity* this) {
u8 delay;
switch (this->action) {
case 0:
if (LoadExtraSpriteData(this, gUnk_08112674[this->type]) == 0)
if (!LoadExtraSpriteData(this, gUnk_08112674[this->type]))
return;
this->action = 1;
+7 -7
View File
@@ -9,18 +9,18 @@ typedef struct {
u8 unk3;
} struct_0810B680;
extern void (*const gUnk_0810B774[])(Entity*);
extern void (*const gUnk_0810B77C[])(Entity*);
extern void sub_08061CB4(Entity*, u32);
extern void sub_08061D64(Entity*);
extern void sub_08062048(Entity*);
extern SpriteLoadData* gUnk_0810B6EC[];
extern u8 gUnk_0810B78C[];
extern struct_0810B680 gUnk_0810B680[];
extern SpriteLoadData* gUnk_0810B6EC[];
extern u32 gUnk_0810B740[]; // TODO fourth parameter of sub_08078850
extern u8 gUnk_0810B748[]; // TODO third parameter of sub_08078850
extern u16 gUnk_0810B74A[];
extern u8 gUnk_0810B748[];
extern u32 gUnk_0810B740[];
extern void (*const gUnk_0810B774[])(Entity*);
extern void (*const gUnk_0810B77C[])(Entity*);
extern u8 gUnk_0810B78C[];
extern u16 gUnk_0810B790[];
extern u16 gUnk_0810B7BA[];
extern Dialog gUnk_0810B7C0[];
@@ -283,7 +283,7 @@ void sub_08062048(Entity* this) {
void Townsperson_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, gUnk_0810B6EC[this->type]) == 0) {
if (!LoadExtraSpriteData(this, gUnk_0810B6EC[this->type])) {
return;
}
this->action++;
+2 -5
View File
@@ -39,10 +39,7 @@ void WindTribespeople(Entity* this) {
}
void sub_0806C798(Entity* this) {
s32 iVar1;
iVar1 = LoadExtraSpriteData(this, gUnk_08113A1C + (this->type * 4));
if (iVar1 != 0) {
if (LoadExtraSpriteData(this, gUnk_08113A1C + (this->type * 4))) {
this->action = 1;
this->spriteSettings.draw = 1;
this->animationState = this->timer;
@@ -274,7 +271,7 @@ void sub_0806CA5C(Entity* this, ScriptExecutionContext* context) {
void WindTribespeople_Fusion(Entity* this) {
if (this->action == 0) {
if (LoadExtraSpriteData(this, &gUnk_08113A1C[this->type * 4]) != 0) {
if (LoadExtraSpriteData(this, &gUnk_08113A1C[this->type * 4])) {
this->action++;
this->spriteSettings.draw = 1;
InitializeAnimation(this, 6);
+10 -14
View File
@@ -5,8 +5,8 @@
#include "flags.h"
#include "npc.h"
void sub_08068680(Entity*, Entity*);
void sub_08068694(Entity*, Entity*);
void ZeldaFollower_Hide(Entity*, Entity*);
void ZeldaFollower_Show(Entity*, Entity*);
extern Entity* GetEntityByType(u32, u32);
extern void sub_080686C4(Entity*, Entity*);
void sub_08066CCC(Entity*);
@@ -44,7 +44,7 @@ void sub_08066D14(Entity* this, ScriptExecutionContext* context) {
this->animationState = parent->animationState;
this->spriteSettings.draw = 1;
CopyPosition(parent, this);
sub_08068680(this, this->parent);
ZeldaFollower_Hide(this, this->parent);
context->condition = 1;
} else {
context->condition = 0;
@@ -52,16 +52,14 @@ void sub_08066D14(Entity* this, ScriptExecutionContext* context) {
}
void sub_08066D4C(Entity* this, ScriptExecutionContext* context) {
Entity* parent;
parent = this->parent;
Entity* parent = this->parent;
if (this->parent != NULL) {
CopyPosition(this, parent);
this->parent->spriteSettings.draw = 1;
this->parent->animationState = this->animationState;
this->spriteSettings.draw = 0;
this->followerFlag &= 0xFE;
sub_08068694(this, this->parent);
ZeldaFollower_Show(this, this->parent);
context->condition = 1;
} else {
context->condition = 0;
@@ -85,13 +83,11 @@ void sub_08066D94(Entity* this) {
DeleteThisEntity();
}
void SetZeldaFollowTarget(Entity* this) {
Entity* pEVar1;
pEVar1 = DeepFindEntityByID(NPC, ZELDA_FOLLOWER);
if (pEVar1 != NULL) {
CopyPosition(this, pEVar1);
sub_080686C4(this, pEVar1);
void SetZeldaFollowTarget(Entity* target) {
Entity* follower = DeepFindEntityByID(NPC, ZELDA_FOLLOWER);
if (follower != NULL) {
CopyPosition(target, follower);
sub_080686C4(target, follower);
}
}
+14 -15
View File
@@ -3,9 +3,8 @@
#include "functions.h"
#include "common.h"
extern void sub_08068318(Entity*);
extern void sub_0806854C(Entity*, u32*);
void sub_08068318(Entity*);
void sub_0806854C(Entity*, u32*);
void sub_08068578(Entity* this);
void ZeldaFollower(Entity* this) {
@@ -40,20 +39,20 @@ void sub_0806854C(Entity* this, u32* none) {
ASM_FUNC("asm/non_matching/zeldaFollower/sub_08068578.inc", void sub_08068578(Entity* this))
void sub_08068680(Entity* this, Entity* entity) {
entity->field_0x68.HALF.LO = 0;
entity->spriteSettings.draw = 0;
void ZeldaFollower_Hide(Entity* zelda, Entity* follower) {
follower->field_0x68.HALF.LO = 0;
follower->spriteSettings.draw = 0;
}
void sub_08068694(Entity* this, Entity* entity) {
entity->field_0x68.HALF.LO = 1;
entity->spriteSettings.draw = 1;
entity->animationState = this->animationState;
sub_08068578(entity);
InitAnimationForceUpdate(entity, entity->animationState / 2);
void ZeldaFollower_Show(Entity* zelda, Entity* follower) {
follower->field_0x68.HALF.LO = 1;
follower->spriteSettings.draw = 1;
follower->animationState = zelda->animationState;
sub_08068578(follower);
InitAnimationForceUpdate(follower, follower->animationState / 2);
}
void sub_080686C4(Entity* this, Entity* entity) {
entity->y.HALF.HI -= 0x10;
sub_08068578(entity);
void sub_080686C4(Entity* zelda, Entity* follower) {
follower->y.HALF.HI -= 0x10;
sub_08068578(follower);
}
+13
View File
@@ -495,3 +495,16 @@ void ShowNPCDialogue(Entity* ent, const Dialog* dia) {
MessageFromTarget(uVar2);
}
}
const u8 gUnk_08114F30[] = {
0,
0,
1,
2,
};
const u8 gUnk_08114F34[] = {
1,
2,
3,
3,
};
+2 -3
View File
@@ -6,13 +6,12 @@
*/
#include "asm.h"
#include "entity.h"
#include "hitbox.h"
#include "physics.h"
#include "projectile.h"
#include "room.h"
#include "sound.h"
extern Hitbox gUnk_080FD178;
void AngryStatue_Init(Entity*);
void AngryStatue_Action1(Entity*);
void AngryStatue_Action2(Entity*);
@@ -29,7 +28,7 @@ void AngryStatue(Entity* this) {
void AngryStatue_Init(Entity* this) {
this->action = 1;
this->hitbox = &gUnk_080FD178;
this->hitbox = (Hitbox*)&gUnk_080FD178;
SetTile(0x4022, COORD_TO_TILE(this), this->collisionLayer);
InitializeAnimation(this, this->type);
}
+2 -2
View File
@@ -116,7 +116,7 @@ void CameraTarget_Action2(Entity* this) {
u32 bVar3;
u32 temp;
u32 temp2;
const struct_080C9CBC* ptr;
const KinstoneWorldEvent* ptr;
if ((this->type != 1) &&
(((u8)(gUnk_03003DF0.unk_4[3] - 1) >= 100 || (this->child != *(Entity**)(gUnk_03003DF0.unk_4 + 8))))) {
@@ -132,7 +132,7 @@ void CameraTarget_Action2(Entity* this) {
} else {
bVar2 = this->type2;
}
ptr = gUnk_080C9CBC + bVar2;
ptr = gKinstoneWorldEvents + bVar2;
bVar1 = ptr->unk6;
bVar3 = bVar1 & 1;
this->palette.b.b0 = bVar3;
+15 -13
View File
@@ -13,16 +13,25 @@
#include "screen.h"
#include "script.h"
extern u8 gUnk_08114F30[];
extern u8 gUnk_08114F34[];
extern u8 gUnk_08122AE0[];
extern u16 gUnk_08122AE8[];
extern s8 gUnk_08122AF8[];
extern s8 gUnk_08122AF8[]; // TODO struct s8XY
extern u16 gUnk_08122B00[];
extern s16 gUnk_08122B0E[];
extern u16 gUnk_08122B1E[];
extern s8 gUnk_08122B2E[];
extern Coords8 gUnk_08122B2E[]; // TODO struct xy
typedef struct {
Hitbox hit;
u8 _8[4]; // TODO fourth param of sub_08078850
u8 _c;
} HitboxCfg;
extern HitboxCfg gUnk_08122B3C[];
// npcUtils.c
extern u8 gUnk_08114F30[];
extern u8 gUnk_08114F34[];
// TODO use Script type
extern u16 script_CutsceneMiscObjectTheLittleHat;
extern u16 script_CutsceneMiscObjectSwordInChest;
extern u16 script_08015B14;
@@ -56,13 +65,6 @@ typedef struct {
u32 anim;
} Type1F;
typedef struct {
Hitbox hit;
u8 _8[4];
u8 _c;
} HitboxCfg;
extern HitboxCfg gUnk_08122B3C[];
typedef void(CutsceneMiscObjectTypeAction)(CutsceneMiscObjectEntity*);
CutsceneMiscObjectTypeAction sub_08094A5C;
@@ -1265,10 +1267,10 @@ void sub_080961F4(CutsceneMiscObjectEntity* this) {
}
void sub_08096208(CutsceneMiscObjectEntity* this, u32 x) {
s8* p = &gUnk_08122B2E[x * 2];
Coords8* p = &gUnk_08122B2E[x];
Entity* e = CreateObject(CUTSCENE_MISC_OBJECT, 0x26, 0);
if (e != NULL) {
PositionRelative(super, e, Q_16_16(p[0]), Q_16_16(p[1]));
PositionRelative(super, e, Q_16_16(p->x), Q_16_16(p->y));
}
}
+16 -18
View File
@@ -6,9 +6,10 @@
*/
#define NENT_DEPRECATED
#include "figurineMenu.h"
#include "fileselect.h"
#include "functions.h"
#include "global.h"
#include "kinstone.h"
#include "item.h"
#include "message.h"
#include "object.h"
@@ -43,13 +44,6 @@ typedef struct {
extern void ModShells(s32);
extern u8 gUnk_020227F0;
typedef struct {
u32 unk_0;
u16 unk_4;
u8 unk_6;
u8 unk_7;
} struct_080FC3E4;
extern const struct_080FC3E4 gUnk_080FC3E4[];
void sub_0808804C(FigurineDeviceEntity*);
void sub_08087F58(FigurineDeviceEntity*);
@@ -509,13 +503,13 @@ NONMATCH("asm/non_matching/figurineDevice/sub_08088160.inc",
switch (ptr->unk_6) {
case 0x8:
case 0x40:
if (CheckLocalFlagByBank(ptr->unk_0, ptr->unk_4)) {
if (CheckLocalFlagByBank(ptr->bank, ptr->flag)) {
result = TRUE;
}
return result;
break;
case 0x10:
if (CheckKinstoneFused(gUnk_080FC3E4[param_2].unk_4)) {
if (CheckKinstoneFused(gUnk_080FC3E4[param_2].flag)) {
result = TRUE;
}
return result;
@@ -523,30 +517,34 @@ NONMATCH("asm/non_matching/figurineDevice/sub_08088160.inc",
default:
return result;
case 0x20:
switch (gUnk_080FC3E4[param_2].unk_4) {
switch (gUnk_080FC3E4[param_2].flag) {
case 0:
if (CheckKinstoneFused(0x20) || CheckKinstoneFused(0x10) || CheckKinstoneFused(0x19)) {
if (CheckKinstoneFused(KINSTONE_20) || CheckKinstoneFused(KINSTONE_10) ||
CheckKinstoneFused(KINSTONE_19)) {
result = TRUE;
}
break;
case 1:
if ((u8)this->unk_7c >= 5 && CheckKinstoneFused(0x28)) {
if ((u8)this->unk_7c >= 5 && CheckKinstoneFused(KINSTONE_28)) {
result = TRUE;
}
break;
case 2:
if (CheckKinstoneFused(0x54) || CheckKinstoneFused(0x56) || CheckKinstoneFused(0x3d)) {
if (CheckKinstoneFused(KINSTONE_54) || CheckKinstoneFused(KINSTONE_56) ||
CheckKinstoneFused(KINSTONE_3D)) {
result = TRUE;
}
break;
case 3:
if (CheckKinstoneFused(0x3b) || CheckKinstoneFused(0x4a) || CheckKinstoneFused(0xd)) {
if (CheckKinstoneFused(KINSTONE_3B) || CheckKinstoneFused(KINSTONE_4A) ||
CheckKinstoneFused(KINSTONE_D)) {
result = TRUE;
}
break;
case 4:
if (CheckKinstoneFused(0x49) || CheckKinstoneFused(0x55) || CheckKinstoneFused(0x3c)) {
if (CheckKinstoneFused(KINSTONE_49) || CheckKinstoneFused(KINSTONE_55) ||
CheckKinstoneFused(KINSTONE_3C)) {
result = TRUE;
}
break;
@@ -598,9 +596,9 @@ void sub_080882A8(FigurineDeviceEntity* this) {
sub_08057044(this->unk_83, &gUnk_020227E8[1], 0x202020);
ptr = (u8*)0x02000000;
if (ptr[7] == 0) {
sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120AB4); // TODO convert data
ShowTextBox(gUnk_08120AE4[super->type2], (Font*)&gUnk_08120AB4); // TODO convert data
} else {
sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120ACC); // TODO convert data
ShowTextBox(gUnk_08120AE4[super->type2], (Font*)&gUnk_08120ACC); // TODO convert data
}
gScreen.bg0.updated = 1;
}
+3 -3
View File
@@ -88,7 +88,7 @@ void sub_0808E7F0(Entity* this) {
void sub_0808E818(Entity* this) {
u32 var0;
u32 var1;
u32 offset;
if (!sub_0808E950()) {
int var2 = -1;
@@ -104,8 +104,8 @@ void sub_0808E818(Entity* this) {
this->field_0x68.HWORD = CheckGlobalFlag(EZERO_1ST) == 0 ? 0x400 : 0x100;
this->field_0x70.BYTES.byte0 = 4;
this->animationState = 2;
var1 = gUnk_08133368[GetPlayerPalette(TRUE) - 22] & 0xFFFFFF;
LoadPalettes(&gGlobalGfxAndPalettes[var1], 31, 1);
offset = gUnk_08133368[GetPlayerPalette(TRUE) - 22] & 0xFFFFFF;
LoadPalettes(&gGlobalGfxAndPalettes[offset], 31, 1);
}
if (gUI.lastState == 0) {
+1 -1
View File
@@ -307,7 +307,7 @@ void FrozenOctorok_Action1SubAction5(FrozenOctorokEntity* this) {
void FrozenOctorok_Action1SubAction6(FrozenOctorokEntity* this) {
LinearMoveUpdate(super);
if ((gRoomControls.origin_y + 0x1c8) < super->y.HALF.HI) {
gRoomControls.unk5 = 4;
gRoomControls.scrollSpeed = 4;
gRoomControls.camera_target = &gPlayerEntity;
SetLocalFlag(0x9b);
DeleteEntity(super->parent);
+1 -2
View File
@@ -9,6 +9,7 @@
#include "effects.h"
#include "entity.h"
#include "functions.h"
#include "hitbox.h"
#include "object.h"
#include "player.h"
#include "room.h"
@@ -23,8 +24,6 @@ typedef struct {
union SplitWord unk84;
} GleerokParticleEntity;
extern Hitbox gUnk_080FD2E8;
void GleerokParticle_Init(GleerokParticleEntity*);
void GleerokParticle_Action1(GleerokParticleEntity*);
void GleerokParticle_Action2(GleerokParticleEntity*);
+2 -2
View File
@@ -60,10 +60,10 @@ void GreatFairy_CallBehavior(Entity* this) {
if ((gPlayerEntity.y.HALF.HI - gRoomControls.origin_y) < 168) {
gRoomControls.camera_target = this;
gRoomControls.unk5 = 2;
gRoomControls.scrollSpeed = 2;
} else {
gRoomControls.camera_target = &gPlayerEntity;
gRoomControls.unk5 = 2;
gRoomControls.scrollSpeed = 2;
}
}
+1 -1
View File
@@ -52,7 +52,7 @@ void KinstoneSpark(Entity* this) {
this->spriteRendering.b3 = 1;
this->spritePriority.b0 = 0;
this->spriteOrientation.flipY = 1;
ChangeObjPalette(this, gUnk_080C9CBC[gFuseInfo._3].unk0);
ChangeObjPalette(this, gKinstoneWorldEvents[gFuseInfo.kinstoneId].objPalette);
}
GetNextFrame(this);
}
+10 -10
View File
@@ -42,7 +42,7 @@ void LightRay_Type0(LightRayEntity* this) {
super->timer = 60;
super->subtimer = 0;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
if (super->x.HALF.HI > gPlayerEntity.x.HALF.HI) {
tmp = 2;
} else {
@@ -76,7 +76,7 @@ void LightRay_Type0(LightRayEntity* this) {
case 2:
if (--super->timer == 0) {
gScreen.lcd.displayControl |= 0x4800;
gRoomControls.unk5 = 4;
gRoomControls.scrollSpeed = 4;
(super->parent)->subAction = 1;
DeleteThisEntity();
}
@@ -116,7 +116,7 @@ void LightRay_Type1(LightRayEntity* this) {
super->timer = 60;
super->subtimer = 32;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
if (super->x.HALF.HI > gPlayerEntity.x.HALF.HI) {
tmp = 2;
} else {
@@ -148,7 +148,7 @@ void LightRay_Type1(LightRayEntity* this) {
break;
case 2:
if (--super->timer == 0) {
gRoomControls.unk5 = 4;
gRoomControls.scrollSpeed = 4;
gScreen.lcd.displayControl &= 0xd7ff;
(super->parent)->subAction = 1;
DeleteThisEntity();
@@ -167,7 +167,7 @@ void LightRay_Type2(LightRayEntity* this) {
super->timer = 60;
super->subtimer = 0;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
if (super->x.HALF.HI > gPlayerEntity.x.HALF.HI) {
tmp = 2;
} else {
@@ -214,12 +214,12 @@ void LightRay_Type2(LightRayEntity* this) {
if (--super->timer == 0) {
super->action = 4;
gRoomControls.camera_target = &gPlayerEntity;
gRoomControls.unk5 = 2;
gRoomControls.scrollSpeed = 2;
}
break;
case 4:
if (sub_0809BE78(this)) {
gRoomControls.unk5 = 4;
gRoomControls.scrollSpeed = 4;
(super->parent)->subAction = 1;
SetRoomFlag(100);
DeleteThisEntity();
@@ -237,7 +237,7 @@ void LightRay_Type3(LightRayEntity* this) {
super->timer = 60;
super->subtimer = 0;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
if (super->x.HALF.HI > gPlayerEntity.x.HALF.HI) {
tmp = 2;
} else {
@@ -293,7 +293,7 @@ void LightRay_Type4(LightRayEntity* this) {
super->timer = 60;
super->subtimer = 128;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 1;
gRoomControls.scrollSpeed = 1;
if (super->x.HALF.HI > gPlayerEntity.x.HALF.HI) {
tmp = 2;
} else {
@@ -319,7 +319,7 @@ void LightRay_Type4(LightRayEntity* this) {
break;
case 2:
if (--super->timer == 0) {
gRoomControls.unk5 = 4;
gRoomControls.scrollSpeed = 4;
(super->parent)->subAction = 1;
DeleteThisEntity();
}
+1 -7
View File
@@ -19,12 +19,6 @@ typedef struct {
/*0x68*/ u16 unk_68;
} LinkHoldingItemEntity;
typedef struct {
u8 unk_0[6];
u16 unk_6;
} struct_080FD964;
extern const struct_080FD964 gUnk_080FD964[];
void LinkHoldingItem_Init(LinkHoldingItemEntity*);
void LinkHoldingItem_Action1(LinkHoldingItemEntity*);
void LinkHoldingItem_Action2(LinkHoldingItemEntity*);
@@ -74,7 +68,7 @@ void LinkHoldingItem_Action1(LinkHoldingItemEntity* this) {
break;
case 2:
GiveItem(super->type, super->type2);
this->unk_68 = gUnk_080FD964[super->type].unk_6;
this->unk_68 = gUnk_080FD964[super->type].gotItemMessageId;
SoundReq(SFX_ITEM_GET);
break;
case 5:
+1 -1
View File
@@ -223,7 +223,7 @@ void LockedDoor_Action8(Entity* this) {
this->timer = 20;
sub_08083658(this);
SetFlag(this->field_0x86.HWORD);
sub_080526F8(-1);
ModDungeonKeys(-1);
}
void sub_08083638(Entity* this) {
+1 -1
View File
@@ -134,7 +134,7 @@ void Minecart_Action3(MinecartEntity* this) {
u32 iVar2;
u32 uVar3;
gRoomControls.unk5 = 7;
gRoomControls.scrollSpeed = 7;
if ((gPlayerState.flags & PL_IN_MINECART) == 0) {
super->action = 1;
return;
+1 -1
View File
@@ -40,7 +40,7 @@ void ObjectA(Entity* this) {
SetTileType(*(u16*)&this->field_0x70.HALF.LO, COORD_TO_TILE(this), this->collisionLayer);
SetFlag(this->field_0x86.HWORD);
CreateDust(this);
sub_080526F8(-1);
ModDungeonKeys(-1);
DeleteThisEntity();
}
}
+2 -2
View File
@@ -96,7 +96,7 @@ void PushableGrave_Action2(PushableGraveEntity* this) {
super->subAction = 1;
super->subtimer = 120;
gRoomControls.camera_target = super;
gRoomControls.unk5 = 2;
gRoomControls.scrollSpeed = 2;
}
} else {
if (--super->subtimer == 0) {
@@ -122,7 +122,7 @@ void PushableGrave_Action3(PushableGraveEntity* this) {
sub_080977F4(this);
if (super->type == 0) {
gRoomControls.camera_target = &gPlayerEntity;
gRoomControls.unk5 = 4;
gRoomControls.scrollSpeed = 4;
}
}
}
+4 -4
View File
@@ -10,8 +10,8 @@
#include "hitbox.h"
#include "object.h"
extern void sub_0807CAC8(u32);
extern u32 sub_0807CAEC(u32);
extern void EnableDungeonWarp(u32);
extern u32 IsDungeonWarpActive(u32);
void WarpPoint_Init(Entity*);
void WarpPoint_Action1(Entity*);
@@ -50,7 +50,7 @@ void WarpPoint_Init(Entity* this) {
if (CheckFlags(this->field_0x86.HWORD)) {
sub_0808B830(this);
} else {
if (AreaIsDungeon() && sub_0807CAEC(this->type)) {
if (AreaIsDungeon() && IsDungeonWarpActive(this->type)) {
sub_0808B830(this);
}
}
@@ -69,7 +69,7 @@ void WarpPoint_Action1(Entity* this) {
if (CheckFlags(this->field_0x86.HWORD)) {
sub_0808B830(this);
if (AreaIsDungeon()) {
sub_0807CAC8(this->type);
EnableDungeonWarp(this->type);
}
this->action = 2;
this->subtimer = 60;
+15 -1
View File
@@ -13,6 +13,19 @@ extern const ObjectDefinition gObjectDefinitions[];
static Entity* CreateSpeechBubble(Entity*, u32, s32, s32);
const s8 gUnk_08126EE4[] = {
0, -32, //
22, -6, //
0, 12, //
-22, -6,
};
const s8 gUnk_08126EEC[] = {
0, -13, //
13, 0, //
0, 16, //
-13, 0,
};
Entity* CreateLinkAnimation(Entity* parent, u32 type, u32 type2) {
Entity* e = CreateItemGetEntity();
if (e != NULL) {
@@ -253,7 +266,8 @@ void CreateSparkle(Entity* entity) {
}
}
NONMATCH("asm/non_matching/objectUtils/sub_080A2BE4.inc", void SyncPlayerToPlatform(Entity* this, bool32 param_2)) {
NONMATCH("asm/non_matching/objectUtils/SyncPlayerToPlatform.inc",
void SyncPlayerToPlatform(Entity* this, bool32 param_2)) {
s16 oldValue;
s32 diff;
u16 newValue;
+13 -13
View File
@@ -167,9 +167,9 @@ void LinearMoveUpdate(Entity* ent) {
}
}
void sub_0806F704(Entity* ent, u32 a2) {
ent->x.HALF.HI = (((16 * a2) & 0x3F0) | 8) + gRoomControls.origin_x;
ent->y.HALF.HI = (((a2 >> 2) & 0x3F0) | 8) + gRoomControls.origin_y;
void sub_0806F704(Entity* this, u32 tilePos) {
this->x.HALF.HI = (((16 * tilePos) & 0x3F0) | 8) + gRoomControls.origin_x;
this->y.HALF.HI = (((tilePos >> 2) & 0x3F0) | 8) + gRoomControls.origin_y;
}
/** Calculates the tile position of the player but modifies it by the hitbox depending on the animation state. */
@@ -509,30 +509,30 @@ bool32 sub_0806FDA0(Entity* this) {
return 0;
}
u32 LoadExtraSpriteData(Entity* ent, const SpriteLoadData* data) {
bool32 LoadExtraSpriteData(Entity* entity, const SpriteLoadData* spriteData) {
const SpriteLoadData* ptr;
u32 index;
struct_gUnk_020000C0_1* ptr2;
if (sub_0806FDA0(ent) == 0)
return 0;
if (sub_0806FDA0(entity) == 0)
return FALSE;
UnloadOBJPalette(ent);
ptr2 = gUnk_020000C0[ent->spriteAnimation[2]].unk_00;
ptr = data;
UnloadOBJPalette(entity);
ptr2 = gUnk_020000C0[entity->spriteAnimation[2]].unk_00;
ptr = spriteData;
for (index = 0; index < 4 && (((u16*)ptr)[1] & 0x3ff); index++) {
u32 pal = LoadObjPalette(ent, ((*(u32*)ptr) << 0x16) >> 0x16);
u32 pal = LoadObjPalette(entity, ((*(u32*)ptr) << 0x16) >> 0x16);
sub_0806FEE8(ptr2, (*(u32*)ptr << 6) >> 0x16, pal, (*(u32*)ptr << 0x10) >> 0x1a);
if (((u8*)ptr)[3] & 4) {
sub_0806FEFC(ptr2, ent);
sub_0806FEFC(ptr2, entity);
}
ptr2++;
ptr++;
}
ent->spriteAnimation[1] = 0;
return 1;
entity->spriteAnimation[1] = 0;
return TRUE;
}
void UnloadOBJPalette2(Entity* ent) {
+66
View File
@@ -262,3 +262,69 @@ void sub_08019468(PlayerItemBowEntity* this) {
CreateFx(super, FX_REFLECT5, 0);
}
}
// Probably belongs to collision.c, but needs to be placed at the end of playerItemBow.c or start of
// playerItemSwordBeam.c
const u8 gUnk_080B3E80[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255,
255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 255,
0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 48, 34, 34, 36, 0, 0, 29, 29, 29, 255, 255, 29,
29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 255, 255, 255, 255, 255, 29, 29, 29, 255, 255, 29, 29,
255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 32, 32,
15, 15, 15, 15, 0, 0, 0, 0, 21, 21, 20, 20, 95, 255, 255, 255, 255, 255, 255, 15, 41, 41, 41,
41, 0, 36, 36, 36, 15, 15, 15, 15, 255, 255, 255, 255, 255, 255, 15, 15, 15, 15, 39, 39, 15, 15,
15, 39, 15, 15, 35, 15, 15, 35, 15, 15, 15, 15, 15, 15, 15, 15, 15, 39, 15, 15, 39, 39, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 39, 15, 15, 255, 39, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 39, 39, 15, 15, 39, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 35, 15, 15, 35,
35, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 35, 35, 15, 15, 35, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 15, 15, 15, 15, 15, 15, 95, 255, 255, 15, 15, 21, 15, 0, 0, 0, 255, 12, 0, 0, 12,
12, 66, 96, 15, 29, 255, 15, 15, 15, 0, 15, 15, 15, 15, 10, 5, 10, 5, 1, 1, 1, 0, 0,
0, 0, 0, 0, 5, 15, 10, 0, 0, 5, 15, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0,
10, 4, 12, 8, 0, 0, 0, 5, 0, 10, 4, 12, 8, 15, 15, 15, 15, 15, 16, 17, 17, 16, 42,
42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 27, 25, 28, 26, 43, 43, 97, 23, 23, 84, 23, 23,
23, 0, 0, 84, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 18, 15, 15, 19, 15, 15, 15, 15,
15, 15, 15, 15, 5, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 1, 3, 2, 0, 0, 5, 15, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 71, 15, 15, 15, 1, 3, 2, 15, 15, 5, 15, 10, 15,
15, 4, 0, 8, 15, 12, 12, 0, 12, 12, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 16, 15, 17, 15, 15, 15, 15, 15,
15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 15, 0, 0, 5, 15, 15, 15, 15, 15, 15, 15, 15,
39, 15, 15, 39, 255, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 39, 15, 15, 39, 255, 15, 15,
15, 15, 255, 255, 255, 255, 255, 255, 15, 39, 15, 15, 255, 39, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0,
0, 0, 0, 5, 0, 10, 4, 12, 8, 70, 75, 74, 72, 71, 96, 98, 97, 99, 100, 102, 15, 80, 48,
48, 255, 0, 255, 0, 0, 0, 0, 255, 0, 0, 37, 15, 255, 255, 255, 255, 255, 255, 0, 0, 33, 33,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
33, 33, 33, 33, 33, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 255, 255, 255, 255, 255,
40, 255, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 21, 20, 20,
15, 15, 15, 15, 15, 15, 15, 15, 255, 1, 1, 1, 255, 255, 255, 255, 24, 24, 24, 24, 38, 15, 0,
28, 26, 27, 25, 255, 0, 15, 21, 15, 15, 15, 19, 18, 15, 15, 15, 18, 19, 35, 39, 0, 0, 2,
14, 13, 12, 3, 9, 6, 4, 8, 11, 7, 10, 5, 3, 107, 103, 106, 15, 12, 20, 21, 15, 0, 15,
40, 95, 15, 5, 10, 16, 17, 18, 19, 71, 12, 13, 14, 71, 20, 92, 13, 5, 4, 8, 1, 2, 10,
5, 10, 15, 4, 8, 15, 3, 2, 5, 15, 10, 4, 12, 8, 3, 2, 5, 15, 10, 4, 12, 8, 92,
84, 81, 83, 81, 82, 83, 90, 87, 91, 95, 84, 88, 92, 85, 93, 94, 39, 88, 85, 10, 83, 90, 81,
15, 89, 0, 0, 69, 71, 67, 70, 0, 3, 15, 1, 2, 3, 10, 12, 5, 4, 8, 4, 1, 3, 15,
95, 97, 0, 3, 28, 27, 21, 69, 3, 96, 12, 102, 100, 101, 26, 25, 18, 17, 19, 16, 2, 4, 8,
14, 15, 11, 84, 69, 68, 4, 13, 0, 0, 12, 12, 15, 15, 10, 5, 10, 5, 12, 97, 10, 5, 11,
7, 67, 69, 1, 2, 4, 8, 13, 3, 3, 7, 15, 3, 0, 2, 84, 92, 88, 12, 67, 0, 0, 8,
1, 2, 87, 95, 91, 82, 14, 18, 19, 10, 5, 0, 10, 5, 3, 63, 19, 18, 47, 46, 17, 16, 11,
7, 15, 0, 3, 15, 15, 1, 8, 12, 12, 15, 1, 3, 2, 5, 10, 4, 12, 8, 9, 39, 2, 14,
13, 12, 3, 6, 9, 4, 8, 11, 7, 10, 5, 34, 35, 4, 12, 3, 3, 1, 5, 10, 4, 8, 0,
107, 103, 106, 18, 45, 44, 0, 15, 41, 40, 0, 0, 0, 0, 0, 0, 0, 20, 33, 39, 67, 4, 8,
12, 3, 3, 1, 2, 0, 12, 3, 2, 5, 10, 14, 13, 4, 8, 11, 7, 12, 0, 0, 39, 1, 2,
1, 2, 4, 12, 7, 11, 4, 8, 16, 17, 43, 43, 18, 19, 10, 5, 2, 1, 35, 1, 3, 2, 5,
10, 14, 13, 11, 7, 4, 8, 10, 5, 10, 5, 13, 14, 8, 4, 7, 11, 0, 9, 6, 0, 15, 7,
11, 3, 33, 33, 33, 33, 33, 33, 33, 15, 5, 10, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 3, 48, 48, 0, 0, 0, 0, 0, 0, 48, 48,
33, 33, 0, 15, 83, 92, 85, 90, 96, 97, 95, 18, 19, 16, 10, 10, 35, 10, 5, 14, 13, 11, 7,
10, 5, 14, 13, 11, 7, 0, 0, 3, 0, 39, 12, 12, 33, 0, 0,
};
@@ -4,6 +4,10 @@
#include "common.h"
#include "asm.h"
extern const u8 gUnk_080B7910[];
extern const u8 gUnk_080B79A7[];
extern const u8 gUnk_080B7A3E[]; // TODO figure out type from arm_sub_080B1B84 and arm_sub_080B1BA4
void PlayerItemCellOverwriteSet(Entity* this) {
static const s8 gUnk_080B7B6C[] = { 0x0, -0x10, 0x10, 0x0, 0x0, 0x10, -0x10, 0x0 };
u32 tmp;
+4 -2
View File
@@ -3,7 +3,11 @@
#include "functions.h"
#include "sound.h"
extern const u8* gUnk_08132714[]; // Anim index lists?
// TODO spriteAnimations in here
// TODO sprite frame in here
extern Hitbox gUnk_08132B28;
void sub_080ADC84(Entity*);
void PlayerItemGustJar_Init(Entity*);
void PlayerItemGustJar_Action1(Entity*);
@@ -143,8 +147,6 @@ void sub_080ADC84(Entity* this) {
this->spriteSettings.flipX = gPlayerEntity.spriteSettings.flipX;
}
extern const u8* gUnk_08132714[];
void sub_080ADCA0(Entity* this, u32 param_2) {
const u8* pFVar1 = gUnk_08132714[(param_2 + (gPlayerEntity.animationState >> 1))];
const u8* pFVar2;
+34 -9
View File
@@ -7,6 +7,8 @@
#include "collision.h"
#include "playeritem.h"
const Hitbox gUnk_081271CC = { 0, 0, { 1, 0, 0, 1 }, 8, 8 };
typedef struct {
Entity base;
u8 unk_68;
@@ -17,9 +19,35 @@ typedef struct {
u32 unk_78;
u8* unk_7c;
} PlayerItemShieldEntity;
void sub_080A2D98(PlayerItemShieldEntity*);
void sub_080A2E00(PlayerItemShieldEntity*);
void (*const gUnk_081271D4[])(PlayerItemShieldEntity*) = {
sub_080A2D98,
sub_080A2E00,
};
const u8 gUnk_081271DC[] = {
7, 60, 0, 0, 0, 2, 0, 0, 1, 2, 0, 0, 2, 2, 0, 0, 3, 2, 0, 0, 4, 2, 0, 0, 5, 2, 0, 0, 6, 2, 0, 0, 7, 20,
0, 0, 0, 2, 0, 0, 1, 2, 0, 0, 2, 2, 0, 0, 3, 2, 0, 0, 4, 2, 0, 0, 5, 2, 0, 0, 6, 2, 0, 0, 255, 0, 0, 0,
};
const u8 gUnk_08127220[] = {
0, 1, 0, 0, 1, 2, 0, 0, 2, 4, 0, 0, 3, 2, 0, 0, 4, 3, 0, 0, 5, 2, 0, 0, 3, 2, 0, 0, 255, 0, 0, 0,
};
const Hitbox gUnk_08127250;
const Hitbox gUnk_08127258;
const Hitbox gUnk_08127260;
const Hitbox gUnk_08127268;
const Hitbox* const gUnk_08127240[] = {
&gUnk_08127250,
&gUnk_08127258,
&gUnk_08127260,
&gUnk_08127268,
};
const Hitbox gUnk_08127250 = { 0, -7, { 0, 0, 0, 0 }, 6, 7 };
const Hitbox gUnk_08127258 = { 5, -4, { 0, 0, 0, 0 }, 5, 7 };
const Hitbox gUnk_08127260 = { 0, 0, { 0, 0, 0, 0 }, 6, 7 };
const Hitbox gUnk_08127268 = { -5, -4, { 0, 0, 0, 0 }, 5, 7 };
extern void (*const gUnk_081271D4[])(PlayerItemShieldEntity*);
extern u8 gUnk_081271DC[];
void sub_080A2E00(PlayerItemShieldEntity* this);
void PlayerItemShield(PlayerItemShieldEntity* this) {
@@ -38,7 +66,7 @@ void sub_080A2D98(PlayerItemShieldEntity* this) {
this->unk_70 = 0x27;
this->unk_78 = gUnk_081271DC[1];
this->unk_74 = 0;
this->unk_7c = gUnk_081271DC;
this->unk_7c = (u8*)gUnk_081271DC;
} else {
this->unk_70 = 0;
}
@@ -48,9 +76,6 @@ void sub_080A2D98(PlayerItemShieldEntity* this) {
sub_080A2E00(this);
}
extern Hitbox* gUnk_08127240[];
extern u8 gUnk_08127220[];
void sub_080A2E00(PlayerItemShieldEntity* this) {
Entity* playerItem;
u8* pbVar3;
@@ -66,7 +91,7 @@ void sub_080A2E00(PlayerItemShieldEntity* this) {
if ((gPlayerState.shield_status != 0) && (super == gPlayerState.item)) {
if ((gPlayerState.shield_status & 0x80) != 0) {
super->hitbox = gUnk_08127240[super->animationState >> 1];
super->hitbox = (Hitbox*)gUnk_08127240[super->animationState >> 1];
super->collisionFlags = (gPlayerEntity.collisionFlags + 1) | 0x20;
COLLISION_ON(super);
gPlayerState.shield_status &= ~0x80;
@@ -84,7 +109,7 @@ void sub_080A2E00(PlayerItemShieldEntity* this) {
}
this->unk_78 = gUnk_08127220[1];
this->unk_74 = 0;
this->unk_7c = gUnk_08127220;
this->unk_7c = (u8*)gUnk_08127220;
gPlayerState.shield_status |= 0x40;
}
if (this->bounceTimer == 0) {
@@ -117,7 +142,7 @@ void sub_080A2E00(PlayerItemShieldEntity* this) {
pbVar3 = &this->unk_7c[tmp2];
if (pbVar3[0] == 0xff) {
if ((gPlayerState.shield_status & 0x40) != 0) {
this->unk_7c = gUnk_081271DC;
this->unk_7c = (u8*)gUnk_081271DC;
gPlayerState.shield_status &= ~0x40;
}
this->unk_74 = 0;
+230 -36
View File
@@ -33,7 +33,6 @@ void sub_08079064(Entity*);
extern u8 gMapData;
extern const u8 gUnk_020176E0[];
extern const s8* gUnk_0811C0E8[];
extern const u8 gUnk_0800851C[];
extern const u8 gUnk_080084BC[];
extern const u8 gUnk_0800845C[];
@@ -58,14 +57,7 @@ void sub_0807AAF8(Entity*, u32);
void sub_0807A750(u32, u32, const u8*, u32);
extern ItemDefinition gItemDefinitions[];
extern void (*const gUnk_0811C27C[])(Entity*);
extern void (*const gUnk_0811C284[])(PlayerEntity*);
extern void (*const gUnk_0811C298[])(PlayerEntity*);
extern bool32 (*const gPlayerChargeActions[])(ChargeState*);
extern u8 gUnk_0811C000[];
extern const u8 gUnk_0811C118[];
extern void (*const gUnk_0811C120[])(Entity*);
extern u16 gUnk_0811C268[];
extern ItemBehavior* (*const gCreateItemsFuncs[])(Item);
extern void DeleteLoadedTileEntity(u32, u32);
@@ -83,24 +75,15 @@ void sub_0807BFD0(void);
void ForceSetPlayerState(u32 framestate);
struct_03003DF8* sub_080784E4(void);
extern const u16 gUnk_0811C0F8[];
u32 sub_08079778(void);
u32 GetPlayerTilePos(void);
extern const u16 gUnk_0811C108[];
extern const u16 gUnk_0811C110[];
extern const u16 gUnk_08007CAC[];
u32 sub_0807BEEC(u32 param_1, u32 param_2, u32 param_3);
extern const u16 gUnk_0811C466[];
bool32 sub_0807B434(u32 position, u32 layer);
extern const u16 gUnk_0811C2AC[];
void sub_0807B820(u32);
void sub_0807B8A8(u32);
void sub_0807B930(u32);
@@ -108,15 +91,10 @@ bool32 sub_0807B464(u32 param_1, u32 param_2);
void sub_0807B55C(u32, u32, u16*);
void sub_0807B480(u32, u32);
extern const s16 gUnk_0811C456[];
bool32 sub_0807B600(u32);
bool32 sub_0807B464(u32 tilePos, u32 param_2);
extern const u16 gUnk_0811C2CC[];
extern const u16 gUnk_0811C2EC[];
bool32 sub_0807B464(u32 param_1, u32 param_2);
extern void CreateRandomWaterTrace(Entity* parent, int range);
@@ -167,9 +145,6 @@ void sub_0807C5B0(void);
extern u8 gUnk_080082DC[];
extern u32 sub_08004202(Entity*, u8*, u32);
extern s8* gUnk_0811C0B0[];
extern u8 gUnk_0811C01C[];
extern u32 gUnk_02022830[];
extern u16* gUnk_0800823C[];
@@ -294,6 +269,16 @@ bool32 IsTryingToPickupObject(void) {
}
}
ItemBehavior* CreateItemNone(Item);
ItemBehavior* CreateItem1(Item);
ItemBehavior* CreateItem2(Item);
ItemBehavior* CreateItem3(Item);
ItemBehavior* CreateItem4(Item);
ItemBehavior* CreateItem5(Item);
ItemBehavior* (*const gCreateItemsFuncs[])(Item) = {
CreateItemNone, CreateItem1, CreateItem2, CreateItem3, CreateItem4, CreateItem5,
};
ItemBehavior* CreateItem(Item itemId) {
if (((((gPlayerState.queued_action == PLAYER_ROLL) && (itemId != ITEM_TRY_PICKUP_OBJECT)) ||
(((gPlayerState.flags & (PL_ROLLING | PL_CLONING)) != 0 && (ITEM_FOURSWORD < itemId)))) ||
@@ -659,6 +644,215 @@ bool32 PlayerTryDropObject(ItemBehavior* this, u32 index) {
// TODO move above into a itemUtils.c ?
const u8 gUnk_0811BFE0[] = {
3, 10, 12, 3, 3, 14, 12, 3,
};
bool32 sub_08078008(ChargeState* state);
bool32 sub_08078124(ChargeState* state);
bool32 sub_08078140(ChargeState* state);
bool32 sub_08078070(ChargeState* state);
bool32 sub_080780E0(ChargeState* state);
bool32 sub_08078108(ChargeState* state);
bool32 (*const gPlayerChargeActions[])(ChargeState*) = {
sub_08078008, sub_08078124, sub_08078140, sub_08078070, sub_080780E0, sub_08078108,
};
const u8 gUnk_0811C000[] = {
0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
const u8 gUnk_0811C00C[] = {
0, 238, 14, 255, 0, 10, 241, 255,
};
const u8 gUnk_0811C014[] = {
0, 242, 10, 255, 0, 6, 245, 255,
};
const u8 gUnk_0811C01C[] = {
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 3, 3, 4, 3, 0, 1, 2, 0, 3, 3, 4, 3, 10, 15, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 6, 5, 5, 5, 5, 5, 6, 6, 6, 5, 5, 5, 5, 11, 12, 5, 0, 0,
0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 8, 7, 9, 9, 7, 7, 8, 8, 8, 7, 9, 9, 7, 13, 14, 7, 0, 0,
};
const s8 gUnk_0811C070[] = { 0, 16, 0, 17, 0, 18, 0, 15, 0, 14, 25, -4, 25, -3, 0, -24,
0, -23, 0, -25, 0, 10, 21, -4, 16, -4, 0, -18, 0, -14, 0, 6 };
const s8 gUnk_0811C090[] = { 0, 18, 0, 19, 0, 20, 0, 17, 0, 16, 24, -2, 24, -1, 0, -22,
0, -21, 0, -23, 0, 12, 20, -4, 15, -4, 0, -16, 0, -12, 0, 8 };
const s8* const gUnk_0811C0B0[] = {
gUnk_0811C070,
gUnk_0811C090,
};
const s8 gUnk_0811C0B8[] = { 0, -9, 0, -15, 0, -16, 12, -3, 10, -9, 0, 7, 0, -17, 0, -18 };
const s8 gUnk_0811C0C8[] = { 0, -5, 0, -11, 0, -15, 12, 1, 10, -5, 0, 11, 0, -17, 0, -18 };
const s8 gUnk_0811C0D8[] = { 0, -19, 0, -19, 0, -24, 32, -7, 10, -13, 0, 26, 0, -25, 0, -26 };
const s8* const gUnk_0811C0E8[] = {
gUnk_0811C0B8,
gUnk_0811C0D8,
gUnk_0811C0B8,
gUnk_0811C0C8,
};
const u16 gUnk_0811C0F8[] = { 1024, 256, 2048, 512 };
const s8 gUnk_0811C100[] = { 0, -8, 8, 0, 0, 3, -8, 0 };
const u16 gUnk_0811C108[] = { 6, 24576, 96, 1536 };
const u16 gUnk_0811C110[] = { 6, 24576, 96, 1536 };
const u8 gUnk_0811C118[] = {
19, 18, 18, 16, 16, 17, 17, 19,
};
void SurfaceAction_DoNothing(Entity*);
void SurfaceAction_Pit(Entity*);
void SurfaceAction_SlopeGndGndVertical(Entity*);
void SurfaceAction_SlopeGndGndHorizontal(Entity*);
void SurfaceAction_6(Entity*);
void SurfaceAction_7(Entity*);
void SurfaceAction_MinishDoorFront(Entity*);
void SurfaceAction_MinishDoorBack(Entity*);
void SurfaceAction_A(Entity*);
void SurfaceAction_B(Entity*);
void SurfaceAction_SlopeGndWater(Entity*);
void SurfaceAction_ConveyerNorth(Entity*);
void SurfaceAction_ConveyerSouth(Entity*);
void SurfaceAction_ConveyerWest(Entity*);
void SurfaceAction_ConveyerEast(Entity*);
void SurfaceAction_Swamp(Entity*);
void SurfaceAction_14(Entity*);
void SurfaceAction_CloneTile(Entity*);
void SurfaceAction_16(Entity*);
void SurfaceAction_Ice(Entity*);
void SurfaceAction_ShallowWater(Entity*);
void SurfaceAction_Water(Entity*);
void SurfaceAction_Button(Entity*);
void SurfaceAction_1B(Entity*);
void SurfaceAction_1C(Entity*);
void SurfaceAction_Ladder(Entity*);
void SurfaceAction_20(Entity*);
void SurfaceAction_22(Entity*);
void SurfaceAction_Dust(Entity*);
void SurfaceAction_26(Entity*);
void SurfaceAction_Hole(Entity*);
void SurfaceAction_AutoLadder(Entity*);
void SurfaceAction_ClimbWall(Entity*);
void SurfaceAction_2C(Entity*);
void (*const gUnk_0811C120[])(Entity*) = {
SurfaceAction_DoNothing,
SurfaceAction_Pit,
NULL,
NULL,
SurfaceAction_SlopeGndGndVertical,
SurfaceAction_SlopeGndGndHorizontal,
SurfaceAction_6,
SurfaceAction_7,
SurfaceAction_MinishDoorFront,
SurfaceAction_MinishDoorBack,
SurfaceAction_A,
SurfaceAction_B,
SurfaceAction_SlopeGndWater,
SurfaceAction_ConveyerNorth,
SurfaceAction_ConveyerSouth,
SurfaceAction_ConveyerWest,
SurfaceAction_ConveyerEast,
SurfaceAction_Swamp,
SurfaceAction_DoNothing,
SurfaceAction_DoNothing,
SurfaceAction_14,
SurfaceAction_CloneTile,
SurfaceAction_16,
SurfaceAction_Ice,
SurfaceAction_ShallowWater,
SurfaceAction_Water,
SurfaceAction_Button,
SurfaceAction_1B,
SurfaceAction_1C,
NULL,
SurfaceAction_Ladder,
NULL,
SurfaceAction_20,
SurfaceAction_16,
SurfaceAction_22,
SurfaceAction_6,
SurfaceAction_6,
SurfaceAction_Dust,
SurfaceAction_26,
SurfaceAction_Hole,
SurfaceAction_SlopeGndGndVertical,
SurfaceAction_SlopeGndGndHorizontal,
SurfaceAction_AutoLadder,
SurfaceAction_ClimbWall,
SurfaceAction_2C,
SurfaceAction_Dust,
};
const u16 gUnk_0811C240[];
const u16 gUnk_0811C24A[];
const u16 gUnk_0811C254[];
const u16 gUnk_0811C25E[];
const u16 gUnk_0811C1F8[];
const u16 gUnk_0811C20A[];
const u16 gUnk_0811C21C[];
const u16 gUnk_0811C22E[];
const u16* const gUnk_0811C1D8[] = {
gUnk_0811C240,
gUnk_0811C24A,
gUnk_0811C254,
gUnk_0811C25E,
};
const u16* const gUnk_0811C1E8[] = {
gUnk_0811C1F8,
gUnk_0811C20A,
gUnk_0811C21C,
gUnk_0811C22E,
};
const u16 gUnk_0811C1F8[] = { 43, 1, 65, 1, 78, 8, 76, 2, 0 };
const u16 gUnk_0811C20A[] = { 44, 3, 66, 3, 76, 2, 77, 4, 0 };
const u16 gUnk_0811C21C[] = { 42, 5, 64, 5, 79, 6, 77, 4, 0 };
const u16 gUnk_0811C22E[] = { 45, 7, 67, 7, 78, 8, 79, 6, 0 };
const u16 gUnk_0811C240[] = { 42, 1, 38, 1, 0 };
const u16 gUnk_0811C24A[] = { 45, 1, 39, 1, 0 };
const u16 gUnk_0811C254[] = { 43, 1, 38, 1, 0 };
const u16 gUnk_0811C25E[] = { 44, 1, 39, 1, 0 };
const u16 gUnk_0811C268[] = { 16, 1, 90, 1, 17, 1, 19, 1, 0, 0 };
void sub_0807B114(PlayerEntity*);
void sub_0807B128(PlayerEntity*);
void (*const gUnk_0811C27C[])(PlayerEntity*) = {
sub_0807B114,
sub_0807B128,
};
void sub_0807B1A8(PlayerEntity*);
void sub_0807B144(PlayerEntity*);
void nullsub_506(PlayerEntity*);
void sub_0807B178(PlayerEntity*);
void sub_0807B2F8(PlayerEntity*);
void (*const gUnk_0811C284[])(PlayerEntity*) = {
sub_0807B1A8, sub_0807B144, nullsub_506, sub_0807B178, sub_0807B2F8,
};
void sub_0807B1DC(PlayerEntity*);
void sub_0807B1EC(PlayerEntity*);
void sub_0807B21C(PlayerEntity*);
void sub_0807B264(PlayerEntity*);
void sub_0807B2B8(PlayerEntity*);
void (*const gUnk_0811C298[])(PlayerEntity*) = {
sub_0807B1DC, sub_0807B1EC, sub_0807B21C, sub_0807B264, sub_0807B2B8,
};
const u16 gUnk_0811C2AC[] = { 678, 693, 688, 685, 691, 692, 684, 682, 690, 687, 689, 681, 686, 683, 680, 679 };
const u16 gUnk_0811C2CC[] = { 710, 747, 720, 717, 737, 744, 716, 714, 730, 719, 727, 713, 718, 715, 712, 711 };
const u16 gUnk_0811C2EC[] = {
694, 15, 0, 695, 0, 15, 696, 1, 14, 697, 4, 11, 698, 8, 7, 699, 2, 13, 700, 9, 6, 701, 12, 3, 702, 3, 12,
703, 6, 9, 704, 13, 2, 705, 5, 10, 706, 7, 8, 707, 11, 4, 708, 10, 5, 709, 14, 1, 710, 0, 0, 711, 0, 15,
712, 0, 14, 713, 0, 11, 714, 0, 7, 715, 0, 13, 716, 0, 6, 717, 0, 3, 718, 0, 12, 719, 0, 9, 720, 0, 2,
721, 12, 2, 722, 5, 2, 723, 9, 2, 724, 4, 2, 725, 1, 2, 726, 8, 2, 727, 0, 10, 728, 4, 10, 729, 1, 10,
730, 0, 8, 731, 6, 8, 732, 5, 8, 733, 3, 8, 734, 4, 8, 735, 1, 8, 736, 2, 8, 737, 0, 4, 738, 10, 4,
739, 3, 4, 740, 9, 4, 741, 2, 4, 742, 8, 4, 743, 1, 4, 744, 0, 5, 745, 2, 5, 746, 8, 5, 747, 0, 1,
748, 10, 1, 749, 6, 1, 750, 12, 1, 751, 2, 1, 752, 8, 1, 753, 4, 1, 0,
};
const s16 gUnk_0811C456[] = { 0, -13, 13, 0, 0, 16, -13, 0 };
const u16 gUnk_0811C466[] = { 803, 819, 822, 825, 820, 828, 826, 829, 821, 823, 831, 830, 824, 827, 832, 53, 0 };
void sub_08077F84(void) {
Entity* obj;
@@ -1194,7 +1388,7 @@ void UpdateCarriedObject(void) {
void sub_08078CD0(PlayerEntity* this) {
Entity* entity;
u32 tmp;
s8* ptr;
const s8* ptr;
entity = this->unk_70;
entity->z.HALF.HI = super->z.HALF.HI - 1;
@@ -2610,8 +2804,8 @@ void sub_0807B0C8(void) {
sub_0806FEBC(&gPlayerEntity, 3, 0);
}
void PlayerWarp(Entity* player) {
gUnk_0811C27C[player->subAction](player);
void PlayerWarp(PlayerEntity* this) {
gUnk_0811C27C[super->subAction](this);
}
void sub_0807B114(PlayerEntity* this) {
@@ -2632,7 +2826,7 @@ void sub_0807B144(PlayerEntity* this) {
SetPlayerActionNormal();
}
void nullsub_506(void) {
void nullsub_506(PlayerEntity* this) {
}
void sub_0807B178(PlayerEntity* this) {
@@ -3100,8 +3294,8 @@ void sub_0807BC84(void) {
bool32 sub_0807BD14(Entity* this, u32 scrollDirection) {
u32 room = sub_0807BEEC(this->x.HALF.HI, this->y.HALF.HI, scrollDirection);
if (room != 0xff) {
gRoomControls.unk3 = 2;
gRoomControls.unk4 = 0;
gRoomControls.scrollAction = 2;
gRoomControls.scrollSubAction = 0;
gRoomControls.reload_flags = 1;
gRoomControls.room = room;
gRoomControls.scroll_direction = scrollDirection;
@@ -3696,12 +3890,12 @@ u32 SetInventoryValue(u32 item, u32 value) {
return masked_value >> offset;
}
void sub_0807CAC8(u32 param_1) {
gSave.unk47C[gArea.dungeon_idx] |= (1 << param_1);
void EnableDungeonWarp(u32 warp) {
gSave.dungeonWarps[gArea.dungeon_idx] |= (1 << warp);
}
u32 sub_0807CAEC(u32 param_1) {
return gSave.unk47C[gArea.dungeon_idx] >> param_1 & 1;
u32 IsDungeonWarpActive(u32 warp) {
return gSave.dungeonWarps[gArea.dungeon_idx] >> warp & 1;
}
u32 CheckLocalFlagByBank(u32 bank, u32 flag) {
+10 -10
View File
@@ -50,8 +50,8 @@ const ProjectileDefinition gProjectileDefinitions[] = {
{ 16400, 288, { &gHitbox_0 }, 107, 2, { 0, 1, 1, 1 }, 4, 384, 3, 11 }, // TODO sprite index too high
MULTI_FORM(gProjectileDefinition_14),
{ 16400, 1, { &gHitbox_0 }, SPRITE_SPIDERWEB, 0, { 0, 1, 1, 1 }, 65, 640, 159, 143 },
{ 0, 0, { &gHitbox_20 }, SPRITE_TORCHTRAPPROJECTILE_0, 0, { 0, 1, 1, 1 }, 66, 640, 146, 11 },
{ 399, 0, { &gHitbox_20 }, SPRITE_TORCHTRAPPROJECTILE_1, 0, { 0, 1, 1, 1 }, 65, 640, 10, 11 },
{ 0, 0, { (Hitbox*)&gHitbox_20 }, SPRITE_TORCHTRAPPROJECTILE_0, 0, { 0, 1, 1, 1 }, 66, 640, 146, 11 },
{ 399, 0, { (Hitbox*)&gHitbox_20 }, SPRITE_TORCHTRAPPROJECTILE_1, 0, { 0, 1, 1, 1 }, 65, 640, 10, 11 },
{ 405, 0, { &gHitbox_0 }, SPRITE_V1DARKMAGICPROJECTILE, 0, { 3, 1, 1, 1 }, 66, 256, 46, 15 },
#ifdef EU
{ 401, 112, { &gHitbox_1 }, 488, 0, { 1, 1, 1, 1 }, 65, 640, 162, 11 }, // TODO sprite index too high
@@ -64,8 +64,8 @@ const ProjectileDefinition gProjectileDefinitions[] = {
MULTI_FORM(gProjectileDefinition_1D),
MULTI_FORM(gProjectileDefinition_1E),
MULTI_FORM(gProjectileDefinition_1F),
{ 415, 4, { &gHitbox_20 }, SPRITE_V3HANDPROJECTILE, 0, { 1, 1, 1, 1 }, 66, 704, 60, 11 },
{ 415, 320, { &gHitbox_20 }, SPRITE_V3HANDPROJECTILE, 0, { 1, 1, 1, 1 }, 66, 512, 164, 11 },
{ 415, 4, { (Hitbox*)&gHitbox_20 }, SPRITE_V3HANDPROJECTILE, 0, { 1, 1, 1, 1 }, 66, 704, 60, 11 },
{ 415, 320, { (Hitbox*)&gHitbox_20 }, SPRITE_V3HANDPROJECTILE, 0, { 1, 1, 1, 1 }, 66, 512, 164, 11 },
MULTI_FORM(gProjectileDefinition_22),
{ 493, 0, { &gHitbox_22 }, SPRITE_GYORGMALEENERGYPROJECTILE, 0, { 0, 1, 1, 1 }, 66, 256, 31, 11 },
{ 418, 1, { &gHitbox_22 }, SPRITE_WRATHEYE, 0, { 1, 1, 1, 1 }, 66, 512, 55, 11 },
@@ -113,18 +113,18 @@ const ProjectileDefinition gProjectileDefinition_F[] = {
{ 32992, 1, { &gHitbox_0 }, SPRITE_POT, 0, { 3, 1, 1, 1 }, 66, 384, 157, 11 },
};
const ProjectileDefinition gProjectileDefinition_10[] = {
{ 33008, 1, { &gUnk_080FD3FC }, 167, 1, { 0, 0, 1, 0 }, 65, 640, 110, 4 },
{ 366, 0, { &gUnk_080FD3FC }, SPRITE_FLYINGSKULL, 0, { 0, 0, 1, 0 }, 65, 640, 110, 4 },
{ 33008, 1, { (Hitbox*)&gUnk_080FD3FC }, 167, 1, { 0, 0, 1, 0 }, 65, 640, 110, 4 },
{ 366, 0, { (Hitbox*)&gUnk_080FD3FC }, SPRITE_FLYINGSKULL, 0, { 0, 0, 1, 0 }, 65, 640, 110, 4 },
}; // TODO sprite index too high
#ifdef EU
const ProjectileDefinition gProjectileDefinition_14[] = {
{ 387, 20, { &gHitbox_2 }, 486, 0, { 0, 1, 1, 1 }, 65, 640, 110, 12 },
{ 387, 20, { &gUnk_080FD43C }, 486, 4, { 0, 1, 1, 1 }, 65, 640, 88, 5 },
{ 387, 20, { (Hitbox*)&gUnk_080FD43C }, 486, 4, { 0, 1, 1, 1 }, 65, 640, 88, 5 },
}; // TODO sprite index too high
#else
const ProjectileDefinition gProjectileDefinition_14[] = {
{ 387, 20, { &gHitbox_2 }, 487, 0, { 0, 1, 1, 1 }, 65, 640, 110, 12 },
{ 387, 20, { &gUnk_080FD43C }, 487, 4, { 0, 1, 1, 1 }, 65, 640, 88, 5 },
{ 387, 20, { (Hitbox*)&gUnk_080FD43C }, 487, 4, { 0, 1, 1, 1 }, 65, 640, 88, 5 },
}; // TODO sprite index too high
#endif
const ProjectileDefinition gProjectileDefinition_1B[] = {
@@ -164,12 +164,12 @@ const ProjectileDefinition gProjectileDefinition_1F[] = {
#ifdef EU
const ProjectileDefinition gProjectileDefinition_22[] = {
{ 492, 372, { &gHitbox_1 }, 497, 0, { 0, 0, 1, 1 }, 65, 640, 29, 11 },
{ 491, 338, { &gHitbox_20 }, 496, 0, { 0, 1, 1, 1 }, 65, 640, 29, 11 },
{ 491, 338, { (Hitbox*)&gHitbox_20 }, 496, 0, { 0, 1, 1, 1 }, 65, 640, 29, 11 },
}; // TODO sprite index too high
#else
const ProjectileDefinition gProjectileDefinition_22[] = {
{ 492, 372, { &gHitbox_1 }, 498, 0, { 0, 0, 1, 1 }, 65, 640, 29, 11 },
{ 491, 338, { &gHitbox_20 }, 497, 0, { 0, 1, 1, 1 }, 65, 640, 29, 11 },
{ 491, 338, { (Hitbox*)&gHitbox_20 }, 497, 0, { 0, 1, 1, 1 }, 65, 640, 29, 11 },
}; // TODO sprite index too high
#endif
+1 -2
View File
@@ -11,7 +11,6 @@
static void sub_0804B058(EntityData* dat);
extern void sub_0801AC98(void);
extern u32 sub_08049D1C(u32);
extern void* GetRoomProperty(u32, u32, u32);
extern void** gCurrentRoomProperties;
extern void*** gAreaTable[];
@@ -374,7 +373,7 @@ void sub_0804B388(u32 a1, u32 a2) {
e->collisionLayer = a2;
sub_0806F704(e, a1);
}
sub_080526F8(-1);
ModDungeonKeys(-1);
}
void sub_0804B3C4(TileEntity* tile) {
+10 -10
View File
@@ -2724,7 +2724,7 @@ extern EntityData gUnk_080E3850;
void sub_StateChange_FortressOfWindsTop_Main(void) {
SetGlobalFlag(LV3_CLEAR);
UpdateGlobalProgress();
sub_0805B4D0(3);
LoadStaticBackground(3);
if (!GetInventoryValue(ITEM_OCARINA) && CheckLocalFlag(0x45)) {
LoadRoomEntityList(&gUnk_080E3850);
}
@@ -3609,7 +3609,7 @@ u32 sub_unk3_DarkHyruleCastleBridge_Main(void) {
}
void sub_StateChange_DarkHyruleCastleBridge_Main(void) {
sub_0805B4D0(6);
LoadStaticBackground(6);
}
u32 sub_unk3_VaatisArms_First(void) {
@@ -3635,7 +3635,7 @@ extern EntityData gUnk_080EAD68;
extern EntityData gUnk_080EADB8;
void sub_StateChange_DarkHyruleCastleOutside_ZeldaStatuePlatform(void) {
sub_0805B4D0(4);
LoadStaticBackground(4);
if (!CheckLocalFlag(0x77)) {
LoadRoomEntityList(&gUnk_080EAD68);
} else if (!CheckLocalFlag(0x79)) {
@@ -4405,7 +4405,7 @@ void sub_StateChange_HyruleTown_0(void) {
} else {
LoadRoomEntityList(&gUnk_080EE9DC);
}
if ((gSave.global_progress > 4) && !CheckKinstoneFused(0xb) &&
if ((gSave.global_progress > 4) && !CheckKinstoneFused(KINSTONE_B) &&
(CheckGlobalFlag(RENTED_HOUSE_DIN) || CheckGlobalFlag(RENTED_HOUSE_NAYRU) ||
CheckGlobalFlag(RENTED_HOUSE_FARORE))) {
LoadRoomEntityList(&gUnk_080EEA5C);
@@ -5543,7 +5543,7 @@ u32 sub_unk3_WindTribeTowerRoof_Main(void) {
extern EntityData gUnk_080F66AC;
void sub_StateChange_WindTribeTowerRoof_Main(void) {
sub_0805B4D0(5);
LoadStaticBackground(5);
if (CheckGlobalFlag(LV5_CLEAR) && !CheckLocalFlagByBank(FLAG_BANK_1, 5)) {
LoadRoomEntityList(&gUnk_080F66AC);
}
@@ -5972,7 +5972,7 @@ extern EntityData gUnk_080F8430;
void sub_StateChange_HyruleField_WesternWoodsCenter(void) {
CloudOverlayManager_Main(NULL);
if (CheckKinstoneFused(KINSTONE_21) && !CheckLocalFlagByBank(FLAG_BANK_2, 0x42)) {
if (CheckKinstoneFused(KINSTONE_21) && !CheckLocalFlagByBank(FLAG_BANK_2, MHOUSE08_03)) {
LoadRoomEntityList(&gUnk_080F8430);
}
}
@@ -6261,7 +6261,7 @@ u32 sub_unk3_VeilFallsTop_Main(void) {
}
void sub_StateChange_VeilFallsTop_Main(void) {
sub_0805B4D0(2);
LoadStaticBackground(2);
sub_0806D0B0(0);
}
@@ -6555,12 +6555,12 @@ void sub_StateChange_MtCrenel_MountainTop(void) {
} else {
LoadRoomEntityList(&gUnk_080FACB8);
}
sub_0805B4D0(0);
LoadStaticBackground(0);
sub_08059994();
}
void sub_unk1_MtCrenel_MountainTop(void) {
sub_0805B4D0(0);
LoadStaticBackground(0);
}
u32 sub_unk3_MtCrenel_WallClimb(void) {
@@ -6578,7 +6578,7 @@ extern EntityData gUnk_080FAFE4;
extern EntityData gUnk_080FB004;
void sub_StateChange_MtCrenel_CaveOfFlamesEntrance(void) {
sub_0805B4D0(1);
LoadStaticBackground(1);
if (CheckGlobalFlag(LV2_CLEAR) && !CheckLocalFlag(LV1_CLEAR)) {
LoadRoomEntityList(&gUnk_080FAFE4);
}
+7 -1
View File
@@ -46,7 +46,13 @@ const char gUnk_0811E470[4] = "LINK";
#if defined(DEMO_USA) || defined(DEMO_JP)
const u8 demoUnknown0 = 0x0;
#ifdef DEMO_USA
const u8 demoUnknown1[] = { 0x0f, 0x0a, 0x0a, 0x0f, 0x0f, 0x0f, 0x08, 0x05, 0x05, 0x00, 0x00 };
const u8 demoUnknown1[] = {
// demo_timer for the three save files
0x0f, 0x0a, 0x0a, // gUnk_02000010.field_0x7 == 0
0x0f, 0x0f, 0x0f, // gUnk_02000010.field_0x7 == 1
0x08, 0x05, 0x05, // gUnk_02000010.field_0x7 == 2
0x00, 0x00
};
#else
const u8 demoUnknown1[] = { 0 };
#endif
+11 -11
View File
@@ -10,7 +10,7 @@
#include "item.h"
#include "ui.h"
void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script);
void InitScriptExecutionContext(ScriptExecutionContext* context, Script* script);
void sub_0807DE80(Entity*);
void DisablePauseMenu(void);
void ScriptCommandNop(Entity* entity, ScriptExecutionContext* context);
@@ -149,7 +149,7 @@ void ScriptCommand_SetInventoryValue(Entity* entity, ScriptExecutionContext* con
void ScriptCommand_InitItemGetSequence(Entity* entity, ScriptExecutionContext* context);
void ScriptCommand_CameraTargetEntity(Entity* entity, ScriptExecutionContext* context);
void ScriptCommand_CameraTargetPlayer(Entity* entity, ScriptExecutionContext* context);
void ScriptCommand_0807F0B4(Entity* entity, ScriptExecutionContext* context);
void ScriptCommand_SetScrollSpeed(Entity* entity, ScriptExecutionContext* context);
void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context);
typedef void (*ScriptCommand)(Entity*, ScriptExecutionContext*);
@@ -185,7 +185,7 @@ void DestroyScriptExecutionContext(ScriptExecutionContext* context) {
MemClear(context, sizeof(ScriptExecutionContext));
}
ScriptExecutionContext* StartCutscene(Entity* entity, u16* script) {
ScriptExecutionContext* StartCutscene(Entity* entity, Script* script) {
ScriptExecutionContext* context;
context = CreateScriptExecutionContext();
@@ -195,7 +195,7 @@ ScriptExecutionContext* StartCutscene(Entity* entity, u16* script) {
return context;
}
void InitScriptForEntity(Entity* entity, ScriptExecutionContext* context, u16* script) {
void InitScriptForEntity(Entity* entity, ScriptExecutionContext* context, Script* script) {
entity->flags |= ENT_SCRIPTED;
*(ScriptExecutionContext**)&entity->cutsceneBeh = context;
InitScriptExecutionContext(context, script);
@@ -209,7 +209,7 @@ void UnloadCutsceneData(Entity* entity) {
}
}
void StartPlayerScript(u16* script) {
void StartPlayerScript(Script* script) {
Entity* player;
MemClear(&gPlayerScriptExecutionContext, sizeof(gPlayerScriptExecutionContext));
@@ -222,7 +222,7 @@ void StartPlayerScript(u16* script) {
gPlayerState.field_0x38 = 0;
}
UNUSED ScriptExecutionContext* StartCutscene2(Entity* entity, u16* script) {
UNUSED ScriptExecutionContext* StartCutscene2(Entity* entity, Script* script) {
ScriptExecutionContext* context;
context = CreateScriptExecutionContext();
@@ -234,7 +234,7 @@ UNUSED ScriptExecutionContext* StartCutscene2(Entity* entity, u16* script) {
return context;
}
void InitScriptExecutionContext(ScriptExecutionContext* context, u16* script) {
void InitScriptExecutionContext(ScriptExecutionContext* context, Script* script) {
MemClear(context, sizeof(ScriptExecutionContext));
context->scriptInstructionPointer = script;
}
@@ -325,7 +325,7 @@ void sub_0807DD64(Entity* entity) {
entity->field_0x82.HWORD = 0;
}
void sub_0807DD80(Entity* entity, u16* script) {
void sub_0807DD80(Entity* entity, Script* script) {
InitScriptExecutionContext(*(ScriptExecutionContext**)&entity->cutsceneBeh, script);
sub_0807DD64(entity);
}
@@ -597,7 +597,7 @@ void ExecuteScript(Entity* entity, ScriptExecutionContext* context) {
ScriptCommand_InitItemGetSequence,
ScriptCommand_CameraTargetEntity,
ScriptCommand_CameraTargetPlayer,
ScriptCommand_0807F0B4,
ScriptCommand_SetScrollSpeed,
ScriptCommand_0807F0C8,
};
@@ -1516,8 +1516,8 @@ void ScriptCommand_CameraTargetPlayer(Entity* entity, ScriptExecutionContext* co
gRoomControls.camera_target = &gPlayerEntity;
}
void ScriptCommand_0807F0B4(Entity* entity, ScriptExecutionContext* context) {
gRoomControls.unk5 = context->scriptInstructionPointer[1] & 7;
void ScriptCommand_SetScrollSpeed(Entity* entity, ScriptExecutionContext* context) {
gRoomControls.scrollSpeed = context->scriptInstructionPointer[1] & 7;
}
void ScriptCommand_0807F0C8(Entity* entity, ScriptExecutionContext* context) {
+60 -60
View File
@@ -72,13 +72,13 @@ void UpdateScroll(void) {
};
gRoomControls.scroll_flags &= 0xfb;
gUnk_0811E768[gRoomControls.unk3](&gRoomControls);
gUnk_0811E768[gRoomControls.scrollAction](&gRoomControls);
}
void sub_0807FC64(RoomControls* controls) {
controls->unk3 = 1;
controls->scrollAction = 1;
controls->reload_flags = 0;
controls->unk5 = 4;
controls->scrollSpeed = 4;
sub_0807FC7C(controls);
UpdateIsDiggingCave();
}
@@ -98,8 +98,8 @@ void sub_0807FC7C(RoomControls* controls) {
uVar5 = controls->scroll_x & 7;
if (uVar3 >= 1) {
if (controls->origin_x < controls->scroll_x) {
if (controls->unk5 <= uVar3) {
uVar3 = controls->unk5;
if (controls->scrollSpeed <= uVar3) {
uVar3 = controls->scrollSpeed;
controls->scroll_flags |= 4;
}
controls->scroll_x = controls->scroll_x - uVar3;
@@ -113,8 +113,8 @@ void sub_0807FC7C(RoomControls* controls) {
} else {
uVar2 = controls->origin_x + controls->width - 0xf0;
if (controls->scroll_x < uVar2) {
if (-controls->unk5 >= uVar3) {
uVar3 = -controls->unk5;
if (-controls->scrollSpeed >= uVar3) {
uVar3 = -controls->scrollSpeed;
controls->scroll_flags |= 4;
}
controls->scroll_x -= uVar3;
@@ -135,8 +135,8 @@ void sub_0807FC7C(RoomControls* controls) {
uVar5 = controls->scroll_y & 7;
if (uVar3 >= 1) {
if (controls->origin_y < controls->scroll_y) {
if (controls->unk5 <= uVar3) {
uVar3 = controls->unk5;
if (controls->scrollSpeed <= uVar3) {
uVar3 = controls->scrollSpeed;
controls->scroll_flags |= 4;
}
controls->scroll_y = controls->scroll_y - uVar3;
@@ -150,8 +150,8 @@ void sub_0807FC7C(RoomControls* controls) {
} else {
uVar2 = controls->origin_y + controls->height - DISPLAY_HEIGHT;
if (controls->scroll_y < uVar2) {
if (-controls->unk5 >= uVar3) {
uVar3 = -controls->unk5;
if (-controls->scrollSpeed >= uVar3) {
uVar3 = -controls->scrollSpeed;
controls->scroll_flags |= 4;
}
controls->scroll_y -= uVar3;
@@ -174,19 +174,19 @@ void sub_0807FDB0(RoomControls* controls) {
sub_0807FDE4,
sub_0807FDF8,
};
gUnk_0811E780[controls->unk4](controls);
gUnk_0811E780[controls->scrollSubAction](controls);
}
void sub_0807FDC8(RoomControls* controls) {
gUpdateVisibleTiles = 1;
UpdateScrollVram();
controls->unk4 = 1;
controls->scrollSubAction = 1;
gUpdateVisibleTiles = 0;
}
void sub_0807FDE4(RoomControls* controls) {
controls->unk4 = 2;
controls->filler2[0] = 0;
controls->scrollSubAction = 2;
controls->unk_18 = 0;
gUpdateVisibleTiles = 2;
}
@@ -196,7 +196,7 @@ void sub_0807FDF8(RoomControls* controls) {
s32 iVar3;
gUpdateVisibleTiles = 2;
controls->filler2[0]++;
controls->unk_18++;
switch (controls->scroll_direction) {
case 0:
controls->scroll_y -= 4;
@@ -204,7 +204,7 @@ void sub_0807FDF8(RoomControls* controls) {
if (pEVar2 == &gPlayerEntity) {
pEVar2->y.WORD = gPlayerEntity.y.WORD - Q_16_16(0.375);
}
if (controls->filler2[0] == 0x28) {
if (controls->unk_18 == 0x28) {
sub_0807FEC8(controls);
}
break;
@@ -213,7 +213,7 @@ void sub_0807FDF8(RoomControls* controls) {
if (controls->camera_target == &gPlayerEntity) {
gPlayerEntity.x.WORD += Q_16_16(0.25);
}
if (controls->filler2[0] == 0x3c) {
if (controls->unk_18 == 0x3c) {
sub_0807FEC8(controls);
}
break;
@@ -223,7 +223,7 @@ void sub_0807FDF8(RoomControls* controls) {
if (pEVar2 == &gPlayerEntity) {
pEVar2->y.WORD = gPlayerEntity.y.WORD + Q_16_16(0.375);
}
if (controls->filler2[0] == 0x28) {
if (controls->unk_18 == 0x28) {
sub_0807FEC8(controls);
}
break;
@@ -232,7 +232,7 @@ void sub_0807FDF8(RoomControls* controls) {
if (controls->camera_target == &gPlayerEntity) {
gPlayerEntity.x.WORD -= Q_16_16(0.25);
}
if (controls->filler2[0] == 0x3c) {
if (controls->unk_18 == 0x3c) {
sub_0807FEC8(controls);
}
break;
@@ -242,11 +242,11 @@ void sub_0807FDF8(RoomControls* controls) {
sub_08080BC4();
}
void sub_0807FEC8(RoomControls* this) {
this->unk3 = 0;
void sub_0807FEC8(RoomControls* controls) {
controls->scrollAction = 0;
MemFill32(0xffffffff, gPlayerState.path_memory, sizeof(gPlayerState.path_memory));
gPlayerState.startPosX = this->camera_target->x.HALF.HI;
gPlayerState.startPosY = this->camera_target->y.HALF.HI;
gPlayerState.startPosX = controls->camera_target->x.HALF.HI;
gPlayerState.startPosY = controls->camera_target->y.HALF.HI;
}
void sub_0807FEF0(RoomControls* controls) {
@@ -254,20 +254,20 @@ void sub_0807FEF0(RoomControls* controls) {
sub_0807FF08,
sub_0807FF1C,
};
gUnk_0811E78C[controls->unk4](controls);
gUnk_0811E78C[controls->scrollSubAction](controls);
}
void sub_0807FF08(RoomControls* controls) {
controls->unk4 = 1;
controls->filler2[0] = 0;
controls->scrollSubAction = 1;
controls->unk_18 = 0;
gUpdateVisibleTiles = 3;
}
void sub_0807FF1C(RoomControls* controls) {
if ((gRoomTransition.frameCount & 1U) == 0) {
gUpdateVisibleTiles = 3;
if (++controls->filler2[0] > 0x13) {
controls->unk3 = 0;
if (++controls->unk_18 > 0x13) {
controls->scrollAction = 0;
ResetSystemPriority();
}
}
@@ -277,11 +277,11 @@ void sub_0807FF54(RoomControls* controls) {
static void (*const gUnk_0811E794[])(RoomControls*) = {
sub_0807FF6C, sub_0807FFE4, sub_08080040, sub_08080108, sub_08080198, sub_080801BC,
};
gUnk_0811E794[controls->unk4](controls);
gUnk_0811E794[controls->scrollSubAction](controls);
}
void sub_0807FF6C(RoomControls* controls) {
controls->unk4 = 1;
controls->scrollSubAction = 1;
gScreen.lcd.displayControl |= DISPCNT_WIN1_ON;
gScreen.controls.windowInsideControl = (u8)gScreen.controls.windowInsideControl | 0x1700;
gScreen.controls.windowOutsideControl = (gScreen.controls.windowOutsideControl & 0xff00) | 7;
@@ -298,8 +298,8 @@ void sub_0807FF6C(RoomControls* controls) {
}
void sub_0807FFE4(RoomControls* controls) {
controls->unk4 = 2;
controls->filler2[0] = sub_080803D0() + 6;
controls->scrollSubAction = 2;
controls->unk_18 = sub_080803D0() + 6;
gUnk_0200B640 = sub_08080278();
sub_080197D4(*gUnk_08109194[gDiggingCaveEntranceTransition.entrance->type]);
sub_0807C8B0(gMapTop.mapData, controls->width >> 4, controls->height >> 4);
@@ -314,32 +314,32 @@ void sub_08080040(RoomControls* controls) {
s32 iVar7;
s32 temp;
controls->filler2[0] -= 6;
controls->filler2[1] = (controls->filler2[0] << 1) / 3;
if (0x2a < controls->filler2[0]) {
controls->unk_18 -= 6;
controls->unk_1a = (controls->unk_18 << 1) / 3;
if (0x2a < controls->unk_18) {
iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x;
uVar6 = (iVar2 - controls->filler2[0]) + 8;
uVar6 = (iVar2 - controls->unk_18) + 8;
if (uVar6 < 0) {
uVar6 = 0;
}
iVar7 = iVar2 + controls->filler2[0] - 8;
iVar7 = iVar2 + controls->unk_18 - 8;
if (DISPLAY_WIDTH < iVar7) {
iVar7 = DISPLAY_WIDTH;
}
temp = controls->camera_target->y.HALF.HI - controls->scroll_y;
uVar5 = (temp - controls->filler2[1]) + 8;
uVar5 = (temp - controls->unk_1a) + 8;
if (uVar5 < 0) {
uVar5 = 0;
}
iVar3 = temp + controls->filler2[1] - 8;
iVar3 = temp + controls->unk_1a - 8;
if (DISPLAY_HEIGHT < iVar3) {
iVar3 = DISPLAY_HEIGHT;
}
gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff);
gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff);
}
if (controls->filler2[0] == 0) {
controls->unk4 = 3;
if (controls->unk_18 == 0) {
controls->scrollSubAction = 3;
DeleteSleepingEntities();
sub_0807C810();
sub_08080C80(*(gUnk_08109194[gDiggingCaveEntranceTransition.entrance->type] + 1));
@@ -349,7 +349,7 @@ void sub_08080040(RoomControls* controls) {
}
void sub_08080108(RoomControls* controls) {
controls->unk4 = 4;
controls->scrollSubAction = 4;
MemCopy(gMapBottom.mapData, gMapBottom.mapDataClone, sizeof(gMapBottom.mapData));
MemCopy(gMapTop.mapData, gMapTop.mapDataClone, sizeof(gMapTop.mapData));
sub_08080368();
@@ -365,8 +365,8 @@ void sub_08080108(RoomControls* controls) {
}
void sub_08080198(RoomControls* controls) {
controls->unk4 = 5;
controls->filler2[2] = 0xff;
controls->scrollSubAction = 5;
controls->unk_1c = 0xff;
LoadRoom();
CallRoomProp5And7();
gUpdateVisibleTiles = 0;
@@ -381,32 +381,32 @@ void sub_080801BC(RoomControls* controls) {
s32 iVar7;
s32 temp;
controls->filler2[0] += 6;
controls->filler2[1] = (controls->filler2[0] << 1) / 3;
if (0x1e < controls->filler2[0]) {
controls->unk_18 += 6;
controls->unk_1a = (controls->unk_18 << 1) / 3;
if (0x1e < controls->unk_18) {
iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x;
uVar6 = (iVar2 - controls->filler2[0]);
uVar6 = (iVar2 - controls->unk_18);
if (uVar6 < 0) {
uVar6 = 0;
}
iVar7 = iVar2 + controls->filler2[0];
iVar7 = iVar2 + controls->unk_18;
if (DISPLAY_WIDTH < iVar7) {
iVar7 = DISPLAY_WIDTH;
}
temp = controls->camera_target->y.HALF.HI - controls->scroll_y;
uVar5 = (temp - controls->filler2[1]);
uVar5 = (temp - controls->unk_1a);
if (uVar5 < 0) {
uVar5 = 0;
}
iVar3 = temp + controls->filler2[1];
iVar3 = temp + controls->unk_1a;
if (DISPLAY_HEIGHT < iVar3) {
iVar3 = DISPLAY_HEIGHT;
}
gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff);
gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff);
}
if (controls->filler2[2] == 0) {
controls->unk3 = 0;
if (controls->unk_1c == 0) {
controls->scrollAction = 0;
controls->reload_flags = 0;
ResetSystemPriority();
gScreen.lcd.displayControl &= ~DISPCNT_WIN1_ON;
@@ -414,7 +414,7 @@ void sub_080801BC(RoomControls* controls) {
gScreen.controls.windowOutsideControl &= 0xff00;
} else {
gUpdateVisibleTiles = 4;
controls->filler2[2] = 0;
controls->unk_1c = 0;
}
}
@@ -461,7 +461,7 @@ void UpdateIsDiggingCave(void) {
void ClearTilemaps(void) {
MemClear(&gRoomControls, sizeof(gRoomControls));
MemClear(&gDiggingCaveEntranceTransition, sizeof(gDiggingCaveEntranceTransition));
gRoomControls.filler3 = 0xffff;
gRoomControls.unk_22 = 0xffff;
gDiggingCaveEntranceTransition.previousArea = 0xff;
gUnk_02034480.unk_00 = 0;
MemClear(&gMapDataBottomSpecial, 0x8000);
@@ -630,8 +630,8 @@ void sub_0808091C(const ScreenTransitionData* screenTransition, u32 transitionTy
}
void sub_08080930(u32 unused) {
gRoomControls.unk3 = 5;
gRoomControls.unk4 = 0;
gRoomControls.scrollAction = 5;
gRoomControls.scrollSubAction = 0;
gRoomControls.reload_flags = 2;
gRoomControls.scroll_direction = 0;
SetInitializationPriority();
@@ -821,8 +821,8 @@ NONMATCH("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* t
if (this->type != this->animIndex) {
InitAnimationForceUpdate(this, this->type);
if (this->type == 0x5c) {
const struct_080C9CBC* ptr = &gUnk_080C9CBC[this->type2];
this->palette.raw = ((ptr->unk0 & 0xf) << 4) | ptr->unk0;
const KinstoneWorldEvent* ptr = &gKinstoneWorldEvents[this->type2];
this->palette.raw = ((ptr->objPalette & 0xf) << 4) | ptr->objPalette;
}
} else {
+14 -9
View File
@@ -1,13 +1,18 @@
#include "global.h"
#include "room.h"
#include "main.h"
#include "save.h"
#include "flags.h"
#include "fileselect.h"
#include "screen.h"
/**
* @file staffroll.c
* @ingroup Tasks
*
* @brief Staffroll task
*/
#include "common.h"
#include "menu.h"
#include "fileselect.h"
#include "flags.h"
#include "game.h"
#include "main.h"
#include "menu.h"
#include "room.h"
#include "save.h"
#include "screen.h"
#include "subtask.h"
typedef struct {
@@ -125,7 +130,7 @@ void StaffrollTask_State1MenuType2(void) {
switch (gStaffrollMenu.base.overlayType) {
case 0:
MemClear(&gBG1Buffer, sizeof(gBG1Buffer));
sub_0805F46C(gStaffrollMenu.unk_10, (Font*)gUnk_081272E0[gStaffrollMenu.unk_19]);
ShowTextBox(gStaffrollMenu.unk_10, gUnk_081272E0[gStaffrollMenu.unk_19]);
gScreen.bg1.updated = 1;
gStaffrollMenu.base.overlayType++;
gStaffrollMenu.unk_18 = 0;
-36
View File
@@ -1,36 +0,0 @@
#include "global.h"
#include "menu.h"
#include "room.h"
#include "functions.h"
#include "screen.h"
extern void (*const gUnk_080FF420[])(void);
extern void sub_0804B0B0(u32, u32);
extern void sub_08055B70(u32, u32, u32, u32);
struct {
/*0x00*/ u8 unk0;
/*0x10*/ u8 filler1[0x1B];
/*0x1c*/ u8 unk1C;
/*0x1d*/ u8 unk1D;
/*0x1e*/ u8 unk1E;
/*0x1f*/ u8 unk1F;
} gUpdateVisibleTiles;
extern EntityData gUnk_080FF400;
void sub_08055E08(void) {
gUnk_080FF420[gMenu.overlayType]();
}
void sub_08055E24(void) {
gMenu.overlayType++;
gUpdateVisibleTiles.unk0 = 1;
sub_0804B0B0(gMenu.field_0xc[2], gMenu.field_0xc[3]);
LoadRoomEntityList(&gUnk_080FF400);
sub_08055B70(gMenu.field_0x4, 0, 0, 0);
SetFade(FADE_INSTANT, 0x10);
}
void nullsub_493(void) {
}
+245 -805
View File
File diff suppressed because it is too large Load Diff
+157
View File
@@ -0,0 +1,157 @@
/**
* @file subtaskAuxCutscene.c
*
* @brief Aux Cutscene Subtask
*/
#include "area.h"
#include "asm.h"
#include "common.h"
#include "fileselect.h"
#include "flags.h"
#include "functions.h"
#include "game.h"
#include "main.h"
#include "menu.h"
#include "message.h"
#include "room.h"
#include "screen.h"
#include "sound.h"
#include "subtask.h"
typedef void(AuxCutsceneState)(void);
typedef void(CutsceneMainState)(void);
static AuxCutsceneState AuxCutscene_Init;
static AuxCutsceneState AuxCutscene_Main;
static AuxCutsceneState AuxCutscene_Exit;
CutsceneMainState CutsceneMain_Init;
CutsceneMainState CutsceneMain_Update;
CutsceneMainState CutsceneMain_Exit;
typedef struct {
u8 area;
RoomID room : 8;
u8 _2;
u8 _3;
u16 x;
u16 y;
} CutsceneData;
static const CutsceneData sCutsceneData[];
void Subtask_AuxCutscene(void) {
static AuxCutsceneState* const sStates[] = {
AuxCutscene_Init,
AuxCutscene_Main,
AuxCutscene_Exit,
};
sStates[gMenu.menuType]();
}
static void AuxCutscene_Init(void) {
const CutsceneData* p = &sCutsceneData[gUI.field_0x3];
gRoomControls.area = p->area;
gRoomControls.room = p->room;
LoadGfxGroups();
gArea.localFlagOffset = GetFlagBankOffset(gRoomControls.area);
SetCurrentRoomPropertyList(p->area, p->room);
LoadAuxiliaryRoom(p->area, p->room);
gRoomControls.scroll_x = gRoomControls.origin_x + p->x;
gRoomControls.scroll_y = gRoomControls.origin_y + p->y;
gMenu.field_0x0 = p->_2;
gMenu.field_0x3 = p->_3 & 0xf;
gMenu.field_0xc = (void*)p;
gMenu.menuType++;
gMenu.overlayType = 0;
gMenu.transitionTimer = 300;
AuxCutscene_Main(); // init
}
static void AuxCutscene_Main(void) {
static CutsceneMainState* const sStates[] = {
CutsceneMain_Init,
CutsceneMain_Update,
CutsceneMain_Exit,
};
sStates[gMenu.field_0x0]();
FlushSprites();
UpdateEntities();
DrawEntities();
CopyOAM();
UpdateScroll();
UpdateBgAnimations();
UpdateManagers();
UpdateScrollVram();
}
static const CutsceneData sCutsceneData[] = {
{ AREA_MINISH_WOODS, 0, 0, 0, 336, 528 },
{ AREA_HYRULE_FIELD, 1, 1, 0, 472, 312 },
{ AREA_HYRULE_CASTLE, 2, 1, 1, 16, 16 },
{ AREA_SANCTUARY, 2, 1, 2, 0, 0 },
{ AREA_EZLO_CUTSCENE, 0, 1, 3, 0, 0 },
{ AREA_HOUSE_INTERIORS_2, 16, 1, 4, 0, 0 },
{ AREA_DARK_HYRULE_CASTLE_OUTSIDE, 0, 1, 5, 0, 40 },
{ AREA_FORTRESS_OF_WINDS, 28, 2, 0, 0, 0 },
{ AREA_FORTRESS_OF_WINDS, 29, 2, 1, 0, 0 },
{ AREA_DARK_HYRULE_CASTLE, 14, 2, 2, 16, 16 },
};
static void AuxCutscene_Exit(void) {
u32 flag = sCutsceneData[gUI.field_0x3]._3;
if (flag & 0xF0) {
MenuFadeIn(2, flag >> 4);
} else {
gUI.nextToLoad = 3; // Subtask_FadeOut
SetFadeInverted(0x10);
MessageInitialize();
}
}
// end of auxCutscene?
void sub_08051F78(void) {
u32 idx = gUI.field_0x3;
const CutsceneData* p = &sCutsceneData[idx];
sub_08051F9C(p->area, p->room, p->x, p->y);
}
void sub_08051F9C(u32 a1, u32 a2, u32 a3, u32 a4) {
u32 tmp = gScreen.lcd.displayControl & (DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
sub_08052FF4(a1, a2);
gRoomControls.scroll_x = gRoomControls.origin_x + a3;
gRoomControls.scroll_y = gRoomControls.origin_y + a4;
InitializeCamera();
gUpdateVisibleTiles = 1;
gUsedPalettes = 0;
gScreen.lcd.displayControl |= tmp;
}
void sub_08051FF0(void) {
sub_0804B0B0(gMenu.field_0xc[0], gMenu.field_0xc[1]);
}
void sub_08052004(void) {
gMenu.menuType = 2;
}
void sub_08052010(void) {
InitSoundPlayingInfo();
MessageInitialize();
DispReset(1);
MemClear(gBG1Buffer, sizeof(gBG1Buffer));
MemClear(gBG2Buffer, sizeof(gBG2Buffer));
sub_080A4D34();
LoadPaletteGroup(0xA);
SetColor(0, 0);
LoadGfxGroup(4);
MemClear((void*)0x06000000, 0x20);
MemClear(&gGenericMenu, sizeof(gGenericMenu));
gScreen.lcd.displayControl |= DISPCNT_OBJ_ON;
gScreen.bg1.control = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(28) | BGCNT_CHARBASE(0);
gScreen.bg2.control = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(29) | BGCNT_CHARBASE(1);
gScreen.bg1.updated = 1;
gScreen.bg2.updated = 1;
}
+191
View File
@@ -0,0 +1,191 @@
/**
* @file subtaskFastTravel.c
* @ingroup Subtasks
*
* @brief Fast Travel Subtask
*/
#include "subtask.h"
#include "common.h"
#include "menu.h"
#include "functions.h"
#include "message.h"
#include "sound.h"
#include "save.h"
extern void (*const Subtask_FastTravel_Functions[])(void);
void sub_080A6E70(void);
u32 sub_080A6D74(u32);
void sub_080A6EE0(u32 param_1);
extern const ScreenTransitionData gUnk_08128024[];
void Subtask_FastTravel(void) {
FlushSprites();
Subtask_FastTravel_Functions[gMenu.menuType]();
if (gMenu.field_0x0 != 0) {
sub_080A6E70();
}
sub_080A6498();
CopyOAM();
}
void Subtask_FastTravel_0(void) {
sub_080A4D34();
sub_080A4DB8(0xd);
sub_080A6290();
gMenu.field_0x3 = sub_080A6D74(0);
SetMenuType(1);
SetFade(FADE_INSTANT, 8);
}
void Subtask_FastTravel_1(void) {
u32 uVar1;
u32 uVar2;
if (gFadeControl.active) {
return;
}
gMenu.field_0x0 = 1;
uVar2 = 0;
switch (gInput.newKeys) {
case DPAD_LEFT:
case DPAD_UP:
uVar2 = -1;
break;
case DPAD_RIGHT:
case DPAD_DOWN:
uVar2 = 1;
break;
case A_BUTTON:
case START_BUTTON:
gMenu.field_0x0 = 2;
SetMenuType(2);
MessageFromTarget(TEXT_INDEX(TEXT_WINDCRESTS, 0x04));
break;
case B_BUTTON:
gMenu.field_0x0 = 3;
SetMenuType(3);
break;
}
if (uVar2) {
uVar1 = sub_080A6D74(uVar2);
if (uVar1 != gMenu.field_0x3) {
gMenu.field_0x3 = uVar1;
SoundReq(SFX_TEXTBOX_CHOICE);
}
}
}
u32 sub_080A6D74(u32 param_1) {
u32 uVar1;
u32 uVar2;
u32 uVar3;
uVar3 = gSave.windcrests >> 0x18;
uVar2 = gMenu.field_0x3;
if (param_1 == 0) {
uVar2 = 0;
if ((uVar3 & 1) == 0) {
while (++uVar2 < 8 && ((1 << uVar2) & uVar3) == 0) {}
}
} else if (uVar3 != 0) {
do {
uVar2 = (uVar2 + param_1 + 8) & 7;
} while ((1 << uVar2 & uVar3) == 0);
}
return uVar2 & 7;
}
void Subtask_FastTravel_2(void) {
u32 tmp;
switch (sub_08056338()) {
#ifdef EU
case 0:
gMenu.field_0x0 = 2;
break;
case 1:
gMenu.field_0x0 = 3;
tmp = 1;
break;
default:
return;
}
if (tmp) {
SetMenuType(3);
}
#else
case 0:
gMenu.field_0x0 = 2;
tmp = 3;
break;
case 1:
tmp = 1;
break;
default:
return;
}
SetMenuType(tmp);
#endif
}
void Subtask_FastTravel_3(void) {
if (gMenu.field_0x0 == 2) {
SetMenuType(4);
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
} else {
ResetPlayerAnimationAndAction();
sub_080042D0(&gPlayerEntity, (u32)gPlayerEntity.animIndex, gPlayerEntity.spriteIndex);
Subtask_Exit();
gPauseMenuOptions.disabled = 0;
SoundReq(SFX_MENU_CANCEL);
}
}
void Subtask_FastTravel_4(void) {
if (gFadeControl.active == 0) {
sub_080A71F4(&gUnk_08128024[gMenu.field_0x3]);
}
}
void sub_080A6E70(void) {
u32 frameIndex;
u32 i;
gOamCmd._4 = 0;
gOamCmd._6 = 0;
gOamCmd._8 = 0x400;
gGenericMenu.unk2c++;
sub_080A6EE0(gMenu.field_0x3);
if ((gGenericMenu.unk2c & 0x10) != 0) {
frameIndex = 0x5d;
} else {
frameIndex = 0x5e;
}
DrawDirect(DRAW_DIRECT_SPRITE_INDEX, frameIndex);
for (i = 0; i < 8; i++) {
if ((gSave.windcrests & (1 << (i + 0x18))) != 0) {
sub_080A6EE0(i);
DrawDirect(DRAW_DIRECT_SPRITE_INDEX, 0x5c);
}
}
}
void sub_080A6EE0(u32 param_1) {
u32 x;
u32 y;
RoomHeader* roomHeader;
const ScreenTransitionData* ptr = &gUnk_08128024[param_1];
x = (u16)ptr->playerXPos;
y = (u16)ptr->playerYPos;
roomHeader = &gAreaRoomHeaders[ptr->area][ptr->room];
x += roomHeader->map_x;
y += roomHeader->map_y;
gOamCmd.x = (s32)(x * DISPLAY_HEIGHT) / 0xf90 + 0x28;
gOamCmd.y = (s32)(y * DISPLAY_HEIGHT) / 0xf90 + 0xc;
}

Some files were not shown because too many files have changed in this diff Show More