summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortheo3 <arisstephenson2@gmail.com>2022-03-27 00:19:10 -0700
committertheo3 <arisstephenson2@gmail.com>2022-03-27 00:19:10 -0700
commitca139bf5584ceaada7fbd19291a91559851918ce (patch)
tree16581618ed2c11480402867f0b4d31fb0c035d5f /src
parent5208bfd1aa3d0103fb8e57ba08a99511e1b524b7 (diff)
parent74f88fe5eeaf14ed3f6e8d6344aca88a36d7a697 (diff)
merge
Diffstat (limited to 'src')
-rw-r--r--src/code_08049CD4.c69
-rw-r--r--src/code_08049DF4.c324
-rw-r--r--src/collision.c2
-rw-r--r--src/coord.c34
-rw-r--r--src/data/transitions.c3958
-rw-r--r--src/demo.c2
-rw-r--r--src/enemy/acroBandits.c162
-rw-r--r--src/enemy/armos.c4
-rw-r--r--src/enemy/beetle.c2
-rw-r--r--src/enemy/bobomb.c7
-rw-r--r--src/enemy/bombPeahat.c25
-rw-r--r--src/enemy/bombarossa.c2
-rw-r--r--src/enemy/bowMoblin.c4
-rw-r--r--src/enemy/businessScrub.c2
-rw-r--r--src/enemy/businessScrubPrologue.c12
-rw-r--r--src/enemy/chuchu.c4
-rw-r--r--src/enemy/cloudPiranha.c3
-rw-r--r--src/enemy/cuccoAggr.c4
-rw-r--r--src/enemy/darkNut.c10
-rw-r--r--src/enemy/enemy50.c2
-rw-r--r--src/enemy/fallingBoulder.c2
-rw-r--r--src/enemy/fireballGuy.c2
-rw-r--r--src/enemy/flyingPot.c265
-rw-r--r--src/enemy/flyingSkull.c9
-rw-r--r--src/enemy/ghini.c2
-rw-r--r--src/enemy/gibdo.c3
-rw-r--r--src/enemy/gleerok.c10
-rw-r--r--src/enemy/gyorgChild.c2
-rw-r--r--src/enemy/helmasaur.c4
-rw-r--r--src/enemy/lakituCloud.c2
-rw-r--r--src/enemy/mazaalMacro.c2
-rw-r--r--src/enemy/miniSlime.c2
-rw-r--r--src/enemy/moldorm.c5
-rw-r--r--src/enemy/moldworm.c12
-rw-r--r--src/enemy/mulldozer.c9
-rw-r--r--src/enemy/octorok.c2
-rw-r--r--src/enemy/octorokBoss.c28
-rw-r--r--src/enemy/octorokGolden.c3
-rw-r--r--src/enemy/peahat.c5
-rw-r--r--src/enemy/pesto.c13
-rw-r--r--src/enemy/puffstool.c11
-rw-r--r--src/enemy/rockChuchu.c6
-rw-r--r--src/enemy/rope.c3
-rw-r--r--src/enemy/ropeGolden.c3
-rw-r--r--src/enemy/scissorsBeetle.c5
-rw-r--r--src/enemy/slime.c4
-rw-r--r--src/enemy/sluggula.c10
-rw-r--r--src/enemy/spark.c32
-rw-r--r--src/enemy/spearMoblin.c2
-rw-r--r--src/enemy/spinyChuchu.c5
-rw-r--r--src/enemy/stalfos.c5
-rw-r--r--src/enemy/takkuri.c6
-rw-r--r--src/enemy/tektite.c3
-rw-r--r--src/enemy/tektiteGolden.c3
-rw-r--r--src/enemy/vaatiWrath.c2
-rw-r--r--src/enemy/waterDrop.c2
-rw-r--r--src/enemy/wisp.c5
-rw-r--r--src/enemy/wizzrobeWind.c3
-rw-r--r--src/entity.c4
-rw-r--r--src/fileselect.c8
-rw-r--r--src/game.c26
-rw-r--r--src/manager/manager4.c12
-rw-r--r--src/manager/managerB.c37
-rw-r--r--src/menu/kinstone_menu.c29
-rw-r--r--src/message.c24
-rw-r--r--src/movement.c182
-rw-r--r--src/npc/castorWildsStatue.c4
-rw-r--r--src/npc/dog.c9
-rw-r--r--src/npc/goronMerchant.c2
-rw-r--r--src/npc/kid.c87
-rw-r--r--src/npc/phonograph.c2
-rw-r--r--src/npc/picolyteBottle.c4
-rw-r--r--src/npc/stockwell.c2
-rw-r--r--src/npc/tingleSiblings.c4
-rw-r--r--src/npcUtils.c2
-rw-r--r--src/object.c2
-rw-r--r--src/object/bakerOven.c2
-rw-r--r--src/object/bigBarrel.c6
-rw-r--r--src/object/bird.c305
-rw-r--r--src/object/book.c46
-rw-r--r--src/object/button.c2
-rw-r--r--src/object/cuccoMinigame.c358
-rw-r--r--src/object/figurineDevice.c8
-rw-r--r--src/object/fileScreenObjects.c4
-rw-r--r--src/object/fireballChain.c41
-rw-r--r--src/object/floatingPlatform.c7
-rw-r--r--src/object/gyorgBossObject.c1
-rw-r--r--src/object/houseDoorExterior.c4
-rw-r--r--src/object/lilypadSmall.c20
-rw-r--r--src/object/mazaalBossObject.c207
-rw-r--r--src/object/minecart.c309
-rw-r--r--src/object/object49.c8
-rw-r--r--src/object/object96.c181
-rw-r--r--src/object/object98.c68
-rw-r--r--src/object/object99.c39
-rw-r--r--src/object/objectA6.c51
-rw-r--r--src/object/objectA9.c37
-rw-r--r--src/object/objectAB.c59
-rw-r--r--src/object/objectAD.c54
-rw-r--r--src/object/objectB.c2
-rw-r--r--src/object/objectB4.c135
-rw-r--r--src/object/objectBlockingStairs.c350
-rw-r--r--src/object/picoBloom.c47
-rw-r--r--src/object/playerClone.c11
-rw-r--r--src/object/pot.c2
-rw-r--r--src/object/smallIceBlock.c15
-rw-r--r--src/object/specialFx.c10
-rw-r--r--src/objectUtils.c2
-rw-r--r--src/player.c11
-rw-r--r--src/projectile/arrowProjectile.c3
-rw-r--r--src/projectile/boneProjectile.c7
-rw-r--r--src/projectile/cannonballProjectile.c3
-rw-r--r--src/projectile/dekuSeedProjectile.c2
-rw-r--r--src/projectile/lakituCloudProjectile.c2
-rw-r--r--src/projectile/lakituLightning.c3
-rw-r--r--src/projectile/moblinSpear.c42
-rw-r--r--src/projectile/octorokBossProjectile.c7
-rw-r--r--src/projectile/spiderWeb.c93
-rw-r--r--src/projectile/stalfosProjectile.c2
-rw-r--r--src/projectile/torchTrapProjectile.c3
-rw-r--r--src/projectile/v1DarkMagicProjectile.c2
-rw-r--r--src/projectile/v2Projectile.c2
-rw-r--r--src/projectile/v3ElectricProjectile.c3
-rw-r--r--src/projectile/v3HandProjectile.c3
-rw-r--r--src/projectile/v3TennisBallProjectile.c13
-rw-r--r--src/projectile/winder.c167
-rw-r--r--src/room.c2
-rw-r--r--src/roomInit.c516
-rw-r--r--src/script.c6
-rw-r--r--src/scroll.c282
-rw-r--r--src/staffroll.c326
-rw-r--r--src/subtask2.c2
-rw-r--r--src/text.c603
-rw-r--r--src/title.c2
-rw-r--r--src/ui.c24
135 files changed, 8929 insertions, 1157 deletions
diff --git a/src/code_08049CD4.c b/src/code_08049CD4.c
index a773306d..c98323d1 100644
--- a/src/code_08049CD4.c
+++ b/src/code_08049CD4.c
@@ -1,25 +1,76 @@
+#define NENT_DEPRECATED
#include "global.h"
-
-extern u32* gUnk_020354B0;
-extern u32 gRoomMemory;
+#include "room.h"
extern void MemFill32(u32, void*, u32);
+void sub_08049DCC(RoomMemory*);
+RoomMemory* sub_08049D88(void);
+
void ClearRoomMemory(void) {
- MemFill32(0xFFFFFFFF, &gRoomMemory, 0x40);
- gUnk_020354B0 = &gRoomMemory;
+ MemFill32(0xFFFFFFFF, gRoomMemory, 0x40);
+ gUnk_020354B0 = gRoomMemory;
}
-void sub_08049CF4(u8* arg0) {
- u8 field_0x6c = *(arg0 + 0x6c);
+void sub_08049CF4(GenericEntity* ent) {
+ u8 field_0x6c = ent->field_0x6c.HALF.LO;
if (field_0x6c & 0x80) {
- *(gUnk_020354B0 + 1) |= 1 << (field_0x6c & 0x1f);
+ gUnk_020354B0->unk_04 |= 1 << (field_0x6c & 0x1f);
}
}
u32 sub_08049D1C(u32 arg0) {
- u32 bitmask = *(gUnk_020354B0 + 1) >> arg0;
+ u32 bitmask = gUnk_020354B0->unk_04 >> arg0;
u32 output = 1;
output &= ~bitmask;
return output;
}
+
+void UpdateRoomTracker(void) {
+ gUnk_020354B0 = gRoomMemory;
+
+ do {
+ if (gUnk_020354B0->area == gRoomControls.area && gUnk_020354B0->room == gRoomControls.room) {
+ sub_08049DCC(gUnk_020354B0);
+ return;
+ }
+ gUnk_020354B0++;
+
+ } while (gUnk_020354B0 < gRoomMemory + 8);
+ gUnk_020354B0 = sub_08049D88();
+}
+
+RoomMemory* sub_08049D88(void) {
+ RoomMemory* rm = gRoomMemory;
+ RoomMemory* r1 = rm + 1;
+
+ do {
+ if (r1->unk_02 > rm->unk_02) {
+ rm = r1;
+ }
+ r1++;
+ } while (r1 < gRoomMemory + 8);
+
+ rm->area = gRoomControls.area;
+ rm->room = gRoomControls.room;
+
+ rm->unk_02 = 0xFFFF;
+ rm->unk_04 = 0;
+
+ sub_08049DCC(rm);
+
+ return rm;
+}
+
+void sub_08049DCC(RoomMemory* rm) {
+ RoomMemory* r1 = gRoomMemory;
+
+ do {
+ if (r1->unk_02 < rm->unk_02) {
+ r1->unk_02++;
+ }
+ r1++;
+ } while (r1 < gRoomMemory + 8);
+
+ rm->unk_02 = 0;
+}
diff --git a/src/code_08049DF4.c b/src/code_08049DF4.c
new file mode 100644
index 00000000..06b77524
--- /dev/null
+++ b/src/code_08049DF4.c
@@ -0,0 +1,324 @@
+#define NENT_DEPRECATED
+#include "asm.h"
+#include "global.h"
+#include "entity.h"
+#include "functions.h"
+#include "map.h"
+#include "player.h"
+#include "room.h"
+
+extern Entity* gUnk_020000B0;
+extern Entity* (*const gUnk_080D3BE8[])(void);
+
+extern void ReplaceMonitoredEntity(Entity*, Entity*);
+
+Entity* sub_08049DF4(u32 arg0) {
+ if (gUnk_020000B0 != NULL) {
+ return gUnk_020000B0;
+ }
+ return gUnk_080D3BE8[arg0]();
+}
+
+Entity* sub_08049E18(void) {
+ if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189b75)) {
+ gUnk_020000B0 = &gPlayerEntity;
+ return &gPlayerEntity;
+ }
+ return NULL;
+}
+
+Entity* sub_08049E4C(void) {
+ if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x22189bf5)) {
+ gUnk_020000B0 = &gPlayerEntity;
+ return &gPlayerEntity;
+ }
+ return NULL;
+}
+
+Entity* sub_08049E80(void) {
+ if ((gPlayerState.field_0x3c[0] != 0) || !(gPlayerState.flags & 0x80)) {
+ return NULL;
+ }
+ gUnk_020000B0 = &gPlayerEntity;
+ return &gPlayerEntity;
+}
+
+Entity* sub_08049EB0(void) {
+ if ((gPlayerState.field_0x3c[0] == 0) && !(gPlayerState.flags & 0x80190)) {
+ gUnk_020000B0 = &gPlayerEntity;
+ return &gPlayerEntity;
+ }
+ return NULL;
+}
+
+u32 sub_08049EE4(Entity* ent) {
+ GenericEntity* genEnt = (GenericEntity*)ent;
+ u16 tempLO = genEnt->field_0x70.HALF.LO + 4 * genEnt->field_0x6e.HALF.LO;
+ u16 tempHI = genEnt->field_0x70.HALF.HI + 4 * genEnt->field_0x6e.HALF.HI;
+
+ return CalculateDirectionTo(genEnt->base.x.HALF.HI, genEnt->base.y.HALF.HI, tempLO, tempHI);
+}
+
+bool32 sub_08049F1C(Entity* entA, Entity* entB, s32 maxDist) {
+ if ((entA->collisionLayer & entB->collisionLayer) != 0) {
+ s32 xDiff = entB->x.HALF.HI - entA->x.HALF.HI;
+ s32 yDiff = entB->y.HALF.HI - entA->y.HALF.HI;
+ s32 maxDistSq = maxDist * maxDist;
+ s32 distSq = xDiff * xDiff + yDiff * yDiff;
+
+ if (maxDistSq >= distSq) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool32 PlayerInRange(Entity* ent, u32 arg1, s32 maxDist) {
+ Entity* tempEnt = sub_08049DF4(arg1);
+ if (tempEnt == NULL) {
+ return FALSE;
+ } else {
+ return sub_08049F1C(ent, tempEnt, maxDist);
+ }
+}
+
+u32 sub_08049F84(Entity* ent, s32 arg2) {
+ Entity* target = sub_08049DF4(arg2);
+
+ if (target == NULL) {
+ return 0xFF;
+ } else {
+ return GetFacingDirection(ent, target);
+ }
+}
+
+bool32 sub_08049FA0(Entity* ent) {
+ GenericEntity* genEnt = (GenericEntity*)ent;
+ u32 temp = 8 * genEnt->field_0x6e.HALF.LO;
+
+ if (temp >= genEnt->base.x.HALF.HI - genEnt->field_0x70.HALF_U.LO) {
+ temp = 8 * genEnt->field_0x6e.HALF.HI;
+ if (temp >= genEnt->base.y.HALF.HI - genEnt->field_0x70.HALF_U.HI) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+bool32 sub_08049FDC(Entity* ent, u32 arg1) {
+ u32 temp;
+ GenericEntity* genEnt = (GenericEntity*)ent;
+ GenericEntity* tempEnt = (GenericEntity*)sub_08049DF4(arg1);
+
+ if (tempEnt != NULL) {
+ temp = 8 * genEnt->field_0x6e.HALF.LO;
+ if (temp >= tempEnt->base.x.HALF.HI - genEnt->field_0x70.HALF_U.LO) {
+ temp = 8 * genEnt->field_0x6e.HALF.HI;
+ if (temp >= tempEnt->base.y.HALF.HI - genEnt->field_0x70.HALF_U.HI) {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+u32 sub_0804A024(Entity* ent, u32 arg1, u32 arg2) {
+ Entity* tempEnt = sub_08049DF4(arg1);
+ if (tempEnt == NULL) {
+ return 0xFF;
+ } else {
+ return sub_0804A044(ent, tempEnt, arg2);
+ }
+}
+
+u32 sub_0804A168(Entity*, Entity*, LayerStruct*);
+u32 sub_0804A318(Entity*, Entity*, LayerStruct*);
+
+u32 sub_0804A044(Entity* entA, Entity* entB, u32 arg2) {
+ LayerStruct* layer;
+ s32 ret;
+ s32 yDiff;
+ s32 xDiff;
+ s32 flags;
+
+ if ((entB->collisionLayer & entA->collisionLayer) != 0) {
+ flags = 0;
+ xDiff = entB->x.HALF.HI + entB->hitbox->offset_x - entA->x.HALF.HI - entA->hitbox->offset_x;
+
+ if (arg2 >= xDiff + (arg2 >> 1)) {
+ flags |= 1;
+ }
+ if (arg2 << 1 >= xDiff + arg2) {
+ flags |= 2;
+ }
+
+ yDiff = entB->y.HALF.HI + entB->hitbox->offset_y - entA->y.HALF.HI - entA->hitbox->offset_y;
+ if (arg2 >= yDiff + (arg2 >> 1)) {
+ flags |= 4;
+ }
+ if (arg2 << 1 >= yDiff + arg2) {
+ flags |= 8;
+ }
+
+ //! @bug flags & 5 can never equal 0xA
+ if (flags && ((flags & 5) != 0xA)) {
+ layer = GetLayerByIndex(entA->collisionLayer);
+ if (xDiff < 0) {
+ xDiff = -xDiff;
+ }
+ if (yDiff < 0) {
+ yDiff = -yDiff;
+ }
+ if (xDiff < yDiff) {
+ if (flags & 1) {
+ ret = sub_0804A168(entA, entB, layer);
+ if (ret != 0xFF) {
+ return ret;
+ }
+ }
+ if (!(flags & 4)) {
+ return 0xFF;
+ }
+ ret = sub_0804A318(entA, entB, layer);
+ } else {
+ if (flags & 4) {
+ ret = sub_0804A318(entA, entB, layer);
+ if (ret != 0xFF) {
+ return ret;
+ }
+ }
+ if (!(flags & 1)) {
+ return 0xFF;
+ }
+ ret = sub_0804A168(entA, entB, layer);
+ }
+ if (ret != 0xFF) {
+ return ret;
+ }
+ }
+ }
+ return 0xFF;
+}
+
+bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3);
+
+u32 sub_0804A168(Entity* entA, Entity* entB, LayerStruct* layer) {
+ u32 uVar2;
+ u32 uVar3;
+ u32 tile1;
+ u32 tile2;
+
+ if (entB->y.HALF.HI > entA->y.HALF.HI) {
+ uVar2 = entA->x.HALF.HI - 4;
+ uVar3 = ((uVar2 & 0xF) < 8) ? 10 : 5;
+ tile1 = TILE(uVar2, entA->y.HALF.HI + 10);
+ tile2 = TILE(uVar2, entB->y.HALF.HI);
+
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 0x40, uVar3)) {
+ uVar2 = entA->x.HALF.HI + 4;
+ uVar3 ^= 0xF;
+ tile1 = TILE(uVar2, entA->y.HALF.HI + 10);
+ tile2 = TILE(uVar2, entB->y.HALF.HI);
+
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 0x40, uVar3)) {
+ return 0x10;
+ }
+ }
+ } else {
+ uVar2 = entA->x.HALF.HI - 4;
+ uVar3 = ((uVar2 & 0xF) < 8) ? 10 : 5;
+ tile1 = TILE(uVar2, entA->y.HALF.HI - 10);
+ tile2 = TILE(uVar2, entB->y.HALF.HI);
+
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -0x40, uVar3)) {
+ uVar2 = entA->x.HALF.HI + 4;
+ uVar3 ^= 0xF;
+ tile1 = TILE(uVar2, entA->y.HALF.HI - 10);
+ tile2 = TILE(uVar2, entB->y.HALF.HI);
+
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -0x40, uVar3)) {
+ return 0;
+ }
+ }
+ }
+ return 0xFF;
+}
+
+u32 sub_0804A318(Entity* entA, Entity* entB, LayerStruct* layer) {
+ u32 uVar2;
+ u32 uVar3;
+ u32 tile1;
+ u32 tile2;
+
+ if (entB->x.HALF.HI > entA->x.HALF.HI) {
+ uVar2 = entA->y.HALF.HI - 4;
+ uVar3 = ((uVar2 & 0xF) < 8) ? 0xC : 3;
+ tile1 = TILE(entA->x.HALF.HI + 10, uVar2);
+ tile2 = TILE(entB->x.HALF.HI, uVar2);
+
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 1, uVar3)) {
+ uVar2 = entA->y.HALF.HI + 4;
+ uVar3 ^= 0xF;
+ tile1 = TILE(entA->x.HALF.HI + 10, uVar2);
+ tile2 = TILE(entB->x.HALF.HI, uVar2);
+
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], 1, uVar3)) {
+ return 8;
+ }
+ }
+ } else {
+ uVar2 = entA->y.HALF.HI - 4;
+ uVar3 = ((uVar2 & 0xF) < 8) ? 0xC : 3;
+ tile1 = TILE(entA->x.HALF.HI - 10, uVar2);
+ tile2 = TILE(entB->x.HALF.HI, uVar2);
+
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -1, uVar3)) {
+ uVar2 = entA->y.HALF.HI + 4;
+ uVar3 ^= 0xF;
+ tile1 = TILE(entA->x.HALF.HI - 10, uVar2);
+ tile2 = TILE(entB->x.HALF.HI, uVar2);
+ if (sub_0804A4BC(&layer->collisionData[tile1], &layer->collisionData[tile2], -1, uVar3)) {
+ return 0x18;
+ }
+ }
+ }
+ return 0xFF;
+}
+
+bool32 sub_0804A4BC(u8* arg0, u8* arg1, s32 arg2, u32 arg3) {
+ while (arg0 != arg1) {
+ u8 r0 = *arg0;
+
+ if (r0 != 0) {
+ if (r0 > 0xF) {
+ return FALSE;
+ }
+
+ r0 &= arg3;
+ if (r0 != 0) {
+ return FALSE;
+ }
+ }
+ arg0 += arg2;
+ }
+
+ return TRUE;
+}
+
+void sub_0804A4E4(Entity* entA, Entity* entB) {
+ GenericEntity* r5 = (GenericEntity*)entA;
+ GenericEntity* r6 = (GenericEntity*)entB;
+
+ r6->field_0x6c.HALF.HI = (r5->field_0x6c.HALF.HI & 0x40) | 4;
+ r6->field_0x6c.HALF.LO = r5->field_0x6c.HALF.LO;
+ r6->field_0x70.HALF.LO = r5->field_0x70.HALF.LO;
+ r6->field_0x70.HALF.HI = r5->field_0x70.HALF.HI;
+ r6->field_0x6e.HALF.LO = r5->field_0x6e.HALF.LO;
+ r6->field_0x6e.HALF.HI = r5->field_0x6e.HALF.HI;
+
+ CopyPositionAndSpriteOffset(&r5->base, &r6->base);
+
+ if (r5->field_0x6c.HALF.HI & 0x40) {
+ ReplaceMonitoredEntity(&r5->base, &r6->base);
+ }
+}
diff --git a/src/collision.c b/src/collision.c
index 52bd8d27..6c4f9a5b 100644
--- a/src/collision.c
+++ b/src/collision.c
@@ -61,7 +61,7 @@ void CollisionMain(void) {
prio = gPriorityHandler.ent_priority;
// if any priority is set, dont do collision
- if (prio)
+ if (prio != 0)
return;
doCollision = &ram_CollideAll;
diff --git a/src/coord.c b/src/coord.c
index 629f700a..98f3f65e 100644
--- a/src/coord.c
+++ b/src/coord.c
@@ -1,6 +1,8 @@
+#define NENT_DEPRECATED
#include "asm.h"
#include "area.h"
#include "player.h"
+#include "new_player.h"
#include "coord.h"
#include "common.h"
#include "sound.h"
@@ -38,7 +40,7 @@ void sub_0806F38C(void) {
u32 sub_0806F39C(Entity* ent) {
s32 dist;
- if (gPlayerEntity.animationState & 2) {
+ if (gNewPlayerEntity.base.animationState & 2) {
dist = ent->x.HALF.HI - gPlayerEntity.x.HALF.HI;
} else {
dist = ent->y.HALF.HI - gPlayerEntity.y.HALF.HI;
@@ -55,7 +57,7 @@ u32 sub_0806F39C(Entity* ent) {
}
bool32 sub_0806F3E4(Entity* ent) {
- Entity tmp_ent;
+ GenericEntity tmp_ent;
s8* p;
if ((gPlayerState.field_0x1c & 0x7F) != 1)
@@ -74,15 +76,15 @@ bool32 sub_0806F3E4(Entity* ent) {
if (ent->knockbackSpeed > 0x500)
ent->knockbackSpeed = 0x500;
p = &gUnk_08126EE4[gPlayerEntity.animationState & 0xE];
- tmp_ent.x.HALF.HI = p[0] + gPlayerEntity.x.HALF.HI;
- tmp_ent.y.HALF.HI = p[1] + gPlayerEntity.y.HALF.HI;
- LinearMoveDirection(ent, ent->knockbackSpeed, GetFacingDirection(ent, &tmp_ent));
- if (sub_0800419C(&tmp_ent, ent, 4, 4)) {
+ tmp_ent.base.x.HALF.HI = p[0] + gPlayerEntity.x.HALF.HI;
+ tmp_ent.base.y.HALF.HI = p[1] + gPlayerEntity.y.HALF.HI;
+ LinearMoveDirection(ent, ent->knockbackSpeed, GetFacingDirection(ent, &tmp_ent.base));
+ if (sub_0800419C(&tmp_ent.base, ent, 4, 4)) {
u32 state = ent->field_0x1c & 0xF;
if (state == 2) {
Entity* item;
ent->subAction = 3;
- (Entity*)gPlayerEntity.field_0x70.WORD = ent;
+ gNewPlayerEntity.unk_70 = ent;
gPlayerState.field_0x1c = 7;
item = CreatePlayerItem(0x11, 0, 0, 0);
if (item != NULL) {
@@ -116,7 +118,7 @@ void sub_0806F4E8(Entity* ent) {
}
}
-u32 sub_0806F520(Entity* ent) {
+bool32 sub_0806F520(Entity* ent) {
if (ent->bitfield == 0x93)
return 1;
ent->field_0x3a &= ~4;
@@ -336,38 +338,38 @@ void SortEntityBelow(Entity* above_ent, Entity* below_ent) {
below_ent->spritePriority.b0 = gSpriteSortBelowTable[above_ent->spritePriority.b0];
}
-void sub_0806FB00(Entity* ent, u32 param_1, u32 param_2, u32 param_3) {
+void sub_0806FB00(GenericEntity* ent, u32 param_1, u32 param_2, u32 param_3) {
if (param_3 == 0) {
param_3 = 1;
}
ent->field_0x7c.BYTES.byte2 = 0;
ent->field_0x7c.BYTES.byte3 = param_3;
- ent->field_0x80.HWORD = ent->x.HALF.HI;
- ent->field_0x82.HWORD = ent->y.HALF.HI;
+ ent->field_0x80.HWORD = ent->base.x.HALF.HI;
+ ent->field_0x82.HWORD = ent->base.y.HALF.HI;
ent->cutsceneBeh.HWORD = param_1;
ent->field_0x86.HWORD = param_2;
}
-bool32 sub_0806FB38(Entity* ent) {
+bool32 sub_0806FB38(GenericEntity* ent) {
s32 val;
u32 rv;
if (ent->field_0x7c.BYTES.byte2 < ent->field_0x7c.BYTES.byte3) {
ent->field_0x7c.BYTES.byte2++;
- ent->x.HALF.HI =
+ ent->base.x.HALF.HI =
((((((s16)ent->cutsceneBeh.HWORD - (s16)ent->field_0x80.HWORD) * ent->field_0x7c.BYTES.byte2) << 8) /
ent->field_0x7c.BYTES.byte3) >>
8) +
ent->field_0x80.HWORD;
- ent->y.HALF.HI =
+ ent->base.y.HALF.HI =
(((((((s16)ent->field_0x86.HWORD - (s16)ent->field_0x82.HWORD) * ent->field_0x7c.BYTES.byte2) << 8) /
ent->field_0x7c.BYTES.byte3) >>
8)) +
ent->field_0x82.HWORD;
rv = 0;
} else {
- ent->x.HALF.HI = ent->cutsceneBeh.HWORD;
- ent->y.HALF.HI = ent->field_0x86.HWORD;
+ ent->base.x.HALF.HI = ent->cutsceneBeh.HWORD;
+ ent->base.y.HALF.HI = ent->field_0x86.HWORD;
rv = 1;
}
return rv;
diff --git a/src/data/transitions.c b/src/data/transitions.c
new file mode 100644
index 00000000..5787352d
--- /dev/null
+++ b/src/data/transitions.c
@@ -0,0 +1,3958 @@
+#include "transitions.h"
+#include "area.h"
+#include "roomid.h"
+
+// clang-format off
+
+// this terminates a list of Transitions
+#define TransitionListEnd { WARP_TYPE_END_OF_LIST, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+
+const Transition gExitList_NoExitList[] = { TransitionListEnd };
+const Transition* const gExitLists_NoExit[] = {
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+};
+
+const Transition gExitList_MinishWoods_Main[] = {
+ { WARP_TYPE_AREA, 0x00, 0x0138, 0x0318, 0x0078, 0x0078, 0x00, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_MINISH_WOODS_BOMB, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x01c8, 0x0258, 0x00a8, 0x00d8, 0x00, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x03a8, 0x0010, 0x0078, 0x0088, 0x02, AREA_BEANSTALKS, ROOM_BEANSTALKS_EASTERN_HILLS,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0210, 0x01c8, 0x0078, 0x0078, 0x02, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_MINISH_WOODS_BUSINESS_SCRUB, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0070, 0x0048, 0x0078, 0x0078, 0x02, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_MINISH_WOODS_GREAT_FAIRY, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x02c0, 0x0048, 0x0078, 0x0088, 0x02, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_WITCH_HUT,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x03b8, 0x0038, 0x0078, 0x0108, 0x00, AREA_MINISH_CAVES,
+ ROOM_MINISH_CAVES_MINISH_WOODS_NORTH_1, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0048, 0x0218, 0x0058, 0x0118, 0x00, AREA_MINISH_CAVES,
+ ROOM_MINISH_CAVES_MINISH_WOODS_SOUTHWEST, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0068, 0x0218, 0x0138, 0x0118, 0x00, AREA_MINISH_CAVES,
+ ROOM_MINISH_CAVES_MINISH_WOODS_SOUTHWEST, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0088, 0x0218, 0x0218, 0x0118, 0x00, AREA_MINISH_CAVES,
+ ROOM_MINISH_CAVES_MINISH_WOODS_SOUTHWEST, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x01d8, 0x0fff, 0x40, AREA_HYRULE_FIELD,
+ ROOM_HYRULE_FIELD_EASTERN_HILLLS_NORTH, 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x01d8, 0x00a0, 0x80, AREA_HYRULE_FIELD,
+ ROOM_HYRULE_FIELD_EASTERN_HILLLS_SOUTH, 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x0fff, 0x03b8, 0x01, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x0fff, 0x03ac, 0x02, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MinishWoods[] = {
+ [ROOM_MINISH_WOODS_MAIN] = gExitList_MinishWoods_Main,
+};
+
+const Transition gExitList_LakeHylia_Main[] = {
+ { WARP_TYPE_AREA, 0, 0x02a0, 0x0378, 0x0078, 0x00a0, 0x02, AREA_HOUSE_INTERIORS_4,
+ ROOM_HOUSE_INTERIORS_4_MAYOR_LAKE_CABIN, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0, 0x0120, 0x0038, 0x0078, 0x0078, 0x02, AREA_HOUSE_INTERIORS_2,
+ ROOM_HOUSE_INTERIORS_2_STOCKWELL_LAKE_HOUSE, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0, 0x0100, 0x02b8, 0x0078, 0x0078, 0x02, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_WAVEBLADE,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0, 0x00c8, 0x0198, 0x0078, 0x0078, 0x00, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_LAKE_HYLIA_OCARINA, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0, 0x01e8, 0x01a8, 0x0078, 0x0078, 0x00, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_LIBRARI, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0, 0x02b8, 0x0058, 0x0188, 0x01a8, 0x00, AREA_MINISH_CAVES, ROOM_MINISH_CAVES_LAKE_HYLIA_NORTH,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0, 0x0148, 0x0374, 0x0248, 0x01a8, 0x00, AREA_LAKE_WOODS_CAVE, ROOM_LAKE_WOODS_CAVE_MAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0, 0x0000, 0x0000, 0x02c8, 0x0fff, 0xc0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0, 0x0000, 0x0000, 0x0fff, 0x0010, 0x10, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0, 0x0000, 0x0000, 0x0fff, 0x0024, 0x20, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ TransitionListEnd,
+};
+const Transition gExitList_LakeHylia_Beanstalk[] = {
+ { WARP_TYPE_AREA, 0, 0x0208, 0x94, 0x248, 0x88, 0, AREA_HYLIA_DIG_CAVES, ROOM_HYLIA_DIG_CAVES_1, 1, TRANSITION_TYPE_NORMAL,
+ 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x0308, 0x94, 0x308, 0x88, 0, AREA_HYLIA_DIG_CAVES, ROOM_HYLIA_DIG_CAVES_1, 1, TRANSITION_TYPE_NORMAL,
+ 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x0388, 0x64, 0x398, 0x68, 0, AREA_HYLIA_DIG_CAVES, ROOM_HYLIA_DIG_CAVES_1, 1, TRANSITION_TYPE_NORMAL,
+ 0, 0, 0, 0, 0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_LakeHylia[] = {
+ [ROOM_LAKE_HYLIA_MAIN] = gExitList_LakeHylia_Main,
+ [ROOM_LAKE_HYLIA_BEANSTALK] = gExitList_LakeHylia_Beanstalk,
+};
+
+const Transition gExitList_CastorWilds_Main[] = {
+ { WARP_TYPE_AREA, 0, 0x0248, 0x0032, 0x0038, 0x0078, 0x00, AREA_CASTOR_CAVES, ROOM_CASTOR_CAVES_NORTH,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x0288, 0x0032, 0x0128, 0x0078, 0x00, AREA_CASTOR_CAVES, ROOM_CASTOR_CAVES_NORTH,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x01a8, 0x01a2, 0x0088, 0x0078, 0x00, AREA_CASTOR_CAVES, ROOM_CASTOR_CAVES_DARKNUT,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x02d8, 0x0382, 0x0078, 0x0098, 0x00, AREA_CASTOR_CAVES, ROOM_CASTOR_CAVES_SOUTH,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x03c8, 0x0038, 0x0078, 0x0078, 0x00, AREA_CASTOR_CAVES, ROOM_CASTOR_CAVES_HEART_PIECE,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x0038, 0x02d4, 0x0078, 0x0088, 0x00, AREA_DOJOS, ROOM_DOJOS_SWIFTBLADE_I, 1, TRANSITION_TYPE_NORMAL,
+ 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0x03b8, 0x02f8, 0x0078, 0x01f8, 0x00, AREA_MINISH_CAVES, ROOM_MINISH_CAVES_SOUTHEAST_WATER_1,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ { WARP_TYPE_BORDER, 0, 0x0000, 0x0000, 0x0008, 0x0fff, 0x08, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH,
+ 1, TRANSITION_TYPE_NORMAL, 2, 0, 0, 0, 0 },
+ { WARP_TYPE_BORDER, 0, 0x0000, 0x0000, 0x0fff, 0x0010, 0x10, AREA_RUINS, ROOM_RUINS_ENTRANCE, 1, TRANSITION_TYPE_NORMAL, 4, 0,
+ 0, 0, 0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CastorWilds[] = {
+ [ROOM_CASTOR_WILDS_MAIN] = gExitList_CastorWilds_Main,
+};
+
+const Transition gExitList_Ruins_Entrance[] = {
+ { WARP_TYPE_BORDER, 0, 0x00, 0x00, 0x0fff, 0x3b8, 0x01, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0, 0, 0, 0, 0 },
+ { WARP_TYPE_AREA, 0, 0xc8, 0x38, 0x0078, 0x078, 0x00, AREA_CASTOR_CAVES, ROOM_CASTOR_CAVES_WIND_RUINS,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Ruins_Beanstalk[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_Ruins_LadderToTektites[] = {
+ { WARP_TYPE_AREA, 0, 0x38, 0x08, 0x148, 0xb8, 0, AREA_MINISH_CAVES, ROOM_MINISH_CAVES_RUINS, 1, TRANSITION_TYPE_NORMAL, 0,
+ 0, 0, 0, 0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Ruins_FortressEntrance[] = {
+ { WARP_TYPE_BORDER, 0, 0, 0, 0x1d8, 0xb0, 3, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_ENTRANCE_HALL,
+ 1, TRANSITION_TYPE_NORMAL, 0, 0, 0, 0, 0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_Ruins[] = {
+ [ROOM_RUINS_ENTRANCE] = gExitList_Ruins_Entrance,
+ [ROOM_RUINS_BEANSTALK] = gExitList_Ruins_Beanstalk,
+ [ROOM_RUINS_TEKTITES] = gExitList_NoExitList,
+ [ROOM_RUINS_LADDER_TO_TEKTITES] = gExitList_Ruins_LadderToTektites,
+ [ROOM_RUINS_FORTRESS_ENTRANCE] = gExitList_Ruins_FortressEntrance,
+ [ROOM_RUINS_BELOW_FORTRESS_ENTRANCE] = gExitList_NoExitList,
+};
+
+const Transition gExitList_HyruleTown_0[] = {
+ { WARP_TYPE_AREA, 0x00, 0x02c8, 0x0138, 0x0068, 0x0098, 0x00, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_MAYOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0308, 0x0120, 0x00e8, 0x0070, 0x01, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_MAYOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0048, 0x00a8, 0x0078, 0x0090, 0x00, AREA_HOUSE_INTERIORS_1,
+ ROOM_HOUSE_INTERIORS_1_POST_OFFICE, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0138, 0x0048, 0x0078, 0x0088, 0x00, AREA_HOUSE_INTERIORS_1,
+ ROOM_HOUSE_INTERIORS_1_LIBRARY_2F, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0168, 0x00a8, 0x00e8, 0x00d8, 0x00, AREA_HOUSE_INTERIORS_1,
+ ROOM_HOUSE_INTERIORS_1_LIBRARY_1F, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0388, 0x0258, 0x0068, 0x0078, 0x00, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0368, 0x01b8, 0x0068, 0x0078, 0x00, AREA_HOUSE_INTERIORS_1,
+ ROOM_HOUSE_INTERIORS_1_INN_WEST_2F, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x03a8, 0x0218, 0x0048, 0x01a8, 0x00, AREA_HOUSE_INTERIORS_1,
+ ROOM_HOUSE_INTERIORS_1_INN_EAST_2F, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x02c8, 0x0098, 0x0078, 0x00c8, 0x00, AREA_HOUSE_INTERIORS_1,
+ ROOM_HOUSE_INTERIORS_1_SCHOOL_WEST, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0328, 0x0068, 0x00d8, 0x0088, 0x00, AREA_HOUSE_INTERIORS_1,
+ ROOM_HOUSE_INTERIORS_1_SCHOOL_EAST, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0258, 0x02e8, 0x0078, 0x00a8, 0x00, AREA_HOUSE_INTERIORS_3,
+ ROOM_HOUSE_INTERIORS_3_STOCKWELL_SHOP, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0198, 0x02e8, 0x0078, 0x00a8, 0x00, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_CAFE,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0178, 0x0210, 0x00c8, 0x0060, 0x01, AREA_HOUSE_INTERIORS_3,
+ ROOM_HOUSE_INTERIORS_3_REM_SHOE_SHOP, 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0278, 0x01f0, 0x0028, 0x0090, 0x01, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_BAKERY,
+ 1, TRANSITION_TYPE_NORMAL, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0178, 0x0250, 0x00c8, 0x0070, 0x01, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_SIMON,
+ 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0178, 0x0290, 0x00c8, 0x0060, 0x01, AREA_HOUSE_INTERIORS_3,
+ ROOM_HOUSE_INTERIORS_3_FIGURINE_HOUSE, 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0138, 0x0290, 0x0028, 0x0060, 0x01, AREA_HOUSE_INTERIORS_3,
+ ROOM_HOUSE_INTERIORS_3_FIGURINE_HOUSE, 1, TRANSITION_TYPE_NORMAL, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0298, 0x0258, 0x0078, 0x0088, 0x00, AREA_HOUSE_INTERIORS_3,
+ ROOM_HOUSE_INTERIORS_3_BORLOV_ENTRANCE, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0090, 0x02c8, 0x0078, 0x0098, 0x02, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_CARPENTER,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0098, 0x0168, 0x0078, 0x0078, 0x00, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_STRANGER,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0038, 0x0248, 0x0078, 0x0098, 0x00, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_DR_LEFT,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x02e8, 0x02f0, 0x0078, 0x0078, 0x00, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_ROMIO,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0348, 0x02f8, 0x0078, 0x0098, 0x00, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_JULIETTA,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x03b8, 0x0358, 0x0078, 0x0078, 0x00, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_CUCCO,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0138, 0x0388, 0x0078, 0x0098, 0x00, AREA_HOUSE_INTERIORS_4,
+ ROOM_HOUSE_INTERIORS_4_SWIFTBLADE, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0038, 0x01a8, 0x0078, 0x0078, 0x00, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_HYRULE_TOWN, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0050, 0x0378, 0x0078, 0x0078, 0x02, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_STAIRS_TO_CARLOV, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x00f0, 0x0188, 0x0078, 0x0078, 0x02, AREA_CAVES, ROOM_CAVES_HYRULE_TOWN_WATERFALL,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0040, 0x01b8, 0x0078, 0x0098, 0x02, AREA_HOUSE_INTERIORS_2,
+ ROOM_HOUSE_INTERIORS_2_WEST_ORACLE, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x02b8, 0x0360, 0x0078, 0x0078, 0x00, AREA_HOUSE_INTERIORS_2,
+ ROOM_HOUSE_INTERIORS_2_EAST_ORACLE, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_AREA, 0x00, 0x0338, 0x0134, 0x0288, 0x0118, 0x00, AREA_HYRULE_TOWN_UNDERGROUND,
+ ROOM_HYRULE_TOWN_UNDERGROUND_0, 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x01f8, 0x0318, 0x03, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x00, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x01d8, 0x0230, 0x40, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x06, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x0008, 0x0230, 0x04, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x02, 0x00, 0x00, 0x00, 0x00 },
+ { WARP_TYPE_BORDER, 0x00, 0x0000, 0x0000, 0x01f8, 0x0010, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x04, 0x00, 0x00, 0x00, 0x00 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyruleTown[] = {
+ [ROOM_HYRULE_TOWN_MAIN] = gExitList_HyruleTown_0,
+};
+
+const Transition gExitList_HyruleTown_1[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x318, 0x3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_FestivalTown[] = {
+ [ROOM_FESTIVAL_TOWN_MAIN] = gExitList_HyruleTown_1,
+};
+
+const Transition gExitList_MtCrenel_MountainTop[] = {
+ { WARP_TYPE_AREA, 0x0, 0x328, 0x34, 0x1a8, 0x28, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_BLOCK_PUSHING,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_WALL_CLIMB, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MtCrenel_WallClimb[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x58, 0x78, 0x78, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_HERMIT, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x148, 0x1e8, 0x78, 0xf8, 0x0, AREA_GREAT_FAIRIES, ROOM_GREAT_FAIRIES_CRENEL, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0xd8, 0x3, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MtCrenel_CaveOfFlamesEntrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x18, 0x58, 0x1b8, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_BLOCK_PUSHING,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x208, 0x18, 0x298, 0x1b8, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_BLOCK_PUSHING,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1d8, 0xb8, 0xb8, 0x88, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_PILLAR_CAVE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x238, 0xb8, 0x48, 0x1c8, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_BRIDGE_SWITCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x188, 0xf8, 0xb8, 0x98, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_EXIT_TO_MINES,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x208, 0x148, 0x78, 0xf0, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_TO_GRAYBLADE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1e8, 0x1d8, 0x78, 0x78, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_GRIP_RING,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x72, 0x88, 0xa8, 0x0, AREA_CAVE_OF_FLAMES, ROOM_CAVE_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MtCrenel_GustJarShortcut[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x48, 0x78, 0x78, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_FAIRY_FOUNTAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x2f8, 0x28, 0x38, 0x98, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_SPINY_CHU_PUZZLE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x348, 0x58, 0xb8, 0x88, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_CHUCHU_POT_CHEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x108, 0x78, 0x118, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_WATER_HEART_PIECE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MtCrenel_Entrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x298, 0x28, 0x78, 0x78, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_RUPEE_FAIRY_FOUINTAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x198, 0xd8, 0x1f8, 0x78, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_HELMASAUR_HALLWAY,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x138, 0x138, 0xb8, 0x138, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_MUSHROOM_KEESE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x2d8, 0x188, 0x78, 0x88, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_LADDER_TO_SPRING_WATER,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x198, 0x78, 0x78, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_BOMB_BUSINESS_SCRUB,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x3b8, 0x168, 0x78, 0x78, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_HINT_SCRUB,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1c8, 0x18, 0x98, 0x1a8, 0x0, AREA_MINISH_CAVES, ROOM_MINISH_CAVES_BEAN_PESTO,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x2d8, 0x154, 0x78, 0x38, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_LADDER_TO_SPRING_WATER,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0xfff, 0x8, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MtCrenel[] = {
+ [ROOM_MT_CRENEL_TOP] = gExitList_MtCrenel_MountainTop,
+ [ROOM_MT_CRENEL_WALL_CLIMB] = gExitList_MtCrenel_WallClimb,
+ [ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE] = gExitList_MtCrenel_CaveOfFlamesEntrance,
+ [ROOM_MT_CRENEL_CENTER] = gExitList_MtCrenel_GustJarShortcut,
+ [ROOM_MT_CRENEL_ENTRANCE] = gExitList_MtCrenel_Entrance,
+};
+
+const Transition gExitList_HyruleField_WesternWoodSouth[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x28, 0x78, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_HYRULE_FIELD_SOUTHWEST, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_SouthHyruleField[] = {
+ { WARP_TYPE_AREA, 0x0, 0x290, 0x188, 0x78, 0x78, 0x2, AREA_HOUSE_INTERIORS_2,
+ ROOM_HOUSE_INTERIORS_2_LINKS_HOUSE_ENTRANCE, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x3a0, 0x228, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_SOUTH_HYRULE_FIELD_HEART_PIECE, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0xa8, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_SOUTH_HYRULE_FIELD_FAIRY_FOUNTAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x118, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_SOUTH_HYRULE_FIELD_RUPEE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x178, 0xd8, 0x78, 0xb8, 0x0, AREA_MINISH_CAVES, ROOM_MINISH_CAVES_OUTSIDE_LINKS_HOUSE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x1c8, 0x78, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_SOUTH_HYRULE_FIELD, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1f8, 0x3b8, 0x3, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_EasternHillsSouth[] = {
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x28, 0x78, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_HYRULE_FIELD_EXIT, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0x3c8, 0x8, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_EasternHillsCenter[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x98, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_HILLS_KEESE_CHEST, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_EasternHillsNorth[] = {
+ { WARP_TYPE_AREA, 0x0, 0x40, 0x48, 0x78, 0x88, 0x2, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_FARM_HOUSE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0xfff, 0xc, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_LonLonRanch[] = {
+ { WARP_TYPE_AREA, 0x0, 0x158, 0x278, 0x68, 0x78, 0x0, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_RANCH_HOUSE_WEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x188, 0x278, 0x78, 0x78, 0x0, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_RANCH_HOUSE_EAST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xe8, 0x1b4, 0xa8, 0xd8, 0x0, AREA_CAVES, ROOM_CAVES_LON_LON_RANCH, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1f8, 0x208, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_LON_LON_RANCH_WALLET, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x354, 0x78, 0x78, 0x0, AREA_GORON_CAVE, ROOM_GORON_CAVE_STAIRS, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x154, 0x38, 0x28, 0x0, AREA_CAVES, ROOM_CAVES_LON_LON_RANCH, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x3e8, 0x1, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1c8, 0x3e8, 0x2, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0xfff, 0xc, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x2,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3e8, 0xf0, 0x80, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_NorthHyruleField[] = {
+ { WARP_TYPE_AREA, 0x0, 0x1f8, 0x38, 0x1f8, 0x208, 0x3, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1b0, 0x128, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_NORTHWEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x240, 0x128, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_NORTHEAST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1b0, 0x188, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_SOUTHWEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x240, 0x188, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_SOUTHEAST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x2f0, 0x138, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_NORTH_HYRULE_FIELD_FAIRY_FOUNTAIN, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1f8, 0x154, 0xa8, 0xd8, 0x0, AREA_CAVES, ROOM_CAVES_BOOMERANG, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x108, 0x138, 0x108, 0xd8, 0x0, AREA_CAVES, ROOM_CAVES_TO_GRAVEYARD, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x138, 0x1e8, 0x78, 0xc8, 0x0, AREA_CAVES, ROOM_CAVES_HEART_PIECE_HALLWAY, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xf4, 0x38, 0x58, 0x0, AREA_CAVES, ROOM_CAVES_TO_GRAVEYARD, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0xf4, 0x118, 0x58, 0x0, AREA_CAVES, ROOM_CAVES_TO_GRAVEYARD, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x208, 0x3, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1f8, 0x18, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0xfff, 0x4, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x2,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1d8, 0x260, 0x40, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_TrilbyHighlands[] = {
+ { WARP_TYPE_AREA, 0x0, 0x40, 0x388, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_PERCYS_TREEHOUSE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x222, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_TRILBY_KEESE_CHEST, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x2a8, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_TRILBY_RUPEE, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x198, 0x2b2, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_TRILBY_FAIRY_FOUNTAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x94, 0x88, 0x68, 0x0, AREA_DIG_CAVES, ROOM_DIG_CAVES_TRILBY_HIGHLANDS, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x98, 0x284, 0x38, 0x38, 0x0, AREA_CAVES, ROOM_CAVES_TRILBY_HIGHLANDS, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0x284, 0x128, 0x38, 0x0, AREA_CAVES, ROOM_CAVES_TRILBY_HIGHLANDS, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x3e8, 0x1, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0xf0, 0x8, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x2,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3e8, 0xfff, 0x40, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_WesternWoodsNorth[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa0, 0x1e8, 0x78, 0x78, 0x2, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_WESTERN_WOODS_HEART_PIECE, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3e8, 0xfff, 0x40, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleField_WesternWoodsCenter[] = {
+ { WARP_TYPE_AREA, 0x0, 0x90, 0x48, 0x78, 0x88, 0x2, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_PERCY,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyruleField[] = {
+ [ROOM_HYRULE_FIELD_WESTERN_WOODS_SOUTH] = gExitList_HyruleField_WesternWoodSouth,
+ [ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD] = gExitList_HyruleField_SouthHyruleField,
+ [ROOM_HYRULE_FIELD_EASTERN_HILLLS_SOUTH] = gExitList_HyruleField_EasternHillsSouth,
+ [ROOM_HYRULE_FIELD_EASTERN_HILLLS_CENTER] = gExitList_HyruleField_EasternHillsCenter,
+ [ROOM_HYRULE_FIELD_EASTERN_HILLLS_NORTH] = gExitList_HyruleField_EasternHillsNorth,
+ [ROOM_HYRULE_FIELD_LON_LON_RANCH] = gExitList_HyruleField_LonLonRanch,
+ [ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD] = gExitList_HyruleField_NorthHyruleField,
+ [ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS] = gExitList_HyruleField_TrilbyHighlands,
+ [ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH] = gExitList_HyruleField_WesternWoodsNorth,
+ [ROOM_HYRULE_FIELD_WESTERN_WOODS_CENTER] = gExitList_HyruleField_WesternWoodsCenter,
+};
+
+// TODO this is one table
+const Transition gExitList_CastleGarden_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x1f8, 0x28, 0xd8, 0x208, 0x2, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_0, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x308, 0x48, 0x78, 0x78, 0x0, AREA_GARDEN_FOUNTAINS, ROOM_GARDEN_FOUNTAINS_EAST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xe8, 0x48, 0x78, 0x78, 0x0, AREA_GARDEN_FOUNTAINS, ROOM_GARDEN_FOUNTAINS_WEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x74, 0x68, 0x1a8, 0x0, AREA_HYRULE_CASTLE_CELLAR, ROOM_HYRULE_CASTLE_CELLAR_0,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x3a8, 0x184, 0x78, 0x68, 0x0, AREA_DOJOS, ROOM_DOJOS_TO_GRIMBLADE, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1f8, 0x48, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gUnk_08134FBC[] = {
+ { WARP_TYPE_AREA, 0x0, 0x1f8, 0x28, 0x198, 0x1f0, 0x2, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_1F_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x308, 0x48, 0x78, 0x78, 0x0, AREA_GARDEN_FOUNTAINS, ROOM_GARDEN_FOUNTAINS_EAST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xe8, 0x48, 0x78, 0x78, 0x0, AREA_GARDEN_FOUNTAINS, ROOM_GARDEN_FOUNTAINS_WEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x74, 0x68, 0x1a8, 0x0, AREA_HYRULE_CASTLE_CELLAR, ROOM_HYRULE_CASTLE_CELLAR_0,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x3a8, 0x184, 0x78, 0x68, 0x0, AREA_DOJOS, ROOM_DOJOS_TO_GRIMBLADE, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1f8, 0x48, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gUnk_08135048[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CastleGarden[] = {
+ [ROOM_CASTLE_GARDEN_MAIN] = gExitList_CastleGarden_Main,
+};
+
+const Transition gExitList_CloudTops_House[] = {
+ { WARP_TYPE_AREA, 0x0, 0x1e8, 0x158, 0x78, 0x138, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CloudTops[] = {
+ [ROOM_CLOUD_TOPS_CLOUD_TOPS] = gExitList_CloudTops_House,
+};
+
+const Transition gExitList_RoyalValley_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0xf0, 0x28, 0x88, 0x78, 0x2, AREA_ROYAL_CRYPT, ROOM_ROYAL_CRYPT_ENTRANCE, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1a0, 0x198, 0x78, 0x78, 0x2, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_DAMPE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x198, 0x2a8, 0x78, 0xf8, 0x0, AREA_GREAT_FAIRIES, ROOM_GREAT_FAIRIES_GRAVEYARD,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x84, 0x78, 0x78, 0x0, AREA_ROYAL_VALLEY_GRAVES, ROOM_ROYAL_VALLEY_GRAVES_HEART_PIECE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x188, 0x84, 0x78, 0x118, 0x0, AREA_ROYAL_VALLEY_GRAVES, ROOM_ROYAL_VALLEY_GRAVES_GINA,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x10, 0x10, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0x50, 0x8, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+#ifndef EU
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x28c, 0x78, 0x18, 0x0, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_FOREST_MAZE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+#else
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x288, 0x78, 0x18, 0x0, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_FOREST_MAZE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+#endif
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x328, 0x78, 0x98, 0x0, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_FOREST_MAZE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_RoyalValley_ForestMaze[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x338, 0x30, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gUnk_08135190[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x278, 0x3, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x338, 0x30, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_RoyalValley[] = {
+ [ROOM_ROYAL_VALLEY_MAIN] = gExitList_RoyalValley_Main,
+ [ROOM_ROYAL_VALLEY_FOREST_MAZE] = gExitList_RoyalValley_ForestMaze,
+};
+
+const Transition gExitList_VeilFalls_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x22, 0x38, 0x78, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x158, 0x22, 0x118, 0x78, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0x42, 0xb8, 0x78, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x1e2, 0x38, 0x78, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xd8, 0x1c2, 0x98, 0x78, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_EXIT,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xd8, 0x142, 0x98, 0x118, 0x0, AREA_VEIL_FALLS_CAVES,
+ ROOM_VEIL_FALLS_CAVES_HALLWAY_BLOCK_PUZZLE, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0xc2, 0xb8, 0x118, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_RUPEE_PATH,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x28, 0x78, 0x78, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_HEART_PIECE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x74, 0x38, 0x108, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x10, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0xb8, 0x3, AREA_VEIL_FALLS_TOP, ROOM_VEIL_FALLS_TOP_0, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3e8, 0xfff, 0xc0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_VeilFalls[] = {
+ [ROOM_VEIL_FALLS_MAIN] = gExitList_VeilFalls_Main,
+};
+
+const Transition gExitList_Beanstalks_MountCrenel[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x88, 0x78, 0x18, 0x2, AREA_BEANSTALKS, ROOM_BEANSTALKS_CRENEL_CLIMB, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_LakeHylia[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x88, 0x78, 0x18, 0x2, AREA_BEANSTALKS, ROOM_BEANSTALKS_LAKE_HYLIA_CLIMB,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_Ruins[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x88, 0x78, 0x18, 0x2, AREA_BEANSTALKS, ROOM_BEANSTALKS_RUINS_CLIMB, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_EasternHills[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x88, 0x78, 0x18, 0x2, AREA_BEANSTALKS, ROOM_BEANSTALKS_EASTERN_HILLS_CLIMB,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_WesternWoods[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x88, 0x78, 0x18, 0x2, AREA_BEANSTALKS, ROOM_BEANSTALKS_WESTERN_WOODS_CLIMB,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_MountCrenelClimb[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x58, 0x68, 0x3, AREA_BEANSTALKS, ROOM_BEANSTALKS_CRENEL, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x98, 0x18, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_LakeHyliaClimb[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x58, 0x68, 0x3, AREA_BEANSTALKS, ROOM_BEANSTALKS_LAKE_HYLIA, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x228, 0x18, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_BEANSTALK, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_RuinsClimb[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x58, 0x68, 0x3, AREA_BEANSTALKS, ROOM_BEANSTALKS_RUINS, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x48, 0x18, 0x30, AREA_RUINS, ROOM_RUINS_BEANSTALK, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0,
+ 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_EasternHillsClimb[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x58, 0x68, 0x3, AREA_BEANSTALKS, ROOM_BEANSTALKS_EASTERN_HILLS, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x48, 0x18, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_CENTER,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Beanstalks_WesternWoodsClimb[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x58, 0x68, 0x3, AREA_BEANSTALKS, ROOM_BEANSTALKS_WESTERN_WOODS, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x18, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_SOUTH,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_Beanstalks[] = {
+ [ROOM_BEANSTALKS_CRENEL] = gExitList_Beanstalks_MountCrenel,
+ [ROOM_BEANSTALKS_LAKE_HYLIA] = gExitList_Beanstalks_LakeHylia,
+ [ROOM_BEANSTALKS_RUINS] = gExitList_Beanstalks_Ruins,
+ [ROOM_BEANSTALKS_EASTERN_HILLS] = gExitList_Beanstalks_EasternHills,
+ [ROOM_BEANSTALKS_WESTERN_WOODS] = gExitList_Beanstalks_WesternWoods,
+ [ROOM_BEANSTALKS_5] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_6] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_7] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_8] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_9] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_a] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_b] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_c] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_d] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_e] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_f] = gExitList_NoExitList,
+ [ROOM_BEANSTALKS_CRENEL_CLIMB] = gExitList_Beanstalks_MountCrenelClimb,
+ [ROOM_BEANSTALKS_LAKE_HYLIA_CLIMB] = gExitList_Beanstalks_LakeHyliaClimb,
+ [ROOM_BEANSTALKS_RUINS_CLIMB] = gExitList_Beanstalks_RuinsClimb,
+ [ROOM_BEANSTALKS_EASTERN_HILLS_CLIMB] = gExitList_Beanstalks_EasternHillsClimb,
+ [ROOM_BEANSTALKS_WESTERN_WOODS_CLIMB] = gExitList_Beanstalks_WesternWoodsClimb,
+};
+
+const Transition gExitList_LakeWoodsCave_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x248, 0x188, 0x148, 0x358, 0x0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_LakeWoodsCave[] = {
+ [ROOM_LAKE_WOODS_CAVE_MAIN] = gExitList_LakeWoodsCave_Main,
+};
+
+const Transition gExitList_HyruleDigCaves_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x188, 0x218, 0x48, 0x118, 0x0, AREA_HYRULE_TOWN_UNDERGROUND, ROOM_HYRULE_TOWN_UNDERGROUND_0,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyruleDigCaves[] = {
+ [ROOM_HYRULE_DIG_CAVES_TOWN] = gExitList_HyruleDigCaves_Main,
+};
+
+const Transition gExitList_MinishVillage_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x88, 0x78, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_GENTARI_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x70, 0x68, 0x50, 0x1, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_GENTARI_EXIT, 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x258, 0x58, 0xe8, 0xb8, 0x0, AREA_MINISH_HOUSE_INTERIORS, ROOM_MINISH_HOUSE_INTERIORS_FESTARI,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x228, 0x80, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS, ROOM_MINISH_HOUSE_INTERIORS_RED,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x168, 0x1d8, 0x80, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS, ROOM_MINISH_HOUSE_INTERIORS_GREEN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1a8, 0x208, 0x80, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS, ROOM_MINISH_HOUSE_INTERIORS_BLUE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1e8, 0x2d8, 0x78, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_SHOE_MINISH, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x248, 0x78, 0xc8, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_POT_MINISH, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x378, 0x288, 0x78, 0x140, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_BARREL_MINISH, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x368, 0x234, 0x58, 0x100, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_BARREL_MINISH, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x18, 0x30, AREA_MINISH_PATHS, ROOM_MINISH_PATHS_MINISH_VILLAGE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1c8, 0x338, 0x1, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1a8, 0x348, 0x40, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishVillage_SideHouse[] = {
+ { WARP_TYPE_AREA, 0x0, 0x138, 0x68, 0x80, 0x78, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_SIDE_AREA, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MinishVillage[] = {
+ [ROOM_MINISH_VILLAGE_MAIN] = gExitList_MinishVillage_Main,
+ [ROOM_MINISH_VILLAGE_SIDE_HOUSE_AREA] = gExitList_MinishVillage_SideHouse,
+ [ROOM_MINISH_VILLAGE_2] = gExitList_NoExitList,
+ [ROOM_MINISH_VILLAGE_3] = gExitList_NoExitList,
+};
+
+const Transition gExitList_MelarisMine_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x38, 0x78, 0xa8, 0x0, AREA_CRENEL_MINISH_PATHS, ROOM_CRENEL_MINISH_PATHS_MELARI,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x70, 0x12c, 0xbc, 0x138, 0x0, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x220, 0x78, 0x28, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_MELARI_MINES_SOUTHWEST, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x228, 0x220, 0x78, 0x28, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_MELARI_MINES_SOUTHEAST, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x280, 0x11c, 0x24, 0x56, 0x0, AREA_MINISH_HOUSE_INTERIORS,
+ ROOM_MINISH_HOUSE_INTERIORS_MELARI_MINES_EAST, 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MelarisMine[] = {
+ [ROOM_MELARIS_MINE_MAIN] = gExitList_MelarisMine_Main,
+};
+
+const Transition gExitList_MinishPaths_ToMinishVillage[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x208, 0x3e0, 0x3, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1d8, 0x398, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishPaths_CastorWilds[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x28, 0x68, 0x3, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x28, 0xa8, 0x30, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishPaths_HyruleTown[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x398, 0x68, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishPaths_LonLonRanch[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1e0, 0x174, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishPaths_MayorsCabin[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2a8, 0x31a, 0x3, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb8, 0x48, 0x30, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_MAYOR_LAKE_CABIN,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MinishPaths[] = {
+ [ROOM_MINISH_PATHS_MINISH_VILLAGE] = gExitList_MinishPaths_ToMinishVillage,
+ [ROOM_MINISH_PATHS_BOW] = gExitList_MinishPaths_CastorWilds,
+ [ROOM_MINISH_PATHS_SCHOOLYARD] = gExitList_MinishPaths_HyruleTown,
+ [ROOM_MINISH_PATHS_LON_LON_RANCH] = gExitList_MinishPaths_LonLonRanch,
+ [ROOM_MINISH_PATHS_LAKE_HYLIA] = gExitList_MinishPaths_MayorsCabin,
+};
+
+const Transition gExitList_CrenelMinishPaths_CrenelBean[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xd2, 0x60, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelMinishPaths_CrenelWater[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x372, 0xf5, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelMinishPaths_Rainfall[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2cc, 0x98, 0xc0, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x6,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2f4, 0x98, 0xc, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x2,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelMinishPaths_MelarisMine[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xf4, 0x108, 0xc, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x48, 0x30, AREA_MELARIS_MINE, ROOM_MELARIS_MINE_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CrenelMinishPaths[] = {
+ [ROOM_CRENEL_MINISH_PATHS_BEAN] = gExitList_CrenelMinishPaths_CrenelBean,
+ [ROOM_CRENEL_MINISH_PATHS_SPRING_WATER] = gExitList_CrenelMinishPaths_CrenelWater,
+ [ROOM_CRENEL_MINISH_PATHS_RAIN] = gExitList_CrenelMinishPaths_Rainfall,
+ [ROOM_CRENEL_MINISH_PATHS_MELARI] = gExitList_CrenelMinishPaths_MelarisMine,
+};
+
+const Transition gExitList_DigCaves1_TrilbyHighlands[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x44, 0x88, 0x78, 0x0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1a8, 0x78, 0xb8, 0x28, 0x0, AREA_CAVES, ROOM_CAVES_TRILBY_MITTS_FAIRY_FOUNTAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_DigCaves1[] = {
+ [ROOM_DIG_CAVES_EASTERN_HILLS] = gExitList_NoExitList,
+ [ROOM_DIG_CAVES_1] = gExitList_NoExitList,
+ [ROOM_DIG_CAVES_2] = gExitList_NoExitList,
+ [ROOM_DIG_CAVES_TRILBY_HIGHLANDS] = gExitList_DigCaves1_TrilbyHighlands,
+};
+
+const Transition gExitList_MinishHouseInteriors_GentariMain[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x98, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_GentariExit[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x50, 0x28, 0x70, 0x1, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_Festari[] = {
+ { WARP_TYPE_AREA, 0x0, 0xe8, 0xe8, 0x258, 0x68, 0x0, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xe8, 0x18, 0x1d0, 0x33c, 0x0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_Red[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x128, 0x238, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_Green[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x168, 0x1e8, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_Blue[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1a8, 0x218, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_SideArea[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x138, 0x78, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_SIDE_HOUSE_AREA,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_ShoeMinish[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1e8, 0x2e8, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_PotMinish[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x48, 0x258, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_BarrelMinish[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x378, 0x298, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x58, 0xd0, 0x368, 0x218, 0x0, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_NULL1[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x378, 0x290, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_SIDE_HOUSE_AREA,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_NULL2[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x138, 0x70, 0x30, AREA_MINISH_VILLAGE, ROOM_MINISH_VILLAGE_SIDE_HOUSE_AREA,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_MelariMinesSouthwest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0x208, 0x3, AREA_MELARIS_MINE, ROOM_MELARIS_MINE_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_MelariMinesSoutheast[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x228, 0x208, 0x3, AREA_MELARIS_MINE, ROOM_MELARIS_MINE_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_MelariMinesEast[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x270, 0x11e, 0xc0, AREA_MELARIS_MINE, ROOM_MELARIS_MINE_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_HyruleFieldSouthwest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb8, 0x35, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_SOUTH,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_SouthHyruleField[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x48, 0x1d4, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_NextToKnuckle[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x28, 0x55, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_Librari[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1e8, 0x1b4, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_HyruleFieldExit[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x35, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_SOUTH,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_HyruleTown[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x1b5, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_MinishWoodsBomb[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x138, 0x325, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishHouseInteriors_LakeHyliaOcarina[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x1a4, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MinishHouseInteriors[] = {
+ [ROOM_MINISH_HOUSE_INTERIORS_GENTARI_MAIN] = gExitList_MinishHouseInteriors_GentariMain,
+ [ROOM_MINISH_HOUSE_INTERIORS_GENTARI_EXIT] = gExitList_MinishHouseInteriors_GentariExit,
+ [ROOM_MINISH_HOUSE_INTERIORS_FESTARI] = gExitList_MinishHouseInteriors_Festari,
+ [ROOM_MINISH_HOUSE_INTERIORS_RED] = gExitList_MinishHouseInteriors_Red,
+ [ROOM_MINISH_HOUSE_INTERIORS_GREEN] = gExitList_MinishHouseInteriors_Green,
+ [ROOM_MINISH_HOUSE_INTERIORS_BLUE] = gExitList_MinishHouseInteriors_Blue,
+ [ROOM_MINISH_HOUSE_INTERIORS_SIDE_AREA] = gExitList_MinishHouseInteriors_SideArea,
+ [ROOM_MINISH_HOUSE_INTERIORS_SHOE_MINISH] = gExitList_MinishHouseInteriors_ShoeMinish,
+ [ROOM_MINISH_HOUSE_INTERIORS_POT_MINISH] = gExitList_MinishHouseInteriors_PotMinish,
+ [ROOM_MINISH_HOUSE_INTERIORS_BARREL_MINISH] = gExitList_MinishHouseInteriors_BarrelMinish,
+ [ROOM_MINISH_HOUSE_INTERIORS_NULL1] = gExitList_MinishHouseInteriors_NULL1,
+ [ROOM_MINISH_HOUSE_INTERIORS_NULL2] = gExitList_MinishHouseInteriors_NULL2,
+ [ROOM_MINISH_HOUSE_INTERIORS_c] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_d] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_e] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_f] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_MELARI_MINES_SOUTHWEST] = gExitList_MinishHouseInteriors_MelariMinesSouthwest,
+ [ROOM_MINISH_HOUSE_INTERIORS_MELARI_MINES_SOUTHEAST] = gExitList_MinishHouseInteriors_MelariMinesSoutheast,
+ [ROOM_MINISH_HOUSE_INTERIORS_MELARI_MINES_EAST] = gExitList_MinishHouseInteriors_MelariMinesEast,
+ [ROOM_MINISH_HOUSE_INTERIORS_13] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_14] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_15] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_16] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_17] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_18] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_19] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_1a] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_1b] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_1c] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_1d] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_1e] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_1f] = gExitList_NoExitList,
+ [ROOM_MINISH_HOUSE_INTERIORS_HYRULE_FIELD_SOUTHWEST] = gExitList_MinishHouseInteriors_HyruleFieldSouthwest,
+ [ROOM_MINISH_HOUSE_INTERIORS_SOUTH_HYRULE_FIELD] = gExitList_MinishHouseInteriors_SouthHyruleField,
+ [ROOM_MINISH_HOUSE_INTERIORS_NEXT_TO_KNUCKLE] = gExitList_MinishHouseInteriors_NextToKnuckle,
+ [ROOM_MINISH_HOUSE_INTERIORS_LIBRARI] = gExitList_MinishHouseInteriors_Librari,
+ [ROOM_MINISH_HOUSE_INTERIORS_HYRULE_FIELD_EXIT] = gExitList_MinishHouseInteriors_HyruleFieldExit,
+ [ROOM_MINISH_HOUSE_INTERIORS_HYRULE_TOWN] = gExitList_MinishHouseInteriors_HyruleTown,
+ [ROOM_MINISH_HOUSE_INTERIORS_MINISH_WOODS_BOMB] = gExitList_MinishHouseInteriors_MinishWoodsBomb,
+ [ROOM_MINISH_HOUSE_INTERIORS_LAKE_HYLIA_OCARINA] = gExitList_MinishHouseInteriors_LakeHyliaOcarina,
+};
+
+const Transition gExitList_OuterFortressOfWinds_EntranceHall[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x22, 0x78, 0xb0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WIZZROBE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x22, 0x68, 0xb0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1d8, 0x22, 0x78, 0xb0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_CENTER_STAIRS_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x288, 0x22, 0x68, 0xb0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x338, 0x22, 0x88, 0xb0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_HEART_PIECE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x198, 0x28, 0x30, AREA_RUINS, ROOM_RUINS_FORTRESS_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_OuterFortressOfWinds_2F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x22, 0x88, 0xb0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_STALFOS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1d8, 0x92, 0x88, 0x170, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_MAIN_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x288, 0x92, 0x88, 0xa0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x338, 0x22, 0x28, 0xb0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_BOSS_KEY,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x128, 0xd8, 0x128, 0x68, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1d8, 0xd8, 0x1d8, 0x68, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x288, 0xd8, 0x288, 0x68, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x338, 0xd8, 0x338, 0x68, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_OuterFortressOfWinds_3F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x22, 0x78, 0xa0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_PIT_PLATFORMS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1d8, 0x22, 0x198, 0xa0, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_KEY_LEVER,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x2e8, 0x22, 0x198, 0x178, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_KEY_LEVER,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x338, 0x22, 0x1f8, 0x178, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_KEY_LEVER,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1d8, 0x84, 0x1d8, 0xf8, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x288, 0x84, 0x288, 0xf8, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x338, 0x84, 0x338, 0xf8, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x84, 0x128, 0xf8, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_OuterFortressOfWinds_MoleMitts[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x22, 0x30, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_ENTRANCE_MOLE_MITTS,
+ 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_OuterFortressOfWinds_SmallKey[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x22, 0x30, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_MINISH_HOLE,
+ 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_OuterFortressOfWinds[] = {
+ [ROOM_OUTER_FORTRESS_OF_WINDS_ENTRANCE_HALL] = gExitList_OuterFortressOfWinds_EntranceHall,
+ [ROOM_OUTER_FORTRESS_OF_WINDS_2F] = gExitList_OuterFortressOfWinds_2F,
+ [ROOM_OUTER_FORTRESS_OF_WINDS_3F] = gExitList_OuterFortressOfWinds_3F,
+ [ROOM_OUTER_FORTRESS_OF_WINDS_MOLE_MITTS] = gExitList_OuterFortressOfWinds_MoleMitts,
+ [ROOM_OUTER_FORTRESS_OF_WINDS_SMALL_KEY] = gExitList_OuterFortressOfWinds_SmallKey,
+};
+
+const Transition gExitList_HyliaDigCaves_North[] = {
+ { WARP_TYPE_AREA, 0x0, 0x248, 0x62, 0x208, 0x78, 0x0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_BEANSTALK, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x308, 0x62, 0x308, 0x78, 0x0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_BEANSTALK, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x398, 0x52, 0x388, 0x48, 0x0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_BEANSTALK, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyliaDigCaves[] = {
+ [ROOM_HYLIA_DIG_CAVES_0] = gExitList_NoExitList,
+ [ROOM_HYLIA_DIG_CAVES_1] = gExitList_HyliaDigCaves_North,
+ NULL,
+ NULL,
+ NULL,
+};
+
+const Transition gExitList_VeilFallsTop_Main[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x10, 0x30, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_VeilFallsTop[] = {
+ [ROOM_VEIL_FALLS_TOP_0] = gExitList_VeilFallsTop_Main,
+};
+
+const Transition gExitList_HouseInteriors2_Stranger[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x98, 0x17c, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_WestOracle[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x40, 0x1cc, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_2[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x40, 0x1cc, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_3[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x40, 0x1cc, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_DrLeft[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x25c, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_NULL1[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x40, 0x5c, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_NORTH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_Romio[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2e8, 0x304, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_Julietta[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x348, 0x30c, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_Percy[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x90, 0x5c, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_CENTER,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_EastOracle[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2b8, 0x374, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_A[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2b8, 0x374, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_B[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2b8, 0x374, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_Cucco[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3b8, 0x36c, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_LinksHouseEntrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x18, 0x58, 0x28, 0x0, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_LINKS_HOUSE_BEDROOM,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x290, 0x19c, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_Dampe[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1a0, 0x1ac, 0x30, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_NULL2[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_StockwellLakeHouse[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x120, 0x4c, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors2_LinksHouseBedroom[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x18, 0x58, 0x28, 0x0, AREA_HOUSE_INTERIORS_2,
+ ROOM_HOUSE_INTERIORS_2_LINKS_HOUSE_ENTRANCE, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HouseInteriors2[] = {
+ [ROOM_HOUSE_INTERIORS_2_STRANGER] = gExitList_HouseInteriors2_Stranger,
+ [ROOM_HOUSE_INTERIORS_2_WEST_ORACLE] = gExitList_HouseInteriors2_WestOracle,
+ [ROOM_HOUSE_INTERIORS_2_2] = gExitList_HouseInteriors2_2,
+ [ROOM_HOUSE_INTERIORS_2_3] = gExitList_HouseInteriors2_3,
+ [ROOM_HOUSE_INTERIORS_2_DR_LEFT] = gExitList_HouseInteriors2_DrLeft,
+ [ROOM_HOUSE_INTERIORS_2_5] = gExitList_HouseInteriors2_NULL1,
+ [ROOM_HOUSE_INTERIORS_2_ROMIO] = gExitList_HouseInteriors2_Romio,
+ [ROOM_HOUSE_INTERIORS_2_JULIETTA] = gExitList_HouseInteriors2_Julietta,
+ [ROOM_HOUSE_INTERIORS_2_PERCY] = gExitList_HouseInteriors2_Percy,
+ [ROOM_HOUSE_INTERIORS_2_EAST_ORACLE] = gExitList_HouseInteriors2_EastOracle,
+ [ROOM_HOUSE_INTERIORS_2_a] = gExitList_HouseInteriors2_A,
+ [ROOM_HOUSE_INTERIORS_2_b] = gExitList_HouseInteriors2_B,
+ [ROOM_HOUSE_INTERIORS_2_CUCCO] = gExitList_HouseInteriors2_Cucco,
+ [ROOM_HOUSE_INTERIORS_2_d] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_e] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_f] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_LINKS_HOUSE_ENTRANCE] = gExitList_HouseInteriors2_LinksHouseEntrance,
+ [ROOM_HOUSE_INTERIORS_2_LINKS_HOUSE_SMITH] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_DAMPE] = gExitList_HouseInteriors2_Dampe,
+ [ROOM_HOUSE_INTERIORS_2_13] = gExitList_HouseInteriors2_NULL2,
+ [ROOM_HOUSE_INTERIORS_2_STOCKWELL_LAKE_HOUSE] = gExitList_HouseInteriors2_StockwellLakeHouse,
+ [ROOM_HOUSE_INTERIORS_2_LINKS_HOUSE_BEDROOM] = gExitList_HouseInteriors2_LinksHouseBedroom,
+ [ROOM_HOUSE_INTERIORS_2_16] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_17] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_18] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_19] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_1a] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_1b] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_1c] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_1d] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_1e] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_1f] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_20] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_21] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_22] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_23] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_24] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_25] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_26] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_27] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_28] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_29] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_2a] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_2b] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_2c] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_2d] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_2e] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_2_2f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_HouseInteriors4_Carpenter[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x90, 0x2dc, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors4_Swiftblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x138, 0x39c, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors4_RanchHouseWest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x158, 0x28c, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors4_RanchHouseEast[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x188, 0x28c, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors4_FarmHouse[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x40, 0x5c, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_NORTH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors4_MayorLakeCabin[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2a0, 0x38c, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HouseInteriors4[] = {
+ [ROOM_HOUSE_INTERIORS_4_CARPENTER] = gExitList_HouseInteriors4_Carpenter,
+ [ROOM_HOUSE_INTERIORS_4_SWIFTBLADE] = gExitList_HouseInteriors4_Swiftblade,
+ [ROOM_HOUSE_INTERIORS_4_RANCH_HOUSE_WEST] = gExitList_HouseInteriors4_RanchHouseWest,
+ [ROOM_HOUSE_INTERIORS_4_RANCH_HOUSE_EAST] = gExitList_HouseInteriors4_RanchHouseEast,
+ [ROOM_HOUSE_INTERIORS_4_FARM_HOUSE] = gExitList_HouseInteriors4_FarmHouse,
+ [ROOM_HOUSE_INTERIORS_4_MAYOR_LAKE_CABIN] = gExitList_HouseInteriors4_MayorLakeCabin,
+ [ROOM_HOUSE_INTERIORS_4_6] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_7] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_8] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_9] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_a] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_b] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_c] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_d] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_e] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_4_f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_GreatFairies_Graveyard[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x198, 0x2b8, 0x30, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_GreatFairies_MinishWoods[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x58, 0x30, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_MINISH_WOODS_GREAT_FAIRY,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_GreatFairies_MtCrenel[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x148, 0x1f8, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_WALL_CLIMB, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_GreatFairies[] = {
+ [ROOM_GREAT_FAIRIES_GRAVEYARD] = gExitList_GreatFairies_Graveyard,
+ [ROOM_GREAT_FAIRIES_MINISH_WOODS] = gExitList_GreatFairies_MinishWoods,
+ [ROOM_GREAT_FAIRIES_CRENEL] = gExitList_GreatFairies_MtCrenel,
+ [ROOM_GREAT_FAIRIES_NOT_IMPLEMENTED] = gExitList_NoExitList,
+};
+
+const Transition gExitList_HouseInteriors3_StockwellShop[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x258, 0x2fc, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_Cafe[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x198, 0x2fc, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_RemShoeShop[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x188, 0x210, 0xc, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_Bakery[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x268, 0x1f0, 0xc0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_Simon[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x188, 0x250, 0xc, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_FigurineHouse[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x188, 0x290, 0xc, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x128, 0x290, 0xc0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_BorlovEntrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x298, 0x26c, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb8, 0x78, 0x3, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_BORLOV,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_Carlov[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x60, 0x30, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_STAIRS_TO_CARLOV,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors3_Borlov[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x68, 0x30, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_BORLOV_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HouseInteriors3[] = {
+ [ROOM_HOUSE_INTERIORS_3_STOCKWELL_SHOP] = gExitList_HouseInteriors3_StockwellShop,
+ [ROOM_HOUSE_INTERIORS_3_CAFE] = gExitList_HouseInteriors3_Cafe,
+ [ROOM_HOUSE_INTERIORS_3_REM_SHOE_SHOP] = gExitList_HouseInteriors3_RemShoeShop,
+ [ROOM_HOUSE_INTERIORS_3_BAKERY] = gExitList_HouseInteriors3_Bakery,
+ [ROOM_HOUSE_INTERIORS_3_SIMON] = gExitList_HouseInteriors3_Simon,
+ [ROOM_HOUSE_INTERIORS_3_FIGURINE_HOUSE] = gExitList_HouseInteriors3_FigurineHouse,
+ [ROOM_HOUSE_INTERIORS_3_BORLOV_ENTRANCE] = gExitList_HouseInteriors3_BorlovEntrance,
+ [ROOM_HOUSE_INTERIORS_3_CARLOV] = gExitList_HouseInteriors3_Carlov,
+ [ROOM_HOUSE_INTERIORS_3_BORLOV] = gExitList_HouseInteriors3_Borlov,
+ [ROOM_HOUSE_INTERIORS_3_9] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_3_a] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_3_b] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_3_c] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_3_d] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_3_e] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_3_f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_HouseInteriors1_Mayor[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2c8, 0x14c, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x318, 0x120, 0xc, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_PostOffice[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x48, 0xb8, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_Library2F[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x138, 0x58, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 2, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x18, 0x68, 0x28, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_LIBRARY_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_Library1F[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x168, 0xb8, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x18, 0x78, 0x28, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_LIBRARY_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_Inn1F[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x388, 0x268, 0x10, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x18, 0x98, 0x78, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_WEST_ROOM,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x18, 0x78, 0x78, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_MIDDLE_ROOM,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xf8, 0x18, 0x78, 0x78, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_EAST_ROOM,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0x38, 0xb8, 0x168, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_EAST_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_InnWestRoom[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x28, 0x30, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_InnMiddleRoom[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb8, 0x28, 0x30, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_InnEastRoom[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xf8, 0x28, 0x30, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_InnWest2F[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x368, 0x1c8, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_InnEast2F[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3a8, 0x230, 0x10, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 2, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x178, 0x118, 0x48, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_INN_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_SchoolWest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2c8, 0xa8, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x48, 0x168, 0x28, 0x0, AREA_HYRULE_TOWN_UNDERGROUND, ROOM_HYRULE_TOWN_UNDERGROUND_0,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HouseInteriors1_SchoolEast[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x328, 0x78, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HouseInteriors1[] = {
+ [ROOM_HOUSE_INTERIORS_1_MAYOR] = gExitList_HouseInteriors1_Mayor,
+ [ROOM_HOUSE_INTERIORS_1_POST_OFFICE] = gExitList_HouseInteriors1_PostOffice,
+ [ROOM_HOUSE_INTERIORS_1_LIBRARY_2F] = gExitList_HouseInteriors1_Library2F,
+ [ROOM_HOUSE_INTERIORS_1_LIBRARY_1F] = gExitList_HouseInteriors1_Library1F,
+ [ROOM_HOUSE_INTERIORS_1_INN_1F] = gExitList_HouseInteriors1_Inn1F,
+ [ROOM_HOUSE_INTERIORS_1_INN_WEST_ROOM] = gExitList_HouseInteriors1_InnWestRoom,
+ [ROOM_HOUSE_INTERIORS_1_INN_MIDDLE_ROOM] = gExitList_HouseInteriors1_InnMiddleRoom,
+ [ROOM_HOUSE_INTERIORS_1_INN_EAST_ROOM] = gExitList_HouseInteriors1_InnEastRoom,
+ [ROOM_HOUSE_INTERIORS_1_INN_WEST_2F] = gExitList_HouseInteriors1_InnWest2F,
+ [ROOM_HOUSE_INTERIORS_1_INN_EAST_2F] = gExitList_HouseInteriors1_InnEast2F,
+ [ROOM_HOUSE_INTERIORS_1_INN_MINISH_HEART_PIECE] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_SCHOOL_WEST] = gExitList_HouseInteriors1_SchoolWest,
+ [ROOM_HOUSE_INTERIORS_1_SCHOOL_EAST] = gExitList_HouseInteriors1_SchoolEast,
+ [ROOM_HOUSE_INTERIORS_1_d] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_e] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_f] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_10] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_11] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_12] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_13] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_14] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_15] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_16] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_17] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_18] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_19] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_1a] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_1b] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_1c] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_1d] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_1e] = gExitList_NoExitList,
+ [ROOM_HOUSE_INTERIORS_1_1f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_TreeInteriors_WitchHut[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2c0, 0x58, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_StairsToCarlov[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x48, 0x78, 0x78, 0x0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_CARLOV,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x50, 0x388, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_PercysTreehouse[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x40, 0x398, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_HeartPiece[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3a0, 0x238, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_Waveblade[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x48, 0x78, 0x98, 0x0, AREA_DOJOS, ROOM_DOJOS_WAVEBLADE, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0,
+ 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x100, 0x2c8, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_14[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x210, 0x1d8, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_BoomerangNorthwest[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x54, 0x48, 0x88, 0x0, AREA_CAVES, ROOM_CAVES_BOOMERANG, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0,
+ 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1b0, 0x138, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_BoomerangNortheast[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x54, 0x108, 0x88, 0x0, AREA_CAVES, ROOM_CAVES_BOOMERANG, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x240, 0x138, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_BoomerangSouthwest[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x54, 0x48, 0xf8, 0x0, AREA_CAVES, ROOM_CAVES_BOOMERANG, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0,
+ 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1b0, 0x198, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_BoomerangSoutheast[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x54, 0x108, 0xf8, 0x0, AREA_CAVES, ROOM_CAVES_BOOMERANG, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x240, 0x198, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_WesternWoodsHeartPiece[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa0, 0x1f8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_WESTERN_WOODS_NORTH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_NorthHyruleFieldFairyFountain[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x48, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_NORTH_HYRULE_FIELD_FAIRY_FOUNTAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2f0, 0x148, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_MinishWoodsGreatFairy[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x48, 0x78, 0xf8, 0x0, AREA_GREAT_FAIRIES, ROOM_GREAT_FAIRIES_MINISH_WOODS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x70, 0x58, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_1C[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x50, 0x298, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_MinishWoodsBusinessScrub[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x48, 0x78, 0x78, 0x0, AREA_CAVES, ROOM_CAVES_KINSTONE_BUSINESS_SCRUB, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x210, 0x1d8, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_1E[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_TreeInteriors_UnusedHeartContainer[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1e0, 0x1b8, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_TreeInteriors[] = {
+ [ROOM_TREE_INTERIORS_WITCH_HUT] = gExitList_TreeInteriors_WitchHut,
+ [ROOM_TREE_INTERIORS_1] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_2] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_3] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_4] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_5] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_6] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_7] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_8] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_9] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_a] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_b] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_c] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_d] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_e] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_f] = gExitList_NoExitList,
+ [ROOM_TREE_INTERIORS_STAIRS_TO_CARLOV] = gExitList_TreeInteriors_StairsToCarlov,
+ [ROOM_TREE_INTERIORS_PERCYS_TREEHOUSE] = gExitList_TreeInteriors_PercysTreehouse,
+ [ROOM_TREE_INTERIORS_SOUTH_HYRULE_FIELD_HEART_PIECE] = gExitList_TreeInteriors_HeartPiece,
+ [ROOM_TREE_INTERIORS_WAVEBLADE] = gExitList_TreeInteriors_Waveblade,
+ [ROOM_TREE_INTERIORS_14] = gExitList_TreeInteriors_14,
+ [ROOM_TREE_INTERIORS_BOOMERANG_NORTHWEST] = gExitList_TreeInteriors_BoomerangNorthwest,
+ [ROOM_TREE_INTERIORS_BOOMERANG_NORTHEAST] = gExitList_TreeInteriors_BoomerangNortheast,
+ [ROOM_TREE_INTERIORS_BOOMERANG_SOUTHWEST] = gExitList_TreeInteriors_BoomerangSouthwest,
+ [ROOM_TREE_INTERIORS_BOOMERANG_SOUTHEAST] = gExitList_TreeInteriors_BoomerangSoutheast,
+ [ROOM_TREE_INTERIORS_WESTERN_WOODS_HEART_PIECE] = gExitList_TreeInteriors_WesternWoodsHeartPiece,
+ [ROOM_TREE_INTERIORS_NORTH_HYRULE_FIELD_FAIRY_FOUNTAIN] = gExitList_TreeInteriors_NorthHyruleFieldFairyFountain,
+ [ROOM_TREE_INTERIORS_MINISH_WOODS_GREAT_FAIRY] = gExitList_TreeInteriors_MinishWoodsGreatFairy,
+ [ROOM_TREE_INTERIORS_1c] = gExitList_TreeInteriors_1C,
+ [ROOM_TREE_INTERIORS_MINISH_WOODS_BUSINESS_SCRUB] = gExitList_TreeInteriors_MinishWoodsBusinessScrub,
+ [ROOM_TREE_INTERIORS_1e] = gExitList_TreeInteriors_1E,
+ [ROOM_TREE_INTERIORS_UNUSED_HEART_CONTAINER] = gExitList_TreeInteriors_UnusedHeartContainer,
+};
+
+const Transition gExitList_Dojos_Grayblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x20, 0x30, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_TO_GRAYBLADE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Dojos_Swiftblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x2e8, 0x30, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Dojos_Waveblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x58, 0x30, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_WAVEBLADE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Dojos_ToGrimblade[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x48, 0x3a8, 0x168, 0x0, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Dojos_ToSplitblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xf8, 0x358, 0x30, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Dojos_ToGreatblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x1f8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Dojos_ToScarblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x398, 0x48, 0x30, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_Dojos[] = {
+ [ROOM_DOJOS_GRAYBLADE] = gExitList_Dojos_Grayblade,
+ [ROOM_DOJOS_SPLITBLADE] = gExitList_NoExitList,
+ [ROOM_DOJOS_GREATBLADE] = gExitList_NoExitList,
+ [ROOM_DOJOS_SCARBLADE] = gExitList_NoExitList,
+ [ROOM_DOJOS_SWIFTBLADE_I] = gExitList_Dojos_Swiftblade,
+ [ROOM_DOJOS_GRIMBLADE] = gExitList_NoExitList,
+ [ROOM_DOJOS_WAVEBLADE] = gExitList_Dojos_Waveblade,
+ [ROOM_DOJOS_7] = gExitList_NoExitList,
+ [ROOM_DOJOS_8] = gExitList_NoExitList,
+ [ROOM_DOJOS_9] = gExitList_NoExitList,
+ [ROOM_DOJOS_TO_GRIMBLADE] = gExitList_Dojos_ToGrimblade,
+ [ROOM_DOJOS_TO_SPLITBLADE] = gExitList_Dojos_ToSplitblade,
+ [ROOM_DOJOS_TO_GREATBLADE] = gExitList_Dojos_ToGreatblade,
+ [ROOM_DOJOS_TO_SCARBLADE] = gExitList_Dojos_ToScarblade,
+ [ROOM_DOJOS_e] = gExitList_NoExitList,
+ [ROOM_DOJOS_f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_MinishCracks_LonLonRanchNorth[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x232, 0x18, 0x3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_LakeHyliaEast[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2d8, 0x114, 0x3, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_HyruleCastleGarden[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3a8, 0x40, 0x3, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_MtCrenel[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x158, 0x54, 0x3, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_EastHyruleCastle[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3c8, 0x184, 0x3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_5[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_CastorWildsBow[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x28, 0x54, 0x3, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_RuinsEntrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x48, 0x17c, 0x3, AREA_RUINS, ROOM_RUINS_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0,
+ 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_MinishWoodsSouth[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x218, 0x3c4, 0x3, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_CastorWildsNorth[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x44, 0x3, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_CastorWildsWest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x134, 0x3, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_CastorWildsMiddle[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x168, 0x2d4, 0x3, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_RuinsTektite[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x54, 0x3, AREA_RUINS, ROOM_RUINS_TEKTITES, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x0, 0x0,
+ 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_CastorWildsNextToBow[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x18, 0x54, 0x3, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCracks_11[] = {
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MinishCracks[] = {
+ [ROOM_MINISH_CRACKS_LON_LON_RANCH_NORTH] = gExitList_MinishCracks_LonLonRanchNorth,
+ [ROOM_MINISH_CRACKS_LAKE_HYLIA_EAST] = gExitList_MinishCracks_LakeHyliaEast,
+ [ROOM_MINISH_CRACKS_HYRULE_CASTLE_GARDEN] = gExitList_MinishCracks_HyruleCastleGarden,
+ [ROOM_MINISH_CRACKS_MT_CRENEL] = gExitList_MinishCracks_MtCrenel,
+ [ROOM_MINISH_CRACKS_EAST_HYRULE_CASTLE] = gExitList_MinishCracks_EastHyruleCastle,
+ [ROOM_MINISH_CRACKS_5] = gExitList_MinishCracks_5,
+ [ROOM_MINISH_CRACKS_CASTOR_WILDS_BOW] = gExitList_MinishCracks_CastorWildsBow,
+ [ROOM_MINISH_CRACKS_RUINS_ENTRANCE] = gExitList_MinishCracks_RuinsEntrance,
+ [ROOM_MINISH_CRACKS_MINISH_WOODS_SOUTH] = gExitList_MinishCracks_MinishWoodsSouth,
+ [ROOM_MINISH_CRACKS_CASTOR_WILDS_NORTH] = gExitList_MinishCracks_CastorWildsNorth,
+ [ROOM_MINISH_CRACKS_CASTOR_WILDS_WEST] = gExitList_MinishCracks_CastorWildsWest,
+ [ROOM_MINISH_CRACKS_CASTOR_WILDS_MIDDLE] = gExitList_MinishCracks_CastorWildsMiddle,
+ [ROOM_MINISH_CRACKS_RUINS_TEKTITE] = gExitList_MinishCracks_RuinsTektite,
+ [ROOM_MINISH_CRACKS_CASTOR_WILDS_NEXT_TO_BOW] = gExitList_MinishCracks_CastorWildsNextToBow,
+ [ROOM_MINISH_CRACKS_e] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_f] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_10] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_11] = gExitList_MinishCracks_11,
+ [ROOM_MINISH_CRACKS_12] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_13] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_14] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_15] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_16] = gExitList_NoExitList,
+ [ROOM_MINISH_CRACKS_17] = gExitList_NoExitList,
+};
+
+const Transition gExitList_CrenelCaves_BlockPushing[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x328, 0x18, 0x3, AREA_MT_CRENEL, ROOM_MT_CRENEL_TOP, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x128, 0x28, 0x10, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x208, 0x28, 0x20, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x238, 0xb8, 0x38, 0x38, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_BRIDGE_SWITCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_PillarCave[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1d8, 0xc8, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x28, 0xb8, 0x48, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_EXIT_TO_MINES,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_BridgeSwitch[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x238, 0xc8, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x28, 0x238, 0xc8, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_BLOCK_PUSHING,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_ExitToMines[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x188, 0x108, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x38, 0x38, 0x38, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_PILLAR_CAVE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_GripRing[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1e8, 0x1e8, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_FairyFountain[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0x58, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CENTER, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_SpinyChuPuzzle[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2f8, 0x38, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CENTER, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x38, 0x38, 0x38, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_CHUCHU_POT_CHEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_ChuchuPotChest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x348, 0x68, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CENTER, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x28, 0xb8, 0x48, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_SPINY_CHU_PUZZLE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_WaterHeartPiece[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x118, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CENTER, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_RupeeFairyFountain[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x298, 0x38, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_HelmasaurHallway[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x198, 0xe8, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x18, 0xb8, 0x48, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_MUSHROOM_KEESE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_MushroomKeese[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x138, 0x148, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x38, 0x68, 0x28, 0x0, AREA_CRENEL_CAVES, ROOM_CRENEL_CAVES_HELMASAUR_HALLWAY,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_LadderToSpringWater[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2d8, 0x198, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2d8, 0x138, 0x3, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_BombBusinessScrub[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb8, 0x1a8, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_Hermit[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0x68, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_WALL_CLIMB, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_HintScrub[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3b8, 0x178, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CrenelCaves_ToGrayblade[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0xa0, 0x3, AREA_DOJOS, ROOM_DOJOS_GRAYBLADE, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0,
+ 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x208, 0x158, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CrenelCaves[] = {
+ [ROOM_CRENEL_CAVES_BLOCK_PUSHING] = gExitList_CrenelCaves_BlockPushing,
+ [ROOM_CRENEL_CAVES_PILLAR_CAVE] = gExitList_CrenelCaves_PillarCave,
+ [ROOM_CRENEL_CAVES_BRIDGE_SWITCH] = gExitList_CrenelCaves_BridgeSwitch,
+ [ROOM_CRENEL_CAVES_EXIT_TO_MINES] = gExitList_CrenelCaves_ExitToMines,
+ [ROOM_CRENEL_CAVES_GRIP_RING] = gExitList_CrenelCaves_GripRing,
+ [ROOM_CRENEL_CAVES_FAIRY_FOUNTAIN] = gExitList_CrenelCaves_FairyFountain,
+ [ROOM_CRENEL_CAVES_SPINY_CHU_PUZZLE] = gExitList_CrenelCaves_SpinyChuPuzzle,
+ [ROOM_CRENEL_CAVES_CHUCHU_POT_CHEST] = gExitList_CrenelCaves_ChuchuPotChest,
+ [ROOM_CRENEL_CAVES_WATER_HEART_PIECE] = gExitList_CrenelCaves_WaterHeartPiece,
+ [ROOM_CRENEL_CAVES_RUPEE_FAIRY_FOUINTAIN] = gExitList_CrenelCaves_RupeeFairyFountain,
+ [ROOM_CRENEL_CAVES_HELMASAUR_HALLWAY] = gExitList_CrenelCaves_HelmasaurHallway,
+ [ROOM_CRENEL_CAVES_MUSHROOM_KEESE] = gExitList_CrenelCaves_MushroomKeese,
+ [ROOM_CRENEL_CAVES_LADDER_TO_SPRING_WATER] = gExitList_CrenelCaves_LadderToSpringWater,
+ [ROOM_CRENEL_CAVES_BOMB_BUSINESS_SCRUB] = gExitList_CrenelCaves_BombBusinessScrub,
+ [ROOM_CRENEL_CAVES_HERMIT] = gExitList_CrenelCaves_Hermit,
+ [ROOM_CRENEL_CAVES_HINT_SCRUB] = gExitList_CrenelCaves_HintScrub,
+ [ROOM_CRENEL_CAVES_TO_GRAYBLADE] = gExitList_CrenelCaves_ToGrayblade,
+};
+
+const Transition gExitList_CastorCaves_South[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2d8, 0x398, 0x30, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CastorCaves_North[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x248, 0x48, 0x10, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x288, 0x48, 0x20, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CastorCaves_WindRuins[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x48, 0x30, AREA_RUINS, ROOM_RUINS_ENTRANCE, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0,
+ 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CastorCaves_Darknut[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x18, 0x188, 0x28, 0x0, AREA_CASTOR_DARKNUT, ROOM_CASTOR_DARKNUT_HALL, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1a8, 0x1b8, 0x30, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CastorCaves_HeartPiece[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3c8, 0x48, 0x30, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CastorCaves[] = {
+ [ROOM_CASTOR_CAVES_SOUTH] = gExitList_CastorCaves_South,
+ [ROOM_CASTOR_CAVES_NORTH] = gExitList_CastorCaves_North,
+ [ROOM_CASTOR_CAVES_WIND_RUINS] = gExitList_CastorCaves_WindRuins,
+ [ROOM_CASTOR_CAVES_DARKNUT] = gExitList_CastorCaves_Darknut,
+ [ROOM_CASTOR_CAVES_HEART_PIECE] = gExitList_CastorCaves_HeartPiece,
+ [ROOM_CASTOR_CAVES_5] = gExitList_NoExitList,
+ [ROOM_CASTOR_CAVES_6] = gExitList_NoExitList,
+ [ROOM_CASTOR_CAVES_7] = gExitList_NoExitList,
+};
+
+const Transition gExitList_CastorDarknut_Main[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_CastorDarknut_Hall[] = {
+ { WARP_TYPE_AREA, 0x0, 0x188, 0x18, 0x68, 0x28, 0x0, AREA_CASTOR_CAVES, ROOM_CASTOR_CAVES_DARKNUT, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CastorDarknut[] = {
+ [ROOM_CASTOR_DARKNUT_MAIN] = gExitList_CastorDarknut_Main,
+ [ROOM_CASTOR_DARKNUT_HALL] = gExitList_CastorDarknut_Hall,
+ NULL,
+ NULL,
+};
+
+const Transition gExitList_ArmosInteriors_RuinsEntranceNorth[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0xf8, 0x30, AREA_RUINS, ROOM_RUINS_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0,
+ 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_RuinsEntranceSouth[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x1a8, 0x30, AREA_RUINS, ROOM_RUINS_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0,
+ 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_RuinsLeft[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x48, 0x68, 0x30, AREA_RUINS, ROOM_RUINS_BELOW_FORTRESS_ENTRANCE, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_RuinsMiddleLeft[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x68, 0x30, AREA_RUINS, ROOM_RUINS_BELOW_FORTRESS_ENTRANCE, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_RuinsMiddleRight[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0x68, 0x30, AREA_RUINS, ROOM_RUINS_BELOW_FORTRESS_ENTRANCE, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_RuinsRight[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xd8, 0x68, 0x30, AREA_RUINS, ROOM_RUINS_BELOW_FORTRESS_ENTRANCE, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_6[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x108, 0x68, 0x30, AREA_RUINS, ROOM_RUINS_BELOW_FORTRESS_ENTRANCE, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_RuinsGrassPath[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0xa8, 0x30, AREA_RUINS, ROOM_RUINS_FORTRESS_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_8[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x58, 0x30, AREA_RUINS, ROOM_RUINS_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0,
+ 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_FortressOfWindsLeft[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x58, 0x30, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_KEY_LEVER,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_ArmosInteriors_FortressOfWindsRight[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0x58, 0x30, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_KEY_LEVER,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_ArmosInteriors[] = {
+ [ROOM_ARMOS_INTERIORS_RUINS_ENTRANCE_NORTH] = gExitList_ArmosInteriors_RuinsEntranceNorth,
+ [ROOM_ARMOS_INTERIORS_RUINS_ENTRANCE_SOUTH] = gExitList_ArmosInteriors_RuinsEntranceSouth,
+ [ROOM_ARMOS_INTERIORS_RUINS_LEFT] = gExitList_ArmosInteriors_RuinsLeft,
+ [ROOM_ARMOS_INTERIORS_RUINS_MIDDLE_LEFT] = gExitList_ArmosInteriors_RuinsMiddleLeft,
+ [ROOM_ARMOS_INTERIORS_RUINS_MIDDLE_RIGHT] = gExitList_ArmosInteriors_RuinsMiddleRight,
+ [ROOM_ARMOS_INTERIORS_RUINS_RIGHT] = gExitList_ArmosInteriors_RuinsRight,
+ [ROOM_ARMOS_INTERIORS_6] = gExitList_ArmosInteriors_6,
+ [ROOM_ARMOS_INTERIORS_RUINS_GRASS_PATH] = gExitList_ArmosInteriors_RuinsGrassPath,
+ [ROOM_ARMOS_INTERIORS_8] = gExitList_ArmosInteriors_8,
+ [ROOM_ARMOS_INTERIORS_FORTRESS_LEFT] = gExitList_ArmosInteriors_FortressOfWindsLeft,
+ [ROOM_ARMOS_INTERIORS_FORTRESS_RIGHT] = gExitList_ArmosInteriors_FortressOfWindsRight,
+};
+
+const Transition gExitList_TownMinishHoles_MayorsHouse[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x2c, 0x30, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_MAYOR,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TownMinishHoles_WestOracle[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc, 0x38, 0xc, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_WEST_ORACLE,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TownMinishHoles_DrLeft[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0x44, 0x30, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_DR_LEFT,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TownMinishHoles_Carpenter[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc, 0x68, 0xc, AREA_HOUSE_INTERIORS_4, ROOM_HOUSE_INTERIORS_4_CARPENTER,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TownMinishHoles_Cafe[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xcc, 0x48, 0xc0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_CAFE,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TownMinishHoles_LibraryBookshelf[] = {
+ { WARP_TYPE_AREA, 0x0, 0x100, 0xc8, 0x78, 0xc0, 0x0, AREA_TOWN_MINISH_HOLES,
+ ROOM_TOWN_MINISH_HOLES_LIBRARY_BOOKS_HOUSE, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3e, 0x3c, 0x10, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_LIBRARY_2F,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x54, 0x3c, 0x20, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_LIBRARY_2F,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TownMinishHoles_LibrariBookHouse[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xf8, 0xd8, 0x30, AREA_TOWN_MINISH_HOLES, ROOM_TOWN_MINISH_HOLES_LIBRARY_BOOKSHELF,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TownMinishHoles_RemShoeShop[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x74, 0x64, 0x30, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_REM_SHOE_SHOP,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_TownMinishHoles[] = {
+ [ROOM_TOWN_MINISH_HOLES_MAYORS_HOUSE] = gExitList_TownMinishHoles_MayorsHouse,
+ [ROOM_TOWN_MINISH_HOLES_WEST_ORACLE] = gExitList_TownMinishHoles_WestOracle,
+ [ROOM_TOWN_MINISH_HOLES_DR_LEFT] = gExitList_TownMinishHoles_DrLeft,
+ [ROOM_TOWN_MINISH_HOLES_CARPENTER] = gExitList_TownMinishHoles_Carpenter,
+ [ROOM_TOWN_MINISH_HOLES_CAFE] = gExitList_TownMinishHoles_Cafe,
+ [ROOM_TOWN_MINISH_HOLES_5] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_6] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_7] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_8] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_9] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_a] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_b] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_c] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_d] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_e] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_f] = gExitList_NoExitList,
+ [ROOM_TOWN_MINISH_HOLES_LIBRARY_BOOKSHELF] = gExitList_TownMinishHoles_LibraryBookshelf,
+ [ROOM_TOWN_MINISH_HOLES_LIBRARY_BOOKS_HOUSE] = gExitList_TownMinishHoles_LibrariBookHouse,
+ [ROOM_TOWN_MINISH_HOLES_REM_SHOE_SHOP] = gExitList_TownMinishHoles_RemShoeShop,
+ [ROOM_TOWN_MINISH_HOLES_13] = gExitList_NoExitList,
+};
+
+const Transition gExitList_MinishRafters_Cafe[] = {
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x18, 0x48, 0x2c, 0x0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_CAFE,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1bc, 0x2b4, 0xc, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 2, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishRafters_Stockwell[] = {
+ { WARP_TYPE_AREA, 0x0, 0x198, 0x18, 0xac, 0x2c, 0x0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_STOCKWELL_SHOP,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x238, 0x2b4, 0xc0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 2, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishRafters_DrLeft[] = {
+ { WARP_TYPE_AREA, 0x0, 0xe8, 0x18, 0x88, 0x2c, 0x0, AREA_HOUSE_INTERIORS_2, ROOM_HOUSE_INTERIORS_2_DR_LEFT,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishRafters_Bakery[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x18, 0x48, 0x2c, 0x0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_BAKERY,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x148, 0x18, 0x88, 0x2c, 0x0, AREA_HOUSE_INTERIORS_3, ROOM_HOUSE_INTERIORS_3_BAKERY,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MinishRafters[] = {
+ [ROOM_MINISH_RAFTERS_CAFE] = gExitList_MinishRafters_Cafe,
+ [ROOM_MINISH_RAFTERS_STOCKWELL] = gExitList_MinishRafters_Stockwell,
+ [ROOM_MINISH_RAFTERS_DR_LEFT] = gExitList_MinishRafters_DrLeft,
+ [ROOM_MINISH_RAFTERS_BAKERY] = gExitList_MinishRafters_Bakery,
+};
+
+const Transition gExitList_GoronCave_Stairs[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x38, 0x78, 0x278, 0x0, AREA_GORON_CAVE, ROOM_GORON_CAVE_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x368, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_GoronCave_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x288, 0x78, 0x48, 0x0, AREA_GORON_CAVE, ROOM_GORON_CAVE_STAIRS, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_GoronCave[] = {
+ [ROOM_GORON_CAVE_STAIRS] = gExitList_GoronCave_Stairs,
+ [ROOM_GORON_CAVE_MAIN] = gExitList_GoronCave_Main,
+};
+
+const Transition gExitList_WindTribeTower_Entrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xe8, 0xb8, 0xf8, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_FLOOR_1,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1e8, 0x168, 0x30, AREA_CLOUD_TOPS, ROOM_CLOUD_TOPS_CLOUD_TOPS, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_WindTribeTower_Floor2[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0xe8, 0x88, 0xf8, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xe8, 0xb8, 0xf8, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_FLOOR_2,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_WindTribeTower_Floor3[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0xe8, 0x88, 0xf8, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_FLOOR_1,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xe8, 0xb8, 0xf8, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_FLOOR_3,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_WindTribeTower_Floor4[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0xe8, 0x88, 0xf8, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_FLOOR_2,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xe8, 0xb8, 0x148, 0x0, AREA_WIND_TRIBE_TOWER_ROOF, ROOM_WIND_TRIBE_TOWER_ROOF_0,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_WindTribeTower[] = {
+ [ROOM_WIND_TRIBE_TOWER_ENTRANCE] = gExitList_WindTribeTower_Entrance,
+ [ROOM_WIND_TRIBE_TOWER_FLOOR_1] = gExitList_WindTribeTower_Floor2,
+ [ROOM_WIND_TRIBE_TOWER_FLOOR_2] = gExitList_WindTribeTower_Floor3,
+ [ROOM_WIND_TRIBE_TOWER_FLOOR_3] = gExitList_WindTribeTower_Floor4,
+};
+
+const Transition gExitList_WindTribeTowerRoof_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x138, 0x88, 0xf8, 0x0, AREA_WIND_TRIBE_TOWER, ROOM_WIND_TRIBE_TOWER_FLOOR_3,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_WindTribeTowerRoof[] = {
+ [ROOM_WIND_TRIBE_TOWER_ROOF_0] = gExitList_WindTribeTowerRoof_Main,
+};
+
+const Transition gExitList_Caves_Boomerang[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x68, 0x78, 0x38, 0x0, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_NORTHWEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x108, 0x68, 0x78, 0x38, 0x0, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_NORTHEAST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x48, 0xd8, 0x78, 0x38, 0x0, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_SOUTHWEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x108, 0xd8, 0x78, 0x38, 0x0, AREA_TREE_INTERIORS, ROOM_TREE_INTERIORS_BOOMERANG_SOUTHEAST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0xb8, 0x1f8, 0x138, 0x0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_ToGraveyard[] = {
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x38, 0x88, 0xd8, 0x0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0x38, 0x118, 0xd8, 0x0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x138, 0x98, 0x78, 0x48, 0x0, AREA_CAVES, ROOM_CAVES_HEART_PIECE_HALLWAY, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x108, 0x148, 0x20, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_2[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x28, 0x308, 0x98, 0x0, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_3[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_4[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_5[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_TrilbyKeeseChest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x238, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_TrilbyFairyFountain[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x198, 0x2c8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_SouthHyruleFieldFairyFountain[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x118, 0xb8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_A[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_HyruleTownWaterfall[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xf0, 0x198, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_LonLonRanch[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xe8, 0x1c8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb8, 0x138, 0x3, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_TrilbyHighlands[] = {
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x18, 0x98, 0x268, 0x0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x18, 0x118, 0x268, 0x0, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_LonLonRanchWallet[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1f8, 0x218, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_LON_LON_RANCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_SouthHyruleFieldRupee[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x58, 0x128, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_TrilbyRupee[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x2b8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_TRILBY_HIGHLANDS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_TrilbyMittsFairyFountain[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1a8, 0x68, 0x3, AREA_DIG_CAVES, ROOM_DIG_CAVES_TRILBY_HIGHLANDS, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_HillsKeeseChest[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0xa8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_EASTERN_HILLLS_CENTER,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_BottleBusinessScrub[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_HeartPieceHallway[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x38, 0x138, 0x88, 0x0, AREA_CAVES, ROOM_CAVES_TO_GRAVEYARD, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x138, 0x1f8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_NORTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_NorthHyruleFieldFairyFountain[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x58, 0x30, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_NORTH_HYRULE_FIELD_FAIRY_FOUNTAIN, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Caves_KinstoneBusinessScrub[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x58, 0x30, AREA_TREE_INTERIORS,
+ ROOM_TREE_INTERIORS_MINISH_WOODS_BUSINESS_SCRUB, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_Caves[] = {
+ [ROOM_CAVES_BOOMERANG] = gExitList_Caves_Boomerang,
+ [ROOM_CAVES_TO_GRAVEYARD] = gExitList_Caves_ToGraveyard,
+ [ROOM_CAVES_2] = gExitList_Caves_2,
+ [ROOM_CAVES_3] = gExitList_Caves_3,
+ [ROOM_CAVES_4] = gExitList_Caves_4,
+ [ROOM_CAVES_5] = gExitList_Caves_5,
+ [ROOM_CAVES_6] = gExitList_NoExitList,
+ [ROOM_CAVES_TRILBY_KEESE_CHEST] = gExitList_Caves_TrilbyKeeseChest,
+ [ROOM_CAVES_TRILBY_FAIRY_FOUNTAIN] = gExitList_Caves_TrilbyFairyFountain,
+ [ROOM_CAVES_SOUTH_HYRULE_FIELD_FAIRY_FOUNTAIN] = gExitList_Caves_SouthHyruleFieldFairyFountain,
+ [ROOM_CAVES_a] = gExitList_Caves_A,
+ [ROOM_CAVES_HYRULE_TOWN_WATERFALL] = gExitList_Caves_HyruleTownWaterfall,
+ [ROOM_CAVES_LON_LON_RANCH] = gExitList_Caves_LonLonRanch,
+ [ROOM_CAVES_LON_LON_RANCH_SECRET] = gExitList_NoExitList,
+ [ROOM_CAVES_TRILBY_HIGHLANDS] = gExitList_Caves_TrilbyHighlands,
+ [ROOM_CAVES_LON_LON_RANCH_WALLET] = gExitList_Caves_LonLonRanchWallet,
+ [ROOM_CAVES_SOUTH_HYRULE_FIELD_RUPEE] = gExitList_Caves_SouthHyruleFieldRupee,
+ [ROOM_CAVES_TRILBY_RUPEE] = gExitList_Caves_TrilbyRupee,
+ [ROOM_CAVES_TRILBY_MITTS_FAIRY_FOUNTAIN] = gExitList_Caves_TrilbyMittsFairyFountain,
+ [ROOM_CAVES_HILLS_KEESE_CHEST] = gExitList_Caves_HillsKeeseChest,
+ [ROOM_CAVES_BOTTLE_BUSINESS_SCRUB] = gExitList_Caves_BottleBusinessScrub,
+ [ROOM_CAVES_HEART_PIECE_HALLWAY] = gExitList_Caves_HeartPieceHallway,
+ [ROOM_CAVES_NORTH_HYRULE_FIELD_FAIRY_FOUNTAIN] = gExitList_Caves_NorthHyruleFieldFairyFountain,
+ [ROOM_CAVES_KINSTONE_BUSINESS_SCRUB] = gExitList_Caves_KinstoneBusinessScrub,
+};
+
+const Transition gExitList_VeilFallsCaves_Hallway2F[] = {
+ { WARP_TYPE_AREA, 0x0, 0xd8, 0x28, 0x78, 0x28, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0x38, 0x10, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x158, 0x38, 0x20, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_Hallway1F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x18, 0x98, 0x28, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_RUPEE_PATH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x18, 0xd8, 0x38, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x8c, 0x118, 0x58, 0x0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0xe8, 0xc8, 0x58, 0x0, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_Entrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x18, 0x58, 0x28, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_EXIT,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x1f8, 0x30, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_Exit[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x18, 0x128, 0x28, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xd8, 0x1d8, 0x30, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_SecretChest[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x38, 0x98, 0x48, 0x0, AREA_VEIL_FALLS_CAVES,
+ ROOM_VEIL_FALLS_CAVES_HALLWAY_SECRET_STAIRCASE, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_SecretStaircases[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x38, 0x98, 0x48, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_BLOCK_PUZZLE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x98, 0x38, 0x58, 0x48, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_SECRET_CHEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_BlockPuzzle[] = {
+ { WARP_TYPE_AREA, 0x0, 0x98, 0x38, 0x58, 0x48, 0x0, AREA_VEIL_FALLS_CAVES,
+ ROOM_VEIL_FALLS_CAVES_HALLWAY_SECRET_STAIRCASE, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xd8, 0x158, 0x30, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_RupeePath[] = {
+ { WARP_TYPE_AREA, 0x0, 0x98, 0x18, 0x38, 0x28, 0x0, AREA_VEIL_FALLS_CAVES, ROOM_VEIL_FALLS_CAVES_HALLWAY_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0xd8, 0x30, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VeilFallsCaves_HeartPiece[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x38, 0x30, AREA_VEIL_FALLS, ROOM_VEIL_FALLS_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_VeilFallsCaves[] = {
+ [ROOM_VEIL_FALLS_CAVES_HALLWAY_2F] = gExitList_VeilFallsCaves_Hallway2F,
+ [ROOM_VEIL_FALLS_CAVES_HALLWAY_1F] = gExitList_VeilFallsCaves_Hallway1F,
+ [ROOM_VEIL_FALLS_CAVES_HALLWAY_SECRET_ROOM] = gExitList_NoExitList,
+ [ROOM_VEIL_FALLS_CAVES_ENTRANCE] = gExitList_VeilFallsCaves_Entrance,
+ [ROOM_VEIL_FALLS_CAVES_EXIT] = gExitList_VeilFallsCaves_Exit,
+ [ROOM_VEIL_FALLS_CAVES_SECRET_CHEST] = gExitList_VeilFallsCaves_SecretChest,
+ [ROOM_VEIL_FALLS_CAVES_HALLWAY_SECRET_STAIRCASE] = gExitList_VeilFallsCaves_SecretStaircases,
+ [ROOM_VEIL_FALLS_CAVES_HALLWAY_BLOCK_PUZZLE] = gExitList_VeilFallsCaves_BlockPuzzle,
+ [ROOM_VEIL_FALLS_CAVES_HALLWAY_RUPEE_PATH] = gExitList_VeilFallsCaves_RupeePath,
+ [ROOM_VEIL_FALLS_CAVES_HALLWAY_HEART_PIECE] = gExitList_VeilFallsCaves_HeartPiece,
+ [ROOM_VEIL_FALLS_CAVES_a] = gExitList_NoExitList,
+ [ROOM_VEIL_FALLS_CAVES_b] = gExitList_NoExitList,
+ [ROOM_VEIL_FALLS_CAVES_c] = gExitList_NoExitList,
+ [ROOM_VEIL_FALLS_CAVES_d] = gExitList_NoExitList,
+ [ROOM_VEIL_FALLS_CAVES_e] = gExitList_NoExitList,
+ [ROOM_VEIL_FALLS_CAVES_f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_RoyalValleyGraves_HeartPiece[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x58, 0x98, 0x30, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_RoyalValleyGraves_Gina[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x188, 0x98, 0x30, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_RoyalValleyGraves[] = {
+ [ROOM_ROYAL_VALLEY_GRAVES_HEART_PIECE] = gExitList_RoyalValleyGraves_HeartPiece,
+ [ROOM_ROYAL_VALLEY_GRAVES_GINA] = gExitList_RoyalValleyGraves_Gina,
+};
+
+const Transition gExitList_MinishCaves_BeanPesto[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1c8, 0x28, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_ENTRANCE, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCaves_SoutheastWater1[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3b8, 0x308, 0x30, AREA_CASTOR_WILDS, ROOM_CASTOR_WILDS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCaves_Ruins[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x14, 0x30, AREA_RUINS, ROOM_RUINS_LADDER_TO_TEKTITES, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCaves_OutsideLinksHouse[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x178, 0xe8, 0x30, AREA_HYRULE_FIELD, ROOM_HYRULE_FIELD_SOUTH_HYRULE_FIELD,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCaves_MinishWoodsNorth1[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x3b8, 0x48, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCaves_LakeHyliaNorth[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x2b8, 0x68, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCaves_LakeHyliaLibrari[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x38, 0x98, 0x204, 0x0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x378, 0x38, 0x1b8, 0x1c4, 0x0, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_MinishCaves_MinishWoodsSouthwest[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x138, 0x48, 0x224, 0x0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x138, 0x138, 0x68, 0x224, 0x0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x218, 0x138, 0x88, 0x224, 0x0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_MinishCaves[] = {
+ [ROOM_MINISH_CAVES_BEAN_PESTO] = gExitList_MinishCaves_BeanPesto,
+ [ROOM_MINISH_CAVES_SOUTHEAST_WATER_1] = gExitList_MinishCaves_SoutheastWater1,
+ [ROOM_MINISH_CAVES_2] = gExitList_NoExitList,
+ [ROOM_MINISH_CAVES_RUINS] = gExitList_MinishCaves_Ruins,
+ [ROOM_MINISH_CAVES_OUTSIDE_LINKS_HOUSE] = gExitList_MinishCaves_OutsideLinksHouse,
+ [ROOM_MINISH_CAVES_MINISH_WOODS_NORTH_1] = gExitList_MinishCaves_MinishWoodsNorth1,
+ [ROOM_MINISH_CAVES_6] = gExitList_NoExitList,
+ [ROOM_MINISH_CAVES_LAKE_HYLIA_NORTH] = gExitList_MinishCaves_LakeHyliaNorth,
+ [ROOM_MINISH_CAVES_LAKE_HYLIA_LIBRARI] = gExitList_MinishCaves_LakeHyliaLibrari,
+ [ROOM_MINISH_CAVES_MINISH_WOODS_SOUTHWEST] = gExitList_MinishCaves_MinishWoodsSouthwest,
+};
+
+const Transition gExitList_CastleGardenMinishHoles_East[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x308, 0x2c, 0x30, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CastleGardenMinishHoles_West[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xe8, 0x2c, 0x30, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CastleGardenMinishHoles[] = {
+ [ROOM_CASTLE_GARDEN_MINISH_HOLES_0] = gExitList_CastleGardenMinishHoles_East,
+ [ROOM_CASTLE_GARDEN_MINISH_HOLES_1] = gExitList_CastleGardenMinishHoles_West,
+};
+
+const Transition gExitList_37_0[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x308, 0x2c, 0x30, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_37_1[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xe8, 0x2c, 0x30, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_37[] = {
+ [ROOM_37_0] = gExitList_37_0,
+ [ROOM_37_1] = gExitList_37_1,
+};
+
+const Transition gExitList_HyruleTownUnderground_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x288, 0xf8, 0x338, 0x118, 0x0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x168, 0x18, 0x78, 0x38, 0x0, AREA_HOUSE_INTERIORS_1, ROOM_HOUSE_INTERIORS_1_SCHOOL_WEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x48, 0xf8, 0x188, 0x208, 0x0, AREA_HYRULE_DIG_CAVES, ROOM_HYRULE_DIG_CAVES_TOWN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x138, 0x238, 0x88, 0x50, 0x1, AREA_HYRULE_TOWN_UNDERGROUND, ROOM_HYRULE_TOWN_UNDERGROUND_1,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleTownUnderground_Well[] = {
+ { WARP_TYPE_AREA, 0x0, 0x98, 0x50, 0x148, 0x23c, 0x1, AREA_HYRULE_TOWN_UNDERGROUND, ROOM_HYRULE_TOWN_UNDERGROUND_0,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x28, 0x2f8, 0x26c, 0x0, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyruleTownUnderground[] = {
+ [ROOM_HYRULE_TOWN_UNDERGROUND_0] = gExitList_HyruleTownUnderground_Main,
+ [ROOM_HYRULE_TOWN_UNDERGROUND_1] = gExitList_HyruleTownUnderground_Well,
+};
+
+const Transition gExitList_HyruleTownMinishCaves_Entrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x174, 0x196, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleTownMinishCaves_Entrance2[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xe2, 0x58, 0x30, AREA_HYRULE_TOWN, ROOM_HYRULE_TOWN_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyruleTownMinishCaves[] = {
+ gExitList_HyruleTownMinishCaves_Entrance,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+ gExitList_HyruleTownMinishCaves_Entrance2,
+ gExitList_NoExitList,
+ gExitList_NoExitList,
+};
+
+const Transition gExitList_GardenFountains_East[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x88, 0x308, 0x58, 0x0, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_GardenFountains_West[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x88, 0xe8, 0x58, 0x0, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_GardenFountains[] = {
+ [ROOM_GARDEN_FOUNTAINS_EAST] = gExitList_GardenFountains_East,
+ [ROOM_GARDEN_FOUNTAINS_WEST] = gExitList_GardenFountains_West,
+};
+
+const Transition gExitList_GreatFairies_Entrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x188, 0x68, 0x58, 0x0, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_GreatFairies_Exit[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x52, 0x29c, 0xc, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_3, 1, TRANSITION_TYPE_NORMAL,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyruleCastleCellar[] = {
+ [ROOM_HYRULE_CASTLE_CELLAR_0] = gExitList_GreatFairies_Entrance,
+ [ROOM_HYRULE_CASTLE_CELLAR_1] = gExitList_GreatFairies_Exit,
+};
+
+const Transition* const gExitLists_40[] = {
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+ gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList, gExitList_NoExitList,
+};
+
+const Transition gExitList_DeepwoodShrine_StairsToB1[] = {
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x28, 0xc8, 0x38, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_COMPASS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_BluePortal[] = {
+#ifdef EU
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x38, 0x30, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+#endif
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_Map[] = {
+#ifdef EU
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x18, 0xfff, 0xc, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+#endif
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_Button[] = {
+#ifdef EU
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1b8, 0xfff, 0xc0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+#endif
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_Lever[] = {
+#ifdef EU
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x168, 0x3, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+#endif
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_Barrel[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x88, 0x50, 0x38, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_INSIDE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0x88, 0xa0, 0x38, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_INSIDE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x108, 0x50, 0x70, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_INSIDE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0x108, 0xa0, 0x70, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_INSIDE_BARREL,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+#ifdef EU
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0xc8, 0x3, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BLUE_PORTAL,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x28, 0xfff, 0xc, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BUTTON,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x38, 0x30, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_LEVER,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xe8, 0xfff, 0xc0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_MAP, 1,
+ TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+#endif
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_Entrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x68, 0x48, 0x78, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BOSS_DOOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x108, 0x68, 0x108, 0x78, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BOSS_DOOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x64, 0x30, AREA_DEEPWOOD_SHRINE_ENTRY, ROOM_DEEPWOOD_SHRINE_ENTRY_MAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_Compass[] = {
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x28, 0xc8, 0x38, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_STAIRS_TO_B1,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrineBoss_Main[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0x8, 0x30, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_BOSS_DOOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DeepwoodShrine_PreBoss[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0x68, 0x48, 0x78, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x108, 0x68, 0x108, 0x78, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0xd8, 0x3, AREA_DEEPWOOD_SHRINE_BOSS, ROOM_DEEPWOOD_SHRINE_BOSS_MAIN,
+ 1, TRANSITION_TYPE_INSTANT, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_DeepwoodShrine[] = {
+ [ROOM_DEEPWOOD_SHRINE_MADDERPILLAR] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_BLUE_PORTAL] = gExitList_DeepwoodShrine_BluePortal,
+ [ROOM_DEEPWOOD_SHRINE_STAIRS_TO_B1] = gExitList_DeepwoodShrine_StairsToB1,
+ [ROOM_DEEPWOOD_SHRINE_POT_BRIDGE] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_DOUBLE_STATUE] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_MAP] = gExitList_DeepwoodShrine_Map,
+ [ROOM_DEEPWOOD_SHRINE_BARREL] = gExitList_DeepwoodShrine_Barrel,
+ [ROOM_DEEPWOOD_SHRINE_BUTTON] = gExitList_DeepwoodShrine_Button,
+ [ROOM_DEEPWOOD_SHRINE_MULLDOZER] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_PILLARS] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_LEVER] = gExitList_DeepwoodShrine_Lever,
+ [ROOM_DEEPWOOD_SHRINE_ENTRANCE] = gExitList_DeepwoodShrine_Entrance,
+ [ROOM_DEEPWOOD_SHRINE_c] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_d] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_e] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_f] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_TORCHES] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_BOSS_KEY] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_COMPASS] = gExitList_DeepwoodShrine_Compass,
+ [ROOM_DEEPWOOD_SHRINE_13] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_LILY_PAD_WEST] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_LILY_PAD_EAST] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_16] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_BOSS_DOOR] = gExitList_DeepwoodShrine_PreBoss,
+ [ROOM_DEEPWOOD_SHRINE_18] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_19] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_1a] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_1b] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_1c] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_1d] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_1e] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_1f] = gExitList_NoExitList,
+ [ROOM_DEEPWOOD_SHRINE_INSIDE_BARREL] = gExitList_NoExitList,
+};
+
+const Transition* const gExitLists_DeepwoodShrineBoss[] = {
+ [ROOM_DEEPWOOD_SHRINE_BOSS_MAIN] = gExitList_DeepwoodShrineBoss_Main,
+};
+
+const Transition gExitList_DeepwoodShrineEntry_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x58, 0xa8, 0xd8, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x88, 0x1, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1c8, 0x272, 0x30, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1d8, 0x272, 0xc, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1b8, 0x272, 0xc0, AREA_MINISH_WOODS, ROOM_MINISH_WOODS_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_DeepwoodShrineEntry[] = {
+ [ROOM_DEEPWOOD_SHRINE_ENTRY_MAIN] = gExitList_DeepwoodShrineEntry_Main,
+};
+
+const Transition gExitList_CaveOfFlames_AfterCane[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x38, 0x1a8, 0x38, 0x0, AREA_CAVE_OF_FLAMES, ROOM_CAVE_OF_FLAMES_MINISH_SPIKES,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CaveOfFlames_Entrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x68, 0x88, 0x30, AREA_MT_CRENEL, ROOM_MT_CRENEL_CAVERN_OF_FLAMES_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CaveOfFlames_MainCart[] = {
+ { WARP_TYPE_AREA, 0x0, 0x1f8, 0x38, 0x88, 0x28, 0x0, AREA_CAVE_OF_FLAMES, ROOM_CAVE_OF_FLAMES_NORTH_ENTRANCE,
+ 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CaveOfFlames_NorthEntrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x18, 0x1f8, 0x48, 0x0, AREA_CAVE_OF_FLAMES, ROOM_CAVE_OF_FLAMES_MAIN_CART,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CaveOfFlames_MinishSpikes[] = {
+ { WARP_TYPE_AREA, 0x0, 0x1a8, 0x28, 0x88, 0x48, 0x0, AREA_CAVE_OF_FLAMES, ROOM_CAVE_OF_FLAMES_AFTER_CANE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CaveOfFlames_BeforeGleerok[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x28, 0x30, AREA_CAVE_OF_FLAMES, ROOM_CAVE_OF_FLAMES_BOSS_DOOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_CaveOfFlames_BossDoor[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0xc0, 0x1, AREA_CAVE_OF_FLAMES, ROOM_CAVE_OF_FLAMES_BEFORE_GLEEROK,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_CaveOfFlames[] = {
+ [ROOM_CAVE_OF_FLAMES_AFTER_CANE] = gExitList_CaveOfFlames_AfterCane,
+ [ROOM_CAVE_OF_FLAMES_SPINY_CHU] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_CART_TO_SPINY_CHU] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_ENTRANCE] = gExitList_CaveOfFlames_Entrance,
+ [ROOM_CAVE_OF_FLAMES_MAIN_CART] = gExitList_CaveOfFlames_MainCart,
+ [ROOM_CAVE_OF_FLAMES_NORTH_ENTRANCE] = gExitList_CaveOfFlames_NorthEntrance,
+ [ROOM_CAVE_OF_FLAMES_CART_WEST] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_HELMASAUR_FIGHT] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_ROLLOBITE_LAVA_ROOM] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_MINISH_LAVA_ROOM] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_a] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_b] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_c] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_d] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_e] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_f] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_MINISH_SPIKES] = gExitList_CaveOfFlames_MinishSpikes,
+ [ROOM_CAVE_OF_FLAMES_TOMPAS_DOOM] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_BEFORE_GLEEROK] = gExitList_CaveOfFlames_BeforeGleerok,
+ [ROOM_CAVE_OF_FLAMES_BOSSKEY_PATH1] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_BOSSKEY_PATH2] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_COMPASS] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_BOB_OMB_WALL] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_BOSS_DOOR] = gExitList_CaveOfFlames_BossDoor,
+ [ROOM_CAVE_OF_FLAMES_18] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_19] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_1a] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_1b] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_1c] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_1d] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_1e] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_1f] = gExitList_NoExitList,
+ [ROOM_CAVE_OF_FLAMES_20] = gExitList_NoExitList,
+};
+
+const Transition gExitList_FortressOfWinds_BeforeMazaal[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_KEY_LEVER,
+ 1, TRANSITION_TYPE_INSTANT, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_EastKeyLever[] = {
+ { WARP_TYPE_AREA, 0x0, 0x198, 0x198, 0x2e8, 0x38, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1f8, 0x198, 0x338, 0x38, 0x0, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_PitPlatforms[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x68, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_WestKeyLever[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0xc8, 0x3, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_BEFORE_MAZAAL,
+ 1, TRANSITION_TYPE_INSTANT, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1d8, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_3F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_Mazaal[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x18, 0xa0, 0x18c, 0x0, AREA_FORTRESS_OF_WINDS_TOP, ROOM_FORTRESS_OF_WINDS_TOP_MAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_Stalfos[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_EntranceMoleMitts[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0xb0, 0x3, AREA_OUTER_FORTRESS_OF_WINDS,
+ ROOM_OUTER_FORTRESS_OF_WINDS_MOLE_MITTS, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_Main2F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xf8, 0x78, 0x38, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_CENTER_STAIRS_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1d8, 0xa8, 0x30, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_MinishHole[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x68, 0xb0, 0x3, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_SMALL_KEY,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_BossKey[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x338, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_WestStairs2F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x28, 0x68, 0x38, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_EastStairs2F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x28, 0x68, 0x38, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_1F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x288, 0xa8, 0x30, AREA_OUTER_FORTRESS_OF_WINDS, ROOM_OUTER_FORTRESS_OF_WINDS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_WestStairs1F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x28, 0x88, 0x38, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x128, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS,
+ ROOM_OUTER_FORTRESS_OF_WINDS_ENTRANCE_HALL, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_CenterStairs1F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x28, 0x88, 0x108, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_MAIN_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1d8, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS,
+ ROOM_OUTER_FORTRESS_OF_WINDS_ENTRANCE_HALL, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_EastStairs1F[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x28, 0x88, 0x38, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_2F,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x288, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS,
+ ROOM_OUTER_FORTRESS_OF_WINDS_ENTRANCE_HALL, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_Wizzrobe[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x78, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS,
+ ROOM_OUTER_FORTRESS_OF_WINDS_ENTRANCE_HALL, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_FortressOfWinds_HeartPiece[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x338, 0x38, 0x30, AREA_OUTER_FORTRESS_OF_WINDS,
+ ROOM_OUTER_FORTRESS_OF_WINDS_ENTRANCE_HALL, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_FortressOfWinds[] = {
+ [ROOM_FORTRESS_OF_WINDS_DOUBLE_EYEGORE] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_BEFORE_MAZAAL] = gExitList_FortressOfWinds_BeforeMazaal,
+ [ROOM_FORTRESS_OF_WINDS_EAST_KEY_LEVER] = gExitList_FortressOfWinds_EastKeyLever,
+ [ROOM_FORTRESS_OF_WINDS_PIT_PLATFORMS] = gExitList_FortressOfWinds_PitPlatforms,
+ [ROOM_FORTRESS_OF_WINDS_WEST_KEY_LEVER] = gExitList_FortressOfWinds_WestKeyLever,
+ [ROOM_FORTRESS_OF_WINDS_5] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_6] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_7] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_8] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_9] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_a] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_b] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_c] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_d] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_e] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_f] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_DARKNUT_ROOM] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_ARROW_EYE_BRIDGE] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_NORTH_SPLIT_PATH_PIT] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_WALLMASTER_MINISH_PORTAL] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_PILLAR_CLONE_BUTTONS] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_ROTATING_SPIKE_TRAPS] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_MAZAAL] = gExitList_FortressOfWinds_Mazaal,
+ [ROOM_FORTRESS_OF_WINDS_STALFOS] = gExitList_FortressOfWinds_Stalfos,
+ [ROOM_FORTRESS_OF_WINDS_ENTRANCE_MOLE_MITTS] = gExitList_FortressOfWinds_EntranceMoleMitts,
+ [ROOM_FORTRESS_OF_WINDS_MAIN_2F] = gExitList_FortressOfWinds_Main2F,
+ [ROOM_FORTRESS_OF_WINDS_MINISH_HOLE] = gExitList_FortressOfWinds_MinishHole,
+ [ROOM_FORTRESS_OF_WINDS_BOSS_KEY] = gExitList_FortressOfWinds_BossKey,
+ [ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_2F] = gExitList_FortressOfWinds_WestStairs2F,
+ [ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_2F] = gExitList_FortressOfWinds_EastStairs2F,
+ [ROOM_FORTRESS_OF_WINDS_1e] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_1f] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_1F] = gExitList_FortressOfWinds_WestStairs1F,
+ [ROOM_FORTRESS_OF_WINDS_CENTER_STAIRS_1F] = gExitList_FortressOfWinds_CenterStairs1F,
+ [ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_1F] = gExitList_FortressOfWinds_EastStairs1F,
+ [ROOM_FORTRESS_OF_WINDS_WIZZROBE] = gExitList_FortressOfWinds_Wizzrobe,
+ [ROOM_FORTRESS_OF_WINDS_HEART_PIECE] = gExitList_FortressOfWinds_HeartPiece,
+ [ROOM_FORTRESS_OF_WINDS_25] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_26] = gExitList_NoExitList,
+ [ROOM_FORTRESS_OF_WINDS_27] = gExitList_NoExitList,
+};
+
+const Transition gExitList_FortressOfWindsTop_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa0, 0x1a0, 0xb8, 0x28, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_MAZAAL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_FortressOfWindsTop[] = {
+ [ROOM_FORTRESS_OF_WINDS_TOP_MAIN] = gExitList_FortressOfWindsTop_Main,
+};
+
+const Transition gExitList_InnerMazaal_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x11c, 0xb8, 0x5c, 0x0, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_MAZAAL,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_InnerMazaal[] = {
+ [ROOM_INNER_MAZAAL_MAIN] = gExitList_InnerMazaal_Main,
+ [ROOM_INNER_MAZAAL_PHASE_1] = gExitList_InnerMazaal_Main,
+};
+
+const Transition gExitList_TempleOfDroplets_WestHole[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x28, 0x58, 0x38, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_BOSS_KEY,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_EastHole[] = {
+ { WARP_TYPE_AREA, 0x0, 0xd8, 0x28, 0xd8, 0x38, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_NORTH_SMALL_KEY,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_HoleToBlueChuchu[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x208, 0xfff, 0xc0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_ELEMENT,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x28, 0x88, 0x28, 0x0, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_BLUE_CHU_KEY_LEVER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_BigBlueChuchu[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0xb8, 0x3, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_TO_BLUE_CHU,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_BigBlueChuchuKey[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x28, 0xc8, 0x28, 0x0, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_BLUE_CHU_KEY_LEVER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_BossKey[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x28, 0x58, 0x38, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_WEST_HOLE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_NorthSmallKey[] = {
+ { WARP_TYPE_AREA, 0x0, 0xd8, 0x28, 0xd8, 0x38, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_EAST_HOLE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_BlueChuchuKeyLever[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x18, 0xc8, 0x38, 0x0, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_HOLE_TO_BLUE_CHU_KEY, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x18, 0x58, 0x38, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_BLUE_CHU_KEY,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_Entrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_ELEMENT,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_WaterfallNortheast[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x18, 0xfff, 0xc, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_ELEMENT,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_Element[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xf8, 0xfff, 0xc0, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_WATERFALL_NORTHEAST, 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0xfff, 0x4, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_ICE_CORNER,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x8, 0xfff, 0x8, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_HOLE_TO_BLUE_CHU_KEY, 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x178, 0x3, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x28, 0x30, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_BIG_OCTO,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_IceCorner[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x208, 0xfff, 0xc0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_ELEMENT,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_BigOcto[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x178, 0x3, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_ELEMENT,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_NorthwestStairs[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x18, 0x88, 0x28, 0x0, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_BLOCK_CLONE_ICE_BRIDGE, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_ScissorsMiniboss[] = {
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x18, 0xc8, 0x28, 0x0, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_STAIRS_TO_SCISSORS_MINIBOSS, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_WaterfallSouthwest[] = {
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x170, 0x38, 0x18, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_LILYPAD_B2_WEST,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_ToBigBlueChuchu[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x58, 0x58, 0x68, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_COMPASS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x8, 0x30, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_BLUE_CHU,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_BlockCloneIceBridge[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x18, 0x88, 0x28, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_NORTHWEST_STAIRS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_StairsToScissorsMiniboss[] = {
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x18, 0xc8, 0x28, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_SCISSORS_MINIBOSS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_LilypadWestB2[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x38, 0x168, 0x3, AREA_TEMPLE_OF_DROPLETS,
+ ROOM_TEMPLE_OF_DROPLETS_WEST_WATERFALL_SOUTHWEST, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_TempleOfDroplets_CompassRoom[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x58, 0x58, 0x68, 0x0, AREA_TEMPLE_OF_DROPLETS, ROOM_TEMPLE_OF_DROPLETS_TO_BLUE_CHU,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_TempleOfDroplets[] = {
+ [ROOM_TEMPLE_OF_DROPLETS_WEST_HOLE] = gExitList_TempleOfDroplets_WestHole,
+ [ROOM_TEMPLE_OF_DROPLETS_NORTH_SPLIT_ROOM] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_EAST_HOLE] = gExitList_TempleOfDroplets_EastHole,
+ [ROOM_TEMPLE_OF_DROPLETS_ENTRANCE] = gExitList_TempleOfDroplets_Entrance,
+ [ROOM_TEMPLE_OF_DROPLETS_NORTHWEST_STAIRS] = gExitList_TempleOfDroplets_NorthwestStairs,
+ [ROOM_TEMPLE_OF_DROPLETS_SCISSORS_MINIBOSS] = gExitList_TempleOfDroplets_ScissorsMiniboss,
+ [ROOM_TEMPLE_OF_DROPLETS_WATERFALL_NORTHWEST] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_WATERFALL_NORTHEAST] = gExitList_TempleOfDroplets_WaterfallNortheast,
+ [ROOM_TEMPLE_OF_DROPLETS_ELEMENT] = gExitList_TempleOfDroplets_Element,
+ [ROOM_TEMPLE_OF_DROPLETS_ICE_CORNER] = gExitList_TempleOfDroplets_IceCorner,
+ [ROOM_TEMPLE_OF_DROPLETS_ICE_PIT_MAZE] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_HOLE_TO_BLUE_CHU_KEY] = gExitList_TempleOfDroplets_HoleToBlueChuchu,
+ [ROOM_TEMPLE_OF_DROPLETS_WEST_WATERFALL_SOUTHEAST] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_WEST_WATERFALL_SOUTHWEST] = gExitList_TempleOfDroplets_WaterfallSouthwest,
+ [ROOM_TEMPLE_OF_DROPLETS_BIG_OCTO] = gExitList_TempleOfDroplets_BigOcto,
+ [ROOM_TEMPLE_OF_DROPLETS_TO_BLUE_CHU] = gExitList_TempleOfDroplets_ToBigBlueChuchu,
+ [ROOM_TEMPLE_OF_DROPLETS_BLUE_CHU] = gExitList_TempleOfDroplets_BigBlueChuchu,
+ [ROOM_TEMPLE_OF_DROPLETS_BLUE_CHU_KEY] = gExitList_TempleOfDroplets_BigBlueChuchuKey,
+ [ROOM_TEMPLE_OF_DROPLETS_12] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_13] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_14] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_15] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_16] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_17] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_18] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_19] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_1a] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_1b] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_1c] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_1d] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_1e] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_1f] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_BOSS_KEY] = gExitList_TempleOfDroplets_BossKey,
+ [ROOM_TEMPLE_OF_DROPLETS_NORTH_SMALL_KEY] = gExitList_TempleOfDroplets_NorthSmallKey,
+ [ROOM_TEMPLE_OF_DROPLETS_BLOCK_CLONE_BUTTON_PUZZLE] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_BLOCK_CLONE_PUZZLE] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_BLOCK_CLONE_ICE_BRIDGE] = gExitList_TempleOfDroplets_BlockCloneIceBridge,
+ [ROOM_TEMPLE_OF_DROPLETS_STAIRS_TO_SCISSORS_MINIBOSS] = gExitList_TempleOfDroplets_StairsToScissorsMiniboss,
+ [ROOM_TEMPLE_OF_DROPLETS_SPIKE_BAR_FLIPPER_ROOM] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_9_LANTERNS] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_LILYPAD_ICE_BLOCKS] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_29] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_MULLDOZERS_FIRE_BARS] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_DARK_MAZE] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_TWIN_MADDERPILLARS] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_AFTER_TWIN_MADDERPILLARS] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_BLUE_CHU_KEY_LEVER] = gExitList_TempleOfDroplets_BlueChuchuKeyLever,
+ [ROOM_TEMPLE_OF_DROPLETS_MULLDOZER_KEY] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_BEFORE_TWIN_MADDERPILLARS] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_LILYPAD_B2_WEST] = gExitList_TempleOfDroplets_LilypadWestB2,
+ [ROOM_TEMPLE_OF_DROPLETS_COMPASS] = gExitList_TempleOfDroplets_CompassRoom,
+ [ROOM_TEMPLE_OF_DROPLETS_DARK_SCISSOR_BEETLES] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_LILYPAD_B2_MIDDLE] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_ICE_MADDERPILLAR] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_FLAMEBAR_BLOCK_PUZZLE] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_37] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_38] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_39] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_3a] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_3b] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_3c] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_3d] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_3e] = gExitList_NoExitList,
+ [ROOM_TEMPLE_OF_DROPLETS_3f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_61_0[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x58, 0xa8, 0xd8, 0x0, AREA_DEEPWOOD_SHRINE, ROOM_DEEPWOOD_SHRINE_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x118, 0x174, 0x30, AREA_LAKE_HYLIA, ROOM_LAKE_HYLIA_MAIN, 1, TRANSITION_TYPE_INSTANT_MINISH,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_61[] = {
+ [ROOM_NULL_61_0] = gExitList_61_0,
+};
+
+const Transition gExitList_RoyalCrypt_WaterRope[] = {
+ TransitionListEnd,
+};
+const Transition gExitList_RoyalCrypt_Gibdo[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x12e, 0x128, 0x48, 0x0, AREA_ROYAL_CRYPT, ROOM_ROYAL_CRYPT_KEY_BLOCK, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_RoyalCrypt_KeyBlock[] = {
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x38, 0xa8, 0x118, 0x0, AREA_ROYAL_CRYPT, ROOM_ROYAL_CRYPT_GIBDO, 1, TRANSITION_TYPE_NORMAL,
+ 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x128, 0x16e, 0x88, 0x48, 0x0, AREA_ROYAL_CRYPT, ROOM_ROYAL_CRYPT_MUSHROOM_PIT,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_RoyalCrypt_MushroomPit[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x38, 0x128, 0x158, 0x0, AREA_ROYAL_CRYPT, ROOM_ROYAL_CRYPT_KEY_BLOCK, 1,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_RoyalCrypt_Entrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xf0, 0x3c, 0x30, AREA_ROYAL_VALLEY, ROOM_ROYAL_VALLEY_MAIN, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_RoyalCrypt[] = {
+ [ROOM_ROYAL_CRYPT_0] = gExitList_NoExitList,
+ [ROOM_ROYAL_CRYPT_WATER_ROPE] = gExitList_RoyalCrypt_WaterRope,
+ [ROOM_ROYAL_CRYPT_GIBDO] = gExitList_RoyalCrypt_Gibdo,
+ [ROOM_ROYAL_CRYPT_3] = gExitList_NoExitList,
+ [ROOM_ROYAL_CRYPT_KEY_BLOCK] = gExitList_RoyalCrypt_KeyBlock,
+ [ROOM_ROYAL_CRYPT_5] = gExitList_NoExitList,
+ [ROOM_ROYAL_CRYPT_6] = gExitList_NoExitList,
+ [ROOM_ROYAL_CRYPT_MUSHROOM_PIT] = gExitList_RoyalCrypt_MushroomPit,
+ [ROOM_ROYAL_CRYPT_ENTRANCE] = gExitList_RoyalCrypt_Entrance,
+};
+
+const Transition gExitList_PalaceOfWinds_GyorgTornado[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_GYORG_BOSS_DOOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_GyorgBossDoor[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x1c8, 0x3, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_GYORG_TORNADO,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_BallAndChainSoldiers[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_HOLE_TO_DARKNUT,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_BombarossaPath[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_TO_BOMBAROSSA_PATH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_HoleToDarknut[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x128, 0x3, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BALL_AND_CHAIN_SOLDIERS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_ToBombarossaPath[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x88, 0x3, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BOMBAROSSA_PATH,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x18, 0xfff, 0xc, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BOMB_WALL_OUTSIDE,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_BombWallInside[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x18, 0xfff, 0xc, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BOMB_WALL_OUTSIDE,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x38, 0x218, 0xe8, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_RED_WARP_HALL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_BombWallOutside[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0xfff, 0x40, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_TO_BOMBAROSSA_PATH,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xc8, 0xfff, 0x80, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BOMB_WALL_INSIDE,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_BlockMazeToBossDoor[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_RED_WARP_HALL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_HeartPieceBridge[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_RED_WARP_HALL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_RedWarpHall[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x88, 0x1, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_HEART_PIECE_BRIDGE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x1c8, 0x2, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BLOCK_MAZE_TO_BOSS_DOOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0xd8, 0xb8, 0x48, 0x0, AREA_PALACE_OF_WINDS,
+ ROOM_PALACE_OF_WINDS_STAIRS_AFTER_FLOORMASTER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x218, 0xd8, 0x38, 0x48, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BOMB_WALL_INSIDE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_PitCornerAfterKey[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xd8, 0xfff, 0xc0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_KEY_ARROW_BUTTON,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_PotPush[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x78, 0x1, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_KEY_ARROW_BUTTON,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_StairsAfterFloormaster[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x38, 0xb8, 0xe8, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_RED_WARP_HALL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_KeyArrowButton[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x10, 0xfff, 0xc, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_PIT_CORNER_AFTER_KEY,
+ 1, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x28, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_POT_PUSH,
+ 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x38, 0x38, 0x48, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_GIBDO_STAIRS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_PeahatSwitch[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x88, 0x3, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_TO_PEAHAT_SWITCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_WhirlwindBombarossa[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x88, 0x3, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_GIBDO_STAIRS,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_ToPeahatSwitch[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_PEAHAT_SWITCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x38, 0xb8, 0xe8, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_DARK_COMPASS_HALL,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_GibdoStairs[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xfff, 0x18, 0x30, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_WHIRLWIND_BOMBAROSSA,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x38, 0x38, 0x48, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_KEY_ARROW_BUTTON,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_BridgeAfterDarknut[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x18, 0x168, 0x118, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_DARK_COMPASS_HALL,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_PalaceOfWinds_DarkCompassHall[] = {
+ { WARP_TYPE_AREA, 0x0, 0x168, 0x130, 0x78, 0x28, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_BRIDGE_AFTER_DARKNUT,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0xd8, 0xb8, 0x48, 0x0, AREA_PALACE_OF_WINDS, ROOM_PALACE_OF_WINDS_TO_PEAHAT_SWITCH,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_PalaceOfWinds[] = {
+ [ROOM_PALACE_OF_WINDS_GYORG_TORNADO] = gExitList_PalaceOfWinds_GyorgTornado,
+ [ROOM_PALACE_OF_WINDS_BOSS_KEY] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_BEFORE_BALL_AND_CHAIN_SOLDIERS] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_GYORG_BOSS_DOOR] = gExitList_PalaceOfWinds_GyorgBossDoor,
+ [ROOM_PALACE_OF_WINDS_EAST_CHEST_FROM_GYORG_BOSS_DOOR] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_MOBLIN_AND_WIZZROBE_FIGHT] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_FOUR_BUTTON_STALFOS] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_FAN_AND_KEY_TO_BOSS_KEY] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_BALL_AND_CHAIN_SOLDIERS] = gExitList_PalaceOfWinds_BallAndChainSoldiers,
+ [ROOM_PALACE_OF_WINDS_BOMBAROSSA_PATH] = gExitList_PalaceOfWinds_BombarossaPath,
+ [ROOM_PALACE_OF_WINDS_HOLE_TO_DARKNUT] = gExitList_PalaceOfWinds_HoleToDarknut,
+ [ROOM_PALACE_OF_WINDS_TO_BOMBAROSSA_PATH] = gExitList_PalaceOfWinds_ToBombarossaPath,
+ [ROOM_PALACE_OF_WINDS_DARKNUT_MINIBOSS] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_BOMB_WALL_INSIDE] = gExitList_PalaceOfWinds_BombWallInside,
+ [ROOM_PALACE_OF_WINDS_BOMB_WALL_OUTSIDE] = gExitList_PalaceOfWinds_BombWallOutside,
+ [ROOM_PALACE_OF_WINDS_CLOUD_JUMPS] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_BLOCK_MAZE_TO_BOSS_DOOR] = gExitList_PalaceOfWinds_BlockMazeToBossDoor,
+ [ROOM_PALACE_OF_WINDS_CRACKED_FLOOR_LAKITU] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_HEART_PIECE_BRIDGE] = gExitList_PalaceOfWinds_HeartPieceBridge,
+ [ROOM_PALACE_OF_WINDS_FAN_BRIDGE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_TO_FAN_BRIDGE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_RED_WARP_HALL] = gExitList_PalaceOfWinds_RedWarpHall,
+ [ROOM_PALACE_OF_WINDS_PLATFORM_CLONE_RIDE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_PIT_CORNER_AFTER_KEY] = gExitList_PalaceOfWinds_PitCornerAfterKey,
+ [ROOM_PALACE_OF_WINDS_PLATFORM_CROW_RIDE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_GRATE_PLATFORM_RIDE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_POT_PUSH] = gExitList_PalaceOfWinds_PotPush,
+ [ROOM_PALACE_OF_WINDS_FLOORMASTER_LEVER] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_MAP] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_CORNER_TO_MAP] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_STAIRS_AFTER_FLOORMASTER] = gExitList_PalaceOfWinds_StairsAfterFloormaster,
+ [ROOM_PALACE_OF_WINDS_HOLE_TO_KINSTONE_WIZZROBE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_KEY_ARROW_BUTTON] = gExitList_PalaceOfWinds_KeyArrowButton,
+ [ROOM_PALACE_OF_WINDS_GRATES_TO_3F] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_SPINY_FIGHT] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_PEAHAT_SWITCH] = gExitList_PalaceOfWinds_PeahatSwitch,
+ [ROOM_PALACE_OF_WINDS_WHIRLWIND_BOMBAROSSA] = gExitList_PalaceOfWinds_WhirlwindBombarossa,
+ [ROOM_PALACE_OF_WINDS_DOOR_TO_STALFOS_FIREBAR] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_STALFOS_FIREBAR_HOLE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_SHORTCUT_DOOR_BUTTONS] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_TO_PEAHAT_SWITCH] = gExitList_PalaceOfWinds_ToPeahatSwitch,
+ [ROOM_PALACE_OF_WINDS_KINSTONE_WIZZROBE_FIGHT] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_GIBDO_STAIRS] = gExitList_PalaceOfWinds_GibdoStairs,
+ [ROOM_PALACE_OF_WINDS_SPIKE_BAR_SMALL_KEY] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_ROC_CAPE] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_FIRE_BAR_GRATES] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_PLATFORM_RIDE_BOMBAROSSAS] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_BRIDGE_AFTER_DARKNUT] = gExitList_PalaceOfWinds_BridgeAfterDarknut,
+ [ROOM_PALACE_OF_WINDS_BRIDGE_SWITCHES_CLONE_BLOCK] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_ENTRANCE_ROOM] = gExitList_NoExitList,
+ [ROOM_PALACE_OF_WINDS_DARK_COMPASS_HALL] = gExitList_PalaceOfWinds_DarkCompassHall,
+ [ROOM_PALACE_OF_WINDS_33] = gExitList_NoExitList,
+};
+
+const Transition gExitList_Unused1[] = {
+ TransitionListEnd,
+};
+
+const Transition gExitList_DarkHyruleCastle_1FEntrance[] = {
+ { WARP_TYPE_AREA, 0x0, 0x108, 0xd8, 0x108, 0xe8, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B1_MAP,
+ 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x228, 0xd8, 0x228, 0xe8, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B1_MAP,
+ 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x198, 0x220, 0x1f8, 0x38, 0x2, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_3FTopLeftTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x38, 0x68, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_TOWER,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_3FTopRightTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x38, 0x68, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_3FBottomLeftTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x38, 0x68, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_3FBottomRightTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x38, 0x68, 0x118, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_3FKeatonHallToVaati[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xa8, 0xe8, 0x3, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_3F_TRIPLE_DARKNUT,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x190, 0x88, 0x28, 0x0, AREA_DARK_HYRULE_CASTLE_BRIDGE,
+ ROOM_DARK_HYRULE_CASTLE_BRIDGE_MAIN, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_3FTripleDarknut[] = {
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x28, 0x78, 0x168, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_ZELDA_STATUE_PLATFORM, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb8, 0x18, 0x30, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_3F_KEATON_HALL_TO_VAATI, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FTopLeftTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x38, 0xa8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_3F_TOP_LEFT_TOWER,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x38, 0x68, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_1F_TOP_LEFT_TOWER,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xc0, 0x88, 0xd8, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_NORTHWEST, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FTopRightTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x38, 0xa8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_3F_TOP_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x38, 0x68, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_1F_TOP_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xc0, 0x88, 0xd8, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_NORTHEAST, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FRight[] = {
+ { WARP_TYPE_AREA, 0x0, 0xf0, 0x5c, 0x44, 0x5e, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_EAST, 2, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xf0, 0xec, 0x44, 0xee, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_EAST, 2, TRANSITION_TYPE_NORMAL, 0x2, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FBossDoor[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x118, 0x3, AREA_DARK_HYRULE_CASTLE_BRIDGE, ROOM_DARK_HYRULE_CASTLE_BRIDGE_MAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FEntrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x198, 0xd8, 0x30, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_SOUTH, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FBottomLeftTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x38, 0xa8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_3F_BOTTOM_LEFT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x38, 0x68, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_1F_BOTTOM_LEFT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xc0, 0x78, 0xe8, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_SOUTHWEST, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FBottomLeftGhini[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0xd8, 0x30, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_SOUTH, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_B1Entrance[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x188, 0x3, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_GARDEN, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_2FBottomRightTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x108, 0xa8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_3F_BOTTOM_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0xa8, 0x108, 0x68, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_1F_BOTTOM_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x190, 0x88, 0x288, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_SOUTHEAST, 2, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_1FTopLeftTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x38, 0xa8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_TOWER,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_1FThroneRoom[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x48, 0x88, 0x38, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B1_BELOW_THRONE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_1FCompass[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x38, 0xb8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B1_BELOW_COMPASS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_1FTopRightTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x38, 0xa8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_1FBeforeThrone[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x68, 0x88, 0x78, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B1_BEFORE_THRONE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_1FBottomLeftTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x38, 0xa8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_1FBottomRightTower[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x38, 0xa8, 0x118, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_B1BelowThrone[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x48, 0x88, 0x58, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_1F_THRONE_ROOM,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_B1BelowCompass[] = {
+ { WARP_TYPE_AREA, 0x0, 0xb8, 0x38, 0xb8, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_1F_COMPASS,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_B1BeforeThrone[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x68, 0x88, 0x58, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_1F_BEFORE_THRONE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_B1ToPrison[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x28, 0x58, 0x28, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B2_TO_PRISON,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_B1Map[] = {
+ { WARP_TYPE_AREA, 0x0, 0x108, 0xd8, 0x108, 0xe8, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_1F_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x228, 0xd8, 0x228, 0xe8, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_1F_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastle_B2ToPrison[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x18, 0x58, 0x38, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B1_TO_PRISON,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_DarkHyruleCastle[] = {
+ [ROOM_DARK_HYRULE_CASTLE_1F_ENTRANCE] = gExitList_DarkHyruleCastle_1FEntrance,
+ [ROOM_DARK_HYRULE_CASTLE_3F_TOP_LEFT_TOWER] = gExitList_DarkHyruleCastle_3FTopLeftTower,
+ [ROOM_DARK_HYRULE_CASTLE_3F_TOP_RIGHT_TOWER] = gExitList_DarkHyruleCastle_3FTopRightTower,
+ [ROOM_DARK_HYRULE_CASTLE_3F_BOTTOM_LEFT_TOWER] = gExitList_DarkHyruleCastle_3FBottomLeftTower,
+ [ROOM_DARK_HYRULE_CASTLE_3F_BOTTOM_RIGHT_TOWER] = gExitList_DarkHyruleCastle_3FBottomRightTower,
+ [ROOM_DARK_HYRULE_CASTLE_3F_KEATON_HALL_TO_VAATI] = gExitList_DarkHyruleCastle_3FKeatonHallToVaati,
+ [ROOM_DARK_HYRULE_CASTLE_3F_TRIPLE_DARKNUT] = gExitList_DarkHyruleCastle_3FTripleDarknut,
+ [ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_TOWER] = gExitList_DarkHyruleCastle_2FTopLeftTower,
+ [ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_CORNER] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOSS_KEY] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BLUE_WARP] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_CORNER_GHINI] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_CORNER_TORCHES] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_TOWER] = gExitList_DarkHyruleCastle_2FTopRightTower,
+ [ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_DARKNUT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_SPARKS] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_DARKNUTS] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_LEFT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_RIGHT] = gExitList_DarkHyruleCastle_2FRight,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_DARKNUTS] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOSS_DOOR] = gExitList_DarkHyruleCastle_2FBossDoor,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_DARKNUT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_CORNER_PUZZLE] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_ENTRANCE] = gExitList_DarkHyruleCastle_2FEntrance,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_CORNER] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_TOWER] = gExitList_DarkHyruleCastle_2FBottomLeftTower,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_GHINI] = gExitList_DarkHyruleCastle_2FBottomLeftGhini,
+ [ROOM_DARK_HYRULE_CASTLE_1b] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B1_ENTRANCE] = gExitList_DarkHyruleCastle_B1Entrance,
+ [ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_TOWER] = gExitList_DarkHyruleCastle_2FBottomRightTower,
+ [ROOM_DARK_HYRULE_CASTLE_1F_TOP_LEFT_TOWER] = gExitList_DarkHyruleCastle_1FTopLeftTower,
+ [ROOM_DARK_HYRULE_CASTLE_1F_THRONE_ROOM] = gExitList_DarkHyruleCastle_1FThroneRoom,
+ [ROOM_DARK_HYRULE_CASTLE_1F_COMPASS] = gExitList_DarkHyruleCastle_1FCompass,
+ [ROOM_DARK_HYRULE_CASTLE_1F_TOP_RIGHT_TOWER] = gExitList_DarkHyruleCastle_1FTopRightTower,
+ [ROOM_DARK_HYRULE_CASTLE_1F_BEFORE_THRONE] = gExitList_DarkHyruleCastle_1FBeforeThrone,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_TOP_LEFT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_TOP] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_TOP_RIGHT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_LEFT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_RIGHT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_BOTTOM_LEFT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_BOTTOM] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_LOOP_BOTTOM_RIGHT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_1F_BOTTOM_LEFT_TOWER] = gExitList_DarkHyruleCastle_1FBottomLeftTower,
+ [ROOM_DARK_HYRULE_CASTLE_1F_BOTTOM_RIGHT_TOWER] = gExitList_DarkHyruleCastle_1FBottomRightTower,
+ [ROOM_DARK_HYRULE_CASTLE_B1_BELOW_THRONE] = gExitList_DarkHyruleCastle_B1BelowThrone,
+ [ROOM_DARK_HYRULE_CASTLE_B1_BELOW_COMPASS] = gExitList_DarkHyruleCastle_B1BelowCompass,
+ [ROOM_DARK_HYRULE_CASTLE_B1_BEFORE_THRONE] = gExitList_DarkHyruleCastle_B1BeforeThrone,
+ [ROOM_DARK_HYRULE_CASTLE_B1_TO_PRISON] = gExitList_DarkHyruleCastle_B1ToPrison,
+ [ROOM_DARK_HYRULE_CASTLE_B1_BOMB_WALL] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B1_KEATONS] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B1_TO_PRISON_FIREBAR] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B1_CANNONS] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B1_LEFT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B1_RIGHT] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B1_MAP] = gExitList_DarkHyruleCastle_B1Map,
+ [ROOM_DARK_HYRULE_CASTLE_B2_TO_PRISON] = gExitList_DarkHyruleCastle_B2ToPrison,
+ [ROOM_DARK_HYRULE_CASTLE_B2_PRISON] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_B2_DROPDOWN] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_3b] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_3c] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_3d] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_3e] = gExitList_NoExitList,
+ [ROOM_DARK_HYRULE_CASTLE_3f] = gExitList_NoExitList,
+};
+
+const Transition gExitList_Unused2[] = {
+ TransitionListEnd,
+};
+
+const Transition gExitList_DarkHyruleCastleOutside_ZeldaStatuePlatform[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0x178, 0xa8, 0x38, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_3F_TRIPLE_DARKNUT, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastleOutside_Garden[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x38, 0xc8, 0x1e8, 0x0, AREA_SANCTUARY, ROOM_SANCTUARY_HALL, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x18, 0x30, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_B1_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastleOutside_OutsideNorthwest[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xc8, 0x88, 0xa8, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_TOWER,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastleOutside_OutsideNortheast[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xc8, 0x88, 0xb0, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastleOutside_OutsideEast[] = {
+ { WARP_TYPE_AREA, 0x0, 0x38, 0x5c, 0xde, 0x5e, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_RIGHT,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x38, 0xec, 0xde, 0xee, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_RIGHT,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastleOutside_OutsideSouthwest[] = {
+ { WARP_TYPE_AREA, 0x0, 0x78, 0xd8, 0x88, 0xb0, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastleOutside_OutsideSouth[] = {
+ { WARP_TYPE_AREA, 0x0, 0x198, 0xc8, 0x88, 0x170, 0x0, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_ENTRANCE,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0xc8, 0x88, 0xa0, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_GHINI, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_DarkHyruleCastleOutside_OutsideSoutheast[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x278, 0x88, 0x178, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_TOWER, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_DarkHyruleCastleOutside[] = {
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_ZELDA_STATUE_PLATFORM] = gExitList_DarkHyruleCastleOutside_ZeldaStatuePlatform,
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_GARDEN] = gExitList_DarkHyruleCastleOutside_Garden,
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_NORTHWEST] = gExitList_DarkHyruleCastleOutside_OutsideNorthwest,
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_NORTHEAST] = gExitList_DarkHyruleCastleOutside_OutsideNortheast,
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_EAST] = gExitList_DarkHyruleCastleOutside_OutsideEast,
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_SOUTHWEST] = gExitList_DarkHyruleCastleOutside_OutsideSouthwest,
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_SOUTH] = gExitList_DarkHyruleCastleOutside_OutsideSouth,
+ [ROOM_DARK_HYRULE_CASTLE_OUTSIDE_SOUTHEAST] = gExitList_DarkHyruleCastleOutside_OutsideSoutheast,
+};
+
+const Transition gExitList_VaatisArms_First[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb0, 0x88, 0x30, AREA_VAATI_3, ROOM_VAATI_3_0, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0,
+ 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_VaatisArms_Second[] = {
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xb0, 0x88, 0x30, AREA_VAATI_3, ROOM_VAATI_3_0, 1, TRANSITION_TYPE_INSTANT_MINISH, 0x4, 0x0, 0x0,
+ 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_VaatisArms[] = {
+ [ROOM_VAATIS_ARMS_FIRST] = gExitList_VaatisArms_First,
+ [ROOM_VAATIS_ARMS_SECOND] = gExitList_VaatisArms_Second,
+};
+
+const Transition gExitList_DarkHyruleCastleBridge_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x18, 0xa8, 0x178, 0x0, AREA_DARK_HYRULE_CASTLE,
+ ROOM_DARK_HYRULE_CASTLE_3F_KEATON_HALL_TO_VAATI, 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x88, 0x28, 0x30, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_BOSS_DOOR,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_DarkHyruleCastleBridge[] = {
+ [ROOM_DARK_HYRULE_CASTLE_BRIDGE_MAIN] = gExitList_DarkHyruleCastleBridge_Main,
+};
+
+const Transition gExitList_HyruleCastle_0[] = {
+ { WARP_TYPE_AREA, 0x0, 0x48, 0xd8, 0x88, 0x288, 0x0, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_3, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x1f8, 0x38, 0x30, AREA_CASTLE_GARDEN, ROOM_CASTLE_GARDEN_MAIN, 1,
+ TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleCastle_1[] = {
+ { WARP_TYPE_AREA, 0x0, 0x58, 0x28, 0x68, 0x28, 0x0, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_3, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x198, 0x28, 0x1c8, 0x28, 0x0, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_3, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_HyruleCastle_3[] = {
+ { WARP_TYPE_AREA, 0x0, 0x68, 0x18, 0x58, 0x38, 0x0, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_1, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x1c8, 0x18, 0x198, 0x38, 0x0, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_1, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x278, 0x48, 0xe8, 0x0, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_0, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_AREA, 0x0, 0x118, 0x1c8, 0x88, 0x180, 0x0, AREA_SANCTUARY_ENTRANCE, ROOM_SANCTUARY_ENTRANCE_MAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0xd2, 0x5c, 0xc0, AREA_HYRULE_CASTLE_CELLAR, ROOM_HYRULE_CASTLE_CELLAR_1,
+ 1, TRANSITION_TYPE_NORMAL, 0x6, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_HyruleCastle[] = {
+ [ROOM_HYRULE_CASTLE_0] = gExitList_HyruleCastle_0,
+ [ROOM_HYRULE_CASTLE_1] = gExitList_HyruleCastle_1,
+ [ROOM_HYRULE_CASTLE_2] = gExitList_NoExitList,
+ [ROOM_HYRULE_CASTLE_3] = gExitList_HyruleCastle_3,
+ [ROOM_HYRULE_CASTLE_4] = gExitList_NoExitList,
+ [ROOM_HYRULE_CASTLE_5] = gExitList_NoExitList,
+ [ROOM_HYRULE_CASTLE_6] = gExitList_NoExitList,
+ [ROOM_HYRULE_CASTLE_7] = gExitList_NoExitList,
+};
+
+const Transition gExitList_SanctuaryEntrance_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0x88, 0x38, 0xc8, 0x1e8, 0x0, AREA_SANCTUARY, ROOM_SANCTUARY_HALL, 1, TRANSITION_TYPE_NORMAL, 0x0,
+ 0x0, 0x0, 0x0, 0x0 },
+ { WARP_TYPE_BORDER, 0x0, 0x0, 0x0, 0x118, 0x1e8, 0x30, AREA_HYRULE_CASTLE, ROOM_HYRULE_CASTLE_3, 1, TRANSITION_TYPE_NORMAL,
+ 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_SanctuaryEntrance[] = {
+ [ROOM_SANCTUARY_ENTRANCE_MAIN] = gExitList_SanctuaryEntrance_Main,
+};
+
+const Transition gExitList_Sanctuary_Hall[] = {
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x1fc, 0x88, 0x48, 0x0, AREA_SANCTUARY_ENTRANCE, ROOM_SANCTUARY_ENTRANCE_MAIN,
+ 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gUnk_0813A76C[] = {
+ { WARP_TYPE_AREA, 0x0, 0xc8, 0x1fc, 0x88, 0x48, 0x0, AREA_DARK_HYRULE_CASTLE_OUTSIDE,
+ ROOM_DARK_HYRULE_CASTLE_OUTSIDE_GARDEN, 1, TRANSITION_TYPE_NORMAL, 0x4, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Sanctuary_Main[] = {
+ { WARP_TYPE_AREA, 0x0, 0xe8, 0x28, 0x98, 0x130, 0x0, AREA_SANCTUARY, ROOM_SANCTUARY_STAINED_GLASS, 2,
+ TRANSITION_TYPE_NORMAL, 0x0, 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition gExitList_Sanctuary_StainedGlass[] = {
+ { WARP_TYPE_AREA, 0x0, 0x98, 0x140, 0xe8, 0x38, 0x0, AREA_SANCTUARY, ROOM_SANCTUARY_MAIN, 2, TRANSITION_TYPE_NORMAL, 0x4,
+ 0x0, 0x0, 0x0, 0x0 },
+ TransitionListEnd,
+};
+const Transition* const gExitLists_Sanctuary[] = {
+ [ROOM_SANCTUARY_HALL] = gExitList_Sanctuary_Hall,
+ [ROOM_SANCTUARY_MAIN] = gExitList_Sanctuary_Main,
+ [ROOM_SANCTUARY_STAINED_GLASS] = gExitList_Sanctuary_StainedGlass,
+};
+
+const Transition* const* const gExitLists[] = {
+ /*AREA_MINISH_WOODS*/ gExitLists_MinishWoods,
+ /*AREA_MINISH_VILLAGE*/ gExitLists_MinishVillage,
+ /*AREA_HYRULE_TOWN*/ gExitLists_HyruleTown,
+ /*AREA_HYRULE_FIELD*/ gExitLists_HyruleField,
+ /*AREA_CASTOR_WILDS*/ gExitLists_CastorWilds,
+ /*AREA_RUINS*/ gExitLists_Ruins,
+ /*AREA_MT_CRENEL*/ gExitLists_MtCrenel,
+ /*AREA_CASTLE_GARDEN*/ gExitLists_CastleGarden,
+ /*AREA_CLOUD_TOPS*/ gExitLists_CloudTops,
+ /*AREA_ROYAL_VALLEY*/ gExitLists_RoyalValley,
+ /*AREA_VEIL_FALLS*/ gExitLists_VeilFalls,
+ /*AREA_LAKE_HYLIA*/ gExitLists_LakeHylia,
+ /*AREA_LAKE_WOODS_CAVE*/ gExitLists_LakeWoodsCave,
+ /*AREA_BEANSTALKS*/ gExitLists_Beanstalks,
+ /*AREA_EMPTY*/ gExitLists_NoExit,
+ /*AREA_HYRULE_DIG_CAVES*/ gExitLists_HyruleDigCaves,
+ /*AREA_MELARIS_MINE*/ gExitLists_MelarisMine,
+ /*AREA_MINISH_PATHS*/ gExitLists_MinishPaths,
+ /*AREA_CRENEL_MINISH_PATHS*/ gExitLists_CrenelMinishPaths,
+ /*AREA_DIG_CAVES*/ gExitLists_DigCaves1,
+ /*AREA_CRENEL_DIG_CAVE*/ gExitLists_NoExit,
+ /*AREA_FESTIVAL_TOWN*/ gExitLists_FestivalTown,
+ /*AREA_VEIL_FALLS_DIG_CAVE*/ gExitLists_NoExit,
+ /*AREA_CASTOR_WILDS_DIG_CAVE*/ gExitLists_NoExit,
+ /*AREA_OUTER_FORTRESS_OF_WINDS*/ gExitLists_OuterFortressOfWinds,
+ /*AREA_HYLIA_DIG_CAVES*/ gExitLists_HyliaDigCaves,
+ /*AREA_VEIL_FALLS_TOP*/ gExitLists_VeilFallsTop,
+ /*AREA_NULL_1B*/ gExitLists_NoExit,
+ /*AREA_NULL_1C*/ gExitLists_NoExit,
+ /*AREA_NULL_1D*/ gExitLists_NoExit,
+ /*AREA_NULL_1E*/ gExitLists_NoExit,
+ /*AREA_NULL_1F*/ gExitLists_NoExit,
+ /*AREA_MINISH_HOUSE_INTERIORS*/ gExitLists_MinishHouseInteriors,
+ /*AREA_HOUSE_INTERIORS_1*/ gExitLists_HouseInteriors1,
+ /*AREA_HOUSE_INTERIORS_2*/ gExitLists_HouseInteriors2,
+ /*AREA_HOUSE_INTERIORS_3*/ gExitLists_HouseInteriors3,
+ /*AREA_TREE_INTERIORS*/ gExitLists_TreeInteriors,
+ /*AREA_DOJOS*/ gExitLists_Dojos,
+ /*AREA_CRENEL_CAVES*/ gExitLists_CrenelCaves,
+ /*AREA_MINISH_CRACKS*/ gExitLists_MinishCracks,
+ /*AREA_HOUSE_INTERIORS_4*/ gExitLists_HouseInteriors4,
+ /*AREA_GREAT_FAIRIES*/ gExitLists_GreatFairies,
+ /*AREA_CASTOR_CAVES*/ gExitLists_CastorCaves,
+ /*AREA_CASTOR_DARKNUT*/ gExitLists_CastorDarknut,
+ /*AREA_ARMOS_INTERIORS*/ gExitLists_ArmosInteriors,
+ /*AREA_TOWN_MINISH_HOLES*/ gExitLists_TownMinishHoles,
+ /*AREA_MINISH_RAFTERS*/ gExitLists_MinishRafters,
+ /*AREA_GORON_CAVE*/ gExitLists_GoronCave,
+ /*AREA_WIND_TRIBE_TOWER*/ gExitLists_WindTribeTower,
+ /*AREA_WIND_TRIBE_TOWER_ROOF*/ gExitLists_WindTribeTowerRoof,
+ /*AREA_CAVES*/ gExitLists_Caves,
+ /*AREA_VEIL_FALLS_CAVES*/ gExitLists_VeilFallsCaves,
+ /*AREA_ROYAL_VALLEY_GRAVES*/ gExitLists_RoyalValleyGraves,
+ /*AREA_MINISH_CAVES*/ gExitLists_MinishCaves,
+ /*AREA_CASTLE_GARDEN_MINISH_HOLES*/ gExitLists_CastleGardenMinishHoles,
+ /*AREA_37*/ gExitLists_37,
+ /*AREA_EZLO_CUTSCENE*/ gExitLists_NoExit,
+ /*AREA_NULL_39*/ gExitLists_NoExit,
+ /*AREA_NULL_3A*/ gExitLists_NoExit,
+ /*AREA_NULL_3B*/ gExitLists_NoExit,
+ /*AREA_NULL_3C*/ gExitLists_NoExit,
+ /*AREA_NULL_3D*/ gExitLists_NoExit,
+ /*AREA_NULL_3E*/ gExitLists_NoExit,
+ /*AREA_NULL_3F*/ gExitLists_NoExit,
+ /*AREA_40*/ gExitLists_40,
+ /*AREA_HYRULE_TOWN_UNDERGROUND*/ gExitLists_HyruleTownUnderground,
+ /*AREA_GARDEN_FOUNTAINS*/ gExitLists_GardenFountains,
+ /*AREA_HYRULE_CASTLE_CELLAR*/ gExitLists_HyruleCastleCellar,
+ /*AREA_SIMONS_SIMULATION*/ gExitLists_NoExit,
+ /*AREA_45*/ gExitLists_NoExit,
+ /*AREA_NULL_46*/ gExitLists_40,
+ /*AREA_47*/ gExitLists_NoExit,
+ /*AREA_DEEPWOOD_SHRINE*/ gExitLists_DeepwoodShrine,
+ /*AREA_DEEPWOOD_SHRINE_BOSS*/ gExitLists_DeepwoodShrineBoss,
+ /*AREA_DEEPWOOD_SHRINE_ENTRY*/ gExitLists_DeepwoodShrineEntry,
+ /*AREA_NULL_4B*/ gExitLists_NoExit,
+ /*AREA_NULL_4C*/ gExitLists_NoExit,
+ /*AREA_4D*/ gExitLists_NoExit,
+ /*AREA_NULL_4E*/ gExitLists_NoExit,
+ /*AREA_NULL_4F*/ gExitLists_NoExit,
+ /*AREA_CAVE_OF_FLAMES*/ gExitLists_CaveOfFlames,
+ /*AREA_CAVE_OF_FLAMES_BOSS*/ gExitLists_NoExit,
+ /*AREA_NULL_52*/ gExitLists_NoExit,
+ /*AREA_NULL_53*/ gExitLists_NoExit,
+ /*AREA_NULL_54*/ gExitLists_NoExit,
+ /*AREA_NULL_55*/ gExitLists_NoExit,
+ /*AREA_NULL_56*/ gExitLists_NoExit,
+ /*AREA_57*/ gExitLists_NoExit,
+#ifndef DEMO_USA
+ /*AREA_FORTRESS_OF_WINDS*/ gExitLists_FortressOfWinds,
+ /*AREA_FORTRESS_OF_WINDS_TOP*/ gExitLists_FortressOfWindsTop,
+ /*AREA_INNER_MAZAAL*/ gExitLists_InnerMazaal,
+ /*AREA_NULL_5B*/ gExitLists_NoExit,
+ /*AREA_NULL_5C*/ gExitLists_NoExit,
+ /*AREA_NULL_5D*/ gExitLists_NoExit,
+ /*AREA_NULL_5E*/ gExitLists_NoExit,
+ /*AREA_5F*/ gExitLists_NoExit,
+#endif
+ /*AREA_TEMPLE_OF_DROPLETS*/ gExitLists_TempleOfDroplets,
+ /*AREA_NULL_61*/ gExitLists_61,
+ /*AREA_HYRULE_TOWN_MINISH_CAVES*/ gExitLists_HyruleTownMinishCaves,
+ /*AREA_NULL_63*/ gExitLists_NoExit,
+ /*AREA_NULL_64*/ gExitLists_NoExit,
+ /*AREA_NULL_65*/ gExitLists_NoExit,
+ /*AREA_NULL_66*/ gExitLists_NoExit,
+ /*AREA_67*/ gExitLists_NoExit,
+ /*AREA_ROYAL_CRYPT*/ gExitLists_RoyalCrypt,
+ /*AREA_NULL_69*/ gExitLists_NoExit,
+ /*AREA_NULL_6A*/ gExitLists_NoExit,
+ /*AREA_NULL_6B*/ gExitLists_NoExit,
+ /*AREA_NULL_6C*/ gExitLists_NoExit,
+ /*AREA_NULL_6D*/ gExitLists_NoExit,
+ /*AREA_NULL_6E*/ gExitLists_NoExit,
+ /*AREA_6F*/ gExitLists_NoExit,
+ /*AREA_PALACE_OF_WINDS*/ gExitLists_PalaceOfWinds,
+ /*AREA_PALACE_OF_WINDS_BOSS*/ gExitLists_NoExit,
+ /*AREA_NULL_72*/ gExitLists_NoExit,
+ /*AREA_NULL_73*/ gExitLists_NoExit,
+ /*AREA_NULL_74*/ gExitLists_NoExit,
+ /*AREA_NULL_75*/ gExitLists_NoExit,
+ /*AREA_NULL_76*/ gExitLists_NoExit,
+ /*AREA_77*/ gExitLists_NoExit,
+ /*AREA_SANCTUARY*/ gExitLists_Sanctuary,
+ /*AREA_NULL_79*/ gExitLists_NoExit,
+ /*AREA_NULL_7A*/ gExitLists_NoExit,
+ /*AREA_NULL_7B*/ gExitLists_NoExit,
+ /*AREA_NULL_7C*/ gExitLists_NoExit,
+ /*AREA_NULL_7D*/ gExitLists_NoExit,
+ /*AREA_NULL_7E*/ gExitLists_NoExit,
+ /*AREA_7F*/ gExitLists_NoExit,
+ /*AREA_HYRULE_CASTLE*/ gExitLists_HyruleCastle,
+ /*AREA_SANCTUARY_ENTRANCE*/ gExitLists_SanctuaryEntrance,
+ /*AREA_NULL_82*/ gExitLists_NoExit,
+ /*AREA_NULL_83*/ gExitLists_NoExit,
+ /*AREA_NULL_84*/ gExitLists_NoExit,
+ /*AREA_NULL_85*/ gExitLists_NoExit,
+ /*AREA_NULL_86*/ gExitLists_NoExit,
+ /*AREA_87*/ gExitLists_NoExit,
+ /*AREA_DARK_HYRULE_CASTLE*/ gExitLists_DarkHyruleCastle,
+ /*AREA_DARK_HYRULE_CASTLE_OUTSIDE*/ gExitLists_DarkHyruleCastleOutside,
+ /*AREA_VAATIS_ARMS*/ gExitLists_VaatisArms,
+ /*AREA_VAATI_3*/ gExitLists_NoExit,
+ /*AREA_VAATI_2*/ gExitLists_NoExit,
+ /*AREA_DARK_HYRULE_CASTLE_BRIDGE*/ gExitLists_DarkHyruleCastleBridge,
+ /*AREA_NULL_8E*/ gExitLists_NoExit,
+ /*AREA_8F*/ gExitLists_NoExit,
+ /*AREA_90*/ gExitLists_NoExit,
+ /*AREA_91*/ gExitLists_NoExit,
+ /*AREA_92*/ gExitLists_NoExit,
+ /*AREA_93*/ gExitLists_NoExit,
+ /*AREA_94*/ gExitLists_NoExit,
+ /*AREA_95*/ gExitLists_NoExit,
+ /*AREA_96*/ gExitLists_NoExit,
+ /*AREA_97*/ gExitLists_NoExit,
+ /*AREA_98*/ gExitLists_NoExit,
+};
+// clang-format on
diff --git a/src/demo.c b/src/demo.c
index 04d7baff..9b7b4356 100644
--- a/src/demo.c
+++ b/src/demo.c
@@ -216,7 +216,7 @@ void sub_080A3198(u32 param_1, u32 param_2) {
MemClear(gUnk_08127C98 - 0x1e, 0x180);
if (r4 != 0) {
- sub_0805F46C(r4, &gUnk_08127C98);
+ sub_0805F46C(r4, (Font*)&gUnk_08127C98); // TODO
}
gScreen.bg0.updated = 1;
diff --git a/src/enemy/acroBandits.c b/src/enemy/acroBandits.c
index 34d0ea7c..d240ecab 100644
--- a/src/enemy/acroBandits.c
+++ b/src/enemy/acroBandits.c
@@ -10,15 +10,39 @@
extern Entity* gUnk_020000B0;
extern void (*const gUnk_080012C8[])(Entity*);
-extern void (*const AcroBandit_Functions[])(Entity*);
-extern void (*const gUnk_080CE584[])(Entity*);
-extern void (*const gUnk_080CE58C[])(Entity*);
-extern void (*const gUnk_080CE5C8[])(Entity*);
-extern u8 gUnk_080CE5B0[8];
-extern u8 gUnk_080CE5B8[8];
-extern s8 gUnk_080CE5C0[8];
-extern u16 gUnk_080CE5F0[5];
-extern u8 gUnk_080CE5FA[20]; // Directions
+
+void AcroBandit_OnTick(Entity* this);
+void AcroBandit_OnCollision(Entity* this);
+void AcroBandit_OnKnockback(Entity* this);
+void GenericDeath(Entity* this);
+void GenericConfused(Entity* this);
+void AcroBandit_OnGrabbed(Entity* this);
+void AcroBandit_Type0(Entity* this);
+void AcroBandit_Type1(Entity* this);
+void AcroBandit_Type0Action0(Entity* this);
+void AcroBandit_Type0Action1(Entity* this);
+void AcroBandit_Type0Action2(Entity* this);
+void AcroBandit_Type0Action3(Entity* this);
+void AcroBandit_Type0Action4(Entity* this);
+void AcroBandit_Type0Action5(Entity* this);
+void AcroBandit_Type0Action6(Entity* this);
+void AcroBandit_Type0Action7(Entity* this);
+void AcroBandit_Type0Action8(Entity* this);
+void AcroBandit_Type1Init(Entity* this);
+void AcroBandit_Type1Action1(Entity* this);
+void AcroBandit_Type1Action2(Entity* this);
+void AcroBandit_Type1Action3(Entity* this);
+void AcroBandit_Type1Action4(Entity* this);
+void AcroBandit_Type1Action5(Entity* this);
+void AcroBandit_Type1Action6(Entity* this);
+void AcroBandit_Type1Action7(Entity* this);
+void AcroBandit_Type1Action8(Entity* this);
+void AcroBandit_Type1Action9(Entity* this);
+
+static void (*const AcroBandit_Functions[])(Entity*) = {
+ AcroBandit_OnTick, AcroBandit_OnCollision, AcroBandit_OnKnockback,
+ GenericDeath, GenericConfused, AcroBandit_OnGrabbed,
+};
void AcroBandit(Entity* this) {
s32 index;
@@ -37,7 +61,11 @@ void AcroBandit(Entity* this) {
}
void AcroBandit_OnTick(Entity* this) {
- gUnk_080CE584[this->type](this);
+ static void (*const typeFuncs[])(Entity*) = {
+ AcroBandit_Type0,
+ AcroBandit_Type1,
+ };
+ typeFuncs[this->type](this);
}
void AcroBandit_OnCollision(Entity* this) {
@@ -47,7 +75,7 @@ void AcroBandit_OnCollision(Entity* this) {
if (this->type == 1) {
if (this->action < 7 && this->knockbackDuration != 0) {
brother = this->child;
- if (brother) {
+ if (brother != NULL) {
brother->parent = this->parent;
do {
brother->action = 5;
@@ -56,10 +84,10 @@ void AcroBandit_OnCollision(Entity* this) {
brother->iframes = -12;
} while (brother = brother->child, brother != NULL);
}
- if (this->parent) {
+ if (this->parent != NULL) {
this->parent->child = this->child;
} else {
- if (this->child)
+ if (this->child != NULL)
this->parent = this;
}
@@ -109,25 +137,27 @@ void AcroBandit_OnKnockback(Entity* this) {
GenericKnockback(this);
}
-void AcroBandit_OnGrabbed(void) {
- /* ... */
+void AcroBandit_OnGrabbed(Entity* this) {
}
-void sub_08031A88(Entity* this) {
- gUnk_080CE58C[this->action](this);
+void AcroBandit_Type0(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ AcroBandit_Type0Action0, AcroBandit_Type0Action1, AcroBandit_Type0Action2,
+ AcroBandit_Type0Action3, AcroBandit_Type0Action4, AcroBandit_Type0Action5,
+ AcroBandit_Type0Action6, AcroBandit_Type0Action7, AcroBandit_Type0Action8,
+ };
+ actionFuncs[this->action](this);
}
-void sub_08031AA0(Entity* this) {
+void AcroBandit_Type0Action0(Entity* this) {
sub_0804A720(this);
- this->action = '\x01';
+ this->action = 1;
this->field_0x74.HWORD = this->x.HALF.HI;
this->field_0x76.HWORD = this->y.HALF.HI;
this->field_0x78.HALF.HI = Random();
}
-void sub_08031AC8(Entity* this)
-
-{
+void AcroBandit_Type0Action1(Entity* this) {
u32 rand;
s32 x, y;
@@ -149,7 +179,9 @@ void sub_08031AC8(Entity* this)
}
}
-void sub_08031B48(Entity* this) {
+void AcroBandit_Type0Action2(Entity* this) {
+ static const u8 actionDelays[] = { 2, 2, 2, 3, 3, 3, 3, 4 };
+
GetNextFrame(this);
if (this->frame & 1) {
this->frame = 0;
@@ -157,13 +189,13 @@ void sub_08031B48(Entity* this) {
} else {
if (this->frame & ANIM_DONE) {
this->action = 0x3;
- this->actionDelay = gUnk_080CE5B0[Random() & 7];
+ this->actionDelay = actionDelays[Random() & 7];
InitializeAnimation(this, 1);
}
}
}
-void sub_08031B98(Entity* this) {
+void AcroBandit_Type0Action3(Entity* this) {
if (sub_08031E04(this)) {
this->action = 5;
if (this->x.HALF.HI > gUnk_020000B0->x.HALF.HI) {
@@ -186,21 +218,22 @@ void sub_08031B98(Entity* this) {
}
}
-void sub_08031C1C(Entity* this) {
+void AcroBandit_Type0Action4(Entity* this) {
+ static const u8 actionDelays[] = { 60, 60, 90, 120, 120, 120, 120, 150 };
GetNextFrame(this);
if (this->frame & ANIM_DONE) {
- this->action = '\x01';
- this->actionDelay = gUnk_080CE5B8[Random() & 7];
+ this->action = 1;
+ this->actionDelay = actionDelays[Random() & 7];
this->spriteSettings.draw = 0;
}
}
-void sub_08031C58(Entity* this) {
+void AcroBandit_Type0Action5(Entity* this) {
Entity *a, *b;
GetNextFrame(this);
if (this->frame & ANIM_DONE) {
- if (gEntCount < 0x43) {
+ if (gEntCount < MAX_ENTITIES - 4) {
u32 tmp = Random();
tmp &= 3;
@@ -252,7 +285,7 @@ void sub_08031C58(Entity* this) {
}
}
-void sub_08031D70(Entity* this) {
+void AcroBandit_Type0Action6(Entity* this) {
GetNextFrame(this);
if (--this->actionDelay == 0) {
this->action = 7;
@@ -262,7 +295,7 @@ void sub_08031D70(Entity* this) {
}
}
-void sub_08031DA0(Entity* this) {
+void AcroBandit_Type0Action7(Entity* this) {
if ((this->actionDelay & 0xf) == 0) {
if (this->actionDelay == 0x50) {
DeleteEntity(this);
@@ -273,7 +306,7 @@ void sub_08031DA0(Entity* this) {
}
}
-void sub_08031DC4(Entity* this) {
+void AcroBandit_Type0Action8(Entity* this) {
if (this->frame & ANIM_DONE) {
this->action = 1;
this->actionDelay = 0xb4;
@@ -286,13 +319,14 @@ void sub_08031DC4(Entity* this) {
}
}
-u32 sub_08031E04(Entity* this) {
+bool32 sub_08031E04(Entity* this) {
+ static const s8 gUnk_080CE5C0[] = { -32, 0, 0, 32, 32, 0, 0, 0 };
Entity* ent;
- s8* tmp;
+ const s8* tmp;
ent = sub_08049DF4(1);
if (ent == NULL)
- return 0;
+ return FALSE;
tmp = &gUnk_080CE5C0[this->frame & 6];
return EntityWithinDistance(this, ent->x.HALF.HI + tmp[0], ent->y.HALF.HI + tmp[1], 0x50);
@@ -308,11 +342,16 @@ void sub_08031E48(Entity* this, Entity* child) {
child->field_0x7c.WORD = (s32)this;
}
-void sub_08031E90(Entity* this) {
- gUnk_080CE5C8[this->action](this);
+void AcroBandit_Type1(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ AcroBandit_Type1Init, AcroBandit_Type1Action1, AcroBandit_Type1Action2, AcroBandit_Type1Action3,
+ AcroBandit_Type1Action4, AcroBandit_Type1Action5, AcroBandit_Type1Action6, AcroBandit_Type1Action7,
+ AcroBandit_Type1Action8, AcroBandit_Type1Action9,
+ };
+ actionFuncs[this->action](this);
}
-void sub_08031EA8(Entity* this) {
+void AcroBandit_Type1Init(Entity* this) {
this->action = 1;
this->spritePriority.b1 = 1;
this->zVelocity = Q_16_16(4.0);
@@ -321,7 +360,7 @@ void sub_08031EA8(Entity* this) {
InitializeAnimation(this, 4);
}
-void sub_08031EE8(Entity* this) {
+void AcroBandit_Type1Action1(Entity* this) {
int draw;
this->z.WORD -= this->zVelocity;
@@ -346,8 +385,10 @@ void sub_08031EE8(Entity* this) {
}
}
-void sub_08031F54(Entity* this) {
- GravityUpdate(this, gUnk_080CE5F0[this->type2]);
+void AcroBandit_Type1Action2(Entity* this) {
+ static const u16 banditGravity[] = { 0x1600, 0x1300, 0x1000, 0xD00, 0xB00 };
+
+ GravityUpdate(this, banditGravity[this->type2]);
if (this->type2 * -0xe <= this->z.HALF.HI) {
this->action = 3;
this->actionDelay = 20;
@@ -358,13 +399,13 @@ void sub_08031F54(Entity* this) {
}
}
-void sub_08031FB0(Entity* this) {
+void AcroBandit_Type1Action3(Entity* this) {
GetNextFrame(this);
- if ((this->frame & ANIM_DONE) && (this->parent || --this->actionDelay == 0)) {
+ if ((this->frame & ANIM_DONE) && ((this->parent != NULL) || (--this->actionDelay == 0))) {
this->action = 4;
this->direction = sub_08049F84(this, 1);
*(u8*)&this->field_0x76 = 0;
- if (this->child) {
+ if (this->child != NULL) {
InitializeAnimation(this, 9);
} else {
InitializeAnimation(this, 8);
@@ -372,12 +413,12 @@ void sub_08031FB0(Entity* this) {
}
}
-void sub_08032008(Entity* this) {
+void AcroBandit_Type1Action4(Entity* this) {
Entity* parent;
- if (sub_080322A4(this) == 0) {
+ if (!sub_080322A4(this)) {
parent = this->parent;
- if (parent == 0) {
+ if (parent == NULL) {
if (sub_08049FDC(this, 1)) {
if ((++this->field_0x78.HALF.HI & 7) == 0) {
sub_08004596(this, GetFacingDirection(this, gUnk_020000B0));
@@ -421,20 +462,22 @@ void sub_08032008(Entity* this) {
}
}
-void sub_08032148(Entity* this) {
+void AcroBandit_Type1Action5(Entity* this) {
if (GravityUpdate(this, 0x2000))
return;
sub_08032290(this);
}
-void sub_08032160(Entity* this) {
+void AcroBandit_Type1Action6(Entity* this) {
+ static const u8 fallDirections[] = { 0x8, 0x1c, 0x11, 0x2, 0x15, 0xc, 0x0, 0x15, 0x6, 0x19,
+ 0x10, 0x4, 0x19, 0xa, 0x1d, 0x14, 0x8, 0x1d, 0xe, 0x1 };
Entity* tmp;
u32 dir;
if (this->actionDelay == 0) {
this->action = 7;
- dir = gUnk_080CE5FA[this->field_0x74.HALF.LO * 5 + this->type2];
+ dir = fallDirections[this->field_0x74.HALF.LO * 5 + this->type2];
this->direction = dir;
if (dir >= 0x10) {
this->spriteSettings.flipX = 1;
@@ -456,14 +499,14 @@ void sub_08032160(Entity* this) {
}
}
-void sub_080321E8(Entity* this) {
+void AcroBandit_Type1Action7(Entity* this) {
ProcessMovement2(this);
if (sub_080044EC(this, 0x2000) == 0)
this->action = 8;
}
-void sub_08032204(Entity* this) {
+void AcroBandit_Type1Action8(Entity* this) {
GetNextFrame(this);
if (this->frame & 1) {
this->frame = 0;
@@ -476,7 +519,7 @@ void sub_08032204(Entity* this) {
}
}
-void sub_08032248(Entity* this) {
+void AcroBandit_Type1Action9(Entity* this) {
if (GravityUpdate(this, Q_8_8(24.0)) == 0) {
if (this->frame & ANIM_DONE) {
((Entity*)this->field_0x7c.WORD)->actionDelay--;
@@ -497,30 +540,29 @@ void sub_08032290(Entity* this) {
InitializeAnimation(this, 11);
}
-u32 sub_080322A4(Entity* this) {
+bool32 sub_080322A4(Entity* this) {
if (this->child != NULL && (this->child->z.HALF.HI + 8) >= this->z.HALF.HI) {
if (this->z.HALF.HI) {
this->action = 5;
this->z.HALF.HI = this->child->z.HALF.HI + 8;
InitializeAnimation(this, 11);
- return 1;
+ return TRUE;
} else {
sub_08032290(this);
- return 1;
+ return TRUE;
}
}
- return 0;
+ return FALSE;
}
void sub_080322E8(Entity* this) {
- u8 tmp;
if (this->field_0x78.HALF.LO) {
if (--this->field_0x78.HALF.LO == 0) {
u32 flipX = this->spriteSettings.flipX;
this->spriteSettings.flipX = flipX ^ 1;
}
} else {
- tmp = this->direction;
+ u8 tmp = this->direction;
if (tmp & 0xF) {
tmp >>= 4;
tmp ^= 1;
diff --git a/src/enemy/armos.c b/src/enemy/armos.c
index 0fd596a2..09c732e7 100644
--- a/src/enemy/armos.c
+++ b/src/enemy/armos.c
@@ -306,12 +306,12 @@ bool32 sub_08030650(ArmosEntity* this) {
return 1;
}
} else if (this->unk_80 != 2) {
- if ((sub_08049FDC(super, 1) == 0) || (0x20 < (gUnk_020000B0->x.HALF.HI - super->x.HALF.HI) + 0x10U)) {
+ if (!sub_08049FDC(super, 1) || (0x20 < (gUnk_020000B0->x.HALF.HI - super->x.HALF.HI) + 0x10U)) {
return FALSE;
}
return TRUE;
} else {
- if (sub_08049FDC(super, 1) == 0) {
+ if (!sub_08049FDC(super, 1)) {
return FALSE;
}
if (gUnk_020000B0->x.HALF.HI >= (s32)(gRoomControls.origin_x + 0xa8)) {
diff --git a/src/enemy/beetle.c b/src/enemy/beetle.c
index 25e104c8..dc15be53 100644
--- a/src/enemy/beetle.c
+++ b/src/enemy/beetle.c
@@ -60,7 +60,7 @@ void Beetle_OnDeath(Entity* this) {
GenericDeath(this);
} else {
Entity* ent = this->parent;
- if (ent) {
+ if (ent != NULL) {
ent->field_0xf--;
this->parent = NULL;
}
diff --git a/src/enemy/bobomb.c b/src/enemy/bobomb.c
index 7e214b63..e47bf4e4 100644
--- a/src/enemy/bobomb.c
+++ b/src/enemy/bobomb.c
@@ -6,6 +6,7 @@
*/
#include "asm.h"
+#include "collision.h"
#include "sound.h"
#include "enemy.h"
#include "object.h"
@@ -160,7 +161,7 @@ void sub_0802C91C(Entity* this) {
GetNextFrame(this);
ProcessMovement0(this);
if (this->field_0x82.HALF.LO) {
- if (this->collisions) {
+ if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
InitializeAnimation(this, (this->direction >> 4) | 2);
}
@@ -173,7 +174,7 @@ void sub_0802C91C(Entity* this) {
sub_0802CC18(this);
}
} else {
- if (this->collisions) {
+ if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
InitializeAnimation(this, this->direction >> 4);
}
@@ -289,7 +290,7 @@ void sub_0802CBC4(Entity* this) {
FreeCarryEntity(this);
ent = CreateObjectWithParent(this, OBJECT_20, 0, 0);
- if (ent) {
+ if (ent != NULL) {
ent->collisionLayer = this->collisionLayer;
}
}
diff --git a/src/enemy/bombPeahat.c b/src/enemy/bombPeahat.c
index 5c327b91..5cb6e1db 100644
--- a/src/enemy/bombPeahat.c
+++ b/src/enemy/bombPeahat.c
@@ -92,7 +92,6 @@ void sub_0802A8FC(Entity* this) {
}
void nullsub_143(Entity* this) {
- /* ... */
}
void sub_0802A91C(Entity* this) {
@@ -167,7 +166,7 @@ void sub_0802AA40(Entity* this) {
this->actionDelay--;
} else {
Entity* ent = this->child;
- if (ent) {
+ if (ent != NULL) {
if (ent->next == NULL) {
this->child = NULL;
} else {
@@ -212,7 +211,7 @@ void sub_0802AAC0(Entity* this) {
}
}
#else
- } else if (ent->actionDelay == 0 && ent->field_0xf < 0x51) {
+ } else if ((ent->actionDelay == 0) && (ent->field_0xf <= 0x50)) {
this->field_0x80.HALF.HI = 0;
}
#endif
@@ -304,7 +303,7 @@ void sub_0802AC40(Entity* this) {
GetNextFrame(this);
LinearMoveUpdate(this);
if (this->field_0x7a.HALF.LO) {
- if (sub_0802B234(this) == 0) {
+ if (!sub_0802B234(this)) {
this->field_0x7a.HALF.LO = 0;
this->spritePriority.b1 = 0;
#ifndef EU
@@ -349,7 +348,7 @@ void sub_0802ACDC(Entity* this, u32 param_2) {
void sub_0802AD1C(Entity* this, u32 param_2) {
Entity* ent = sub_08049DF4(1);
- if (ent) {
+ if (ent != NULL) {
u32 y = ent->y.HALF.HI - 0x18;
u32 x = ent->x.HALF.HI;
sub_08004596(this, sub_080045B4(this, x, y));
@@ -416,7 +415,7 @@ void sub_0802AE24(Entity* this) {
#ifdef EU
void sub_0802AE68(Entity* this) {
Entity* ent = this->parent;
- if (ent == 0) {
+ if (ent == NULL) {
this->action = 3;
this->spriteSettings.draw = 1;
this->field_0x80.HALF.LO = 1;
@@ -441,7 +440,7 @@ void sub_0802AE68(Entity* this) {
#else
void sub_0802AE68(Entity* this) {
Entity* ent = sub_0802B250(this);
- if (ent == 0) {
+ if (ent == NULL) {
this->action = 3;
this->field_0x80.HALF.LO = 1;
sub_0802B264(this);
@@ -559,7 +558,7 @@ void sub_0802B048(Entity* this) {
}
ent = this->parent;
- if (ent && this->action == 1) {
+ if ((ent != NULL) && this->action == 1) {
this->spriteRendering.b3 = ent->spriteRendering.b3;
this->spritePriority.b0 = ent->spritePriority.b0;
this->spriteOrientation.flipY = ent->spriteOrientation.flipY;
@@ -588,7 +587,7 @@ void sub_0802B048(Entity* this) {
COLLISION_ON(this);
this->field_0x7a.HALF.HI = 0;
FreeCarryEntity(this);
- if (this->parent->next) {
+ if (this->parent->next != NULL) {
this->parent->field_0x80.HALF.HI = 0;
}
ent = CreateObjectWithParent(this, OBJECT_20, 0, 0);
@@ -622,7 +621,7 @@ void sub_0802B1BC(Entity* this) {
}
ent = this->parent;
- if (ent == 0) {
+ if (ent == NULL) {
this->action = 2;
this->spriteSettings.draw = 1;
}
@@ -651,7 +650,7 @@ void sub_0802B1BC(Entity* this) {
}
ent = sub_0802B250(this);
- if (ent == 0) {
+ if (ent == NULL) {
this->action = 2;
sub_0802B264(this);
} else {
@@ -668,7 +667,7 @@ void sub_0802B1BC(Entity* this) {
void sub_0802B204(Entity* this) {
if (sub_080044EC(this, 0x2800) == 1) {
Entity* ent = CreateEnemy(BOBOMB, 1);
- if (ent) {
+ if (ent != NULL) {
CopyPosition(this, ent);
ent->parent = this->parent;
}
@@ -686,7 +685,7 @@ bool32 sub_0802B234(Entity* this) {
#ifndef EU
Entity* sub_0802B250(Entity* this) {
Entity* parent = this->parent;
- if (parent && parent->next == NULL) {
+ if ((parent != NULL) && (parent->next == NULL)) {
parent = NULL;
}
return parent;
diff --git a/src/enemy/bombarossa.c b/src/enemy/bombarossa.c
index 4004edb5..2119c5e0 100644
--- a/src/enemy/bombarossa.c
+++ b/src/enemy/bombarossa.c
@@ -44,7 +44,7 @@ void Bombarossa_OnCollision(BombarossaEntity* this) {
switch (super->bitfield & 0x7f) {
default:
ent = CreateObject(OBJECT_20, 0, 0);
- if (ent) {
+ if (ent != NULL) {
CopyPosition(super, ent);
}
DeleteThisEntity();
diff --git a/src/enemy/bowMoblin.c b/src/enemy/bowMoblin.c
index b65f1ea3..35d3b011 100644
--- a/src/enemy/bowMoblin.c
+++ b/src/enemy/bowMoblin.c
@@ -230,7 +230,7 @@ void sub_0803C400(BowMoblinEntity* this) {
}
sub_0803C6DC(this);
- if (super->child) {
+ if (super->child != NULL) {
sub_0803C714(this);
}
}
@@ -271,7 +271,7 @@ void sub_0803C4B0(BowMoblinEntity* this) {
u32 sub_0803C568(BowMoblinEntity* this) {
if (this->unk_0x81 == 0) {
Entity* ent = sub_08049DF4(1);
- if (ent) {
+ if (ent != NULL) {
if (this->unk_0x82 == 2) {
if (sub_0806FC80(super, ent, 0x30)) {
return 1;
diff --git a/src/enemy/businessScrub.c b/src/enemy/businessScrub.c
index 8283894b..45cf55b8 100644
--- a/src/enemy/businessScrub.c
+++ b/src/enemy/businessScrub.c
@@ -384,7 +384,7 @@ void sub_08028F0C(Entity* this) {
SetPlayerControl(1);
}
MessageFromTarget(dialog);
- gMessage.field_0x10 = offer->price;
+ gMessage.rupees = offer->price;
}
}
diff --git a/src/enemy/businessScrubPrologue.c b/src/enemy/businessScrubPrologue.c
index b4dd50e1..4366c0ab 100644
--- a/src/enemy/businessScrubPrologue.c
+++ b/src/enemy/businessScrubPrologue.c
@@ -48,7 +48,7 @@ void BusinessScrubPrologue_OnCollision(BusinessScrubPrologueEntity* this) {
super->flags &= ~ENT_COLLIDE;
sub_08046030(this, 4);
ent = CreateFx(super, FX_BUSH, 0);
- if (ent) {
+ if (ent != NULL) {
ent->z.HALF.HI -= 8;
}
@@ -123,7 +123,7 @@ void sub_08045CE0(BusinessScrubPrologueEntity* this) {
sub_0804604C(this);
if (super->frame & 1) {
ent = CreateProjectileWithParent(super, DEKU_SEED_PROJECTILE, 0);
- if (ent) {
+ if (ent != NULL) {
ent->parent = super;
ent->direction = super->direction;
super->frame &= 0xfe;
@@ -186,7 +186,7 @@ void sub_08045E14(BusinessScrubPrologueEntity* this) {
super->subAction = 0;
sub_08046030(this, 0);
ent = Create0x68FX(super, FX_STARS);
- if (ent) {
+ if (ent != NULL) {
ent->spritePriority.b0 = 3;
ent->z.HALF.HI -= 0xc;
SetDefaultPriority(ent, PRIO_MESSAGE);
@@ -299,7 +299,7 @@ void sub_08046078(BusinessScrubPrologueEntity* this) {
for (index = 0; index <= 4; index++) {
ent = CreateFx(super, FX_DEATH, 0x40);
- if (ent) {
+ if (ent != NULL) {
ent->x.HALF.HI = gRoomControls.origin_x + *ptr;
ptr++;
ent->y.HALF.HI = gRoomControls.origin_y + *ptr;
@@ -315,12 +315,12 @@ void sub_08046078(BusinessScrubPrologueEntity* this) {
RestorePrevTileEntity(0x7a7, 1);
ent = CreateFx(super, FX_BIG_EXPLOSION2, 0x40);
- if (ent) {
+ if (ent != NULL) {
CopyPosition(super, ent);
EnqueueSFX(SFX_184);
}
- if (super->child) {
+ if (super->child != NULL) {
super->child->action = 0xff;
}
diff --git a/src/enemy/chuchu.c b/src/enemy/chuchu.c
index 9f23dd3b..856acda5 100644
--- a/src/enemy/chuchu.c
+++ b/src/enemy/chuchu.c
@@ -123,7 +123,7 @@ void Chuchu_OnCollision(Entity* this) {
}
void Chuchu_OnGrabbed(Entity* this) {
- if (sub_0806F520(this) == 0 && this->confusedTime) {
+ if (!sub_0806F520(this) && this->confusedTime) {
Create0x68FX(this, FX_STARS);
InitializeAnimation(this, 6);
} else {
@@ -552,7 +552,7 @@ void sub_0801F884(Entity* this) {
this->field_0xf--;
} else {
Entity* ent = Create0x68FX(this, FX_LIGHTNING_STRIKE);
- if (ent) {
+ if (ent != NULL) {
ent->type2 = 64;
this->action = 4;
this->hitType = 165;
diff --git a/src/enemy/cloudPiranha.c b/src/enemy/cloudPiranha.c
index 6922958c..e1075af3 100644
--- a/src/enemy/cloudPiranha.c
+++ b/src/enemy/cloudPiranha.c
@@ -7,6 +7,7 @@
#define NENT_DEPRECATED
#include "global.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
#include "coord.h"
@@ -259,7 +260,7 @@ void sub_080387F0(CloudPiranhaEntity* this) {
if ((iVar4 == 0xf) || (iVar4 == 0x2a)) {
super->direction = (super->direction + 0x10) & 0x1f;
} else {
- if (super->collisions != 0) {
+ if (super->collisions != COL_NONE) {
sub_0800417E(super, super->collisions);
}
}
diff --git a/src/enemy/cuccoAggr.c b/src/enemy/cuccoAggr.c
index 28b32be5..5d2631df 100644
--- a/src/enemy/cuccoAggr.c
+++ b/src/enemy/cuccoAggr.c
@@ -295,7 +295,7 @@ void sub_080391B4(CuccoAggrEntity* this) {
if (this->unk_7a) {
if ((this->unk_7b++ & 0x1f) == 0) {
Entity* ent = CreateEnemy(CUCCO_AGGR, 2);
- if (ent) {
+ if (ent != NULL) {
u32 rand = (Random() & 0x17);
const PosOffset* ptr = &gCuccoAggrSpawnPoints[rand];
ent->x.HALF.HI = gRoomControls.scroll_x + ptr->x;
@@ -321,7 +321,7 @@ void sub_08039218(CuccoAggrEntity* this) {
void CuccoAggr_CreateFx(CuccoAggrEntity* this) {
Entity* ent = CreateFx(super, gCuccoAggrFx[super->type], 0);
- if (ent) {
+ if (ent != NULL) {
ent->x.HALF.HI += gCuccoAggrFxHorizontalOffsets[super->spriteSettings.flipX];
}
}
diff --git a/src/enemy/darkNut.c b/src/enemy/darkNut.c
index 7fae4b0b..3d91e7f4 100644
--- a/src/enemy/darkNut.c
+++ b/src/enemy/darkNut.c
@@ -312,7 +312,7 @@ void sub_080210E4(Entity* this) {
this->frame &= ~1;
ent = CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 2);
- if (ent) {
+ if (ent != NULL) {
ent->parent = this;
this->child = ent;
}
@@ -558,7 +558,7 @@ void sub_08021540(Entity* this) {
}
void sub_08021588(Entity* this) {
- if (this->child) {
+ if (this->child != NULL) {
this->child->parent = NULL;
this->child = NULL;
}
@@ -571,7 +571,7 @@ void sub_0802159C(Entity* this) {
this->frame = 0;
this->hitType = 0x51;
ent = CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 3);
- if (ent) {
+ if (ent != NULL) {
ent->parent = this;
this->child = ent;
}
@@ -592,7 +592,7 @@ void sub_08021600(Entity* this) {
this->frame = 0;
this->hitType = 0x51;
ent = CreateProjectileWithParent(this, DARK_NUT_SWORD_SLASH, 4);
- if (ent) {
+ if (ent != NULL) {
ent->parent = this;
this->child = ent;
}
@@ -610,8 +610,6 @@ void sub_08021644(Entity* this) {
}
}
-extern u32 sub_08049F1C(Entity*, Entity*, u32);
-
u32 sub_08021664(Entity* this, Entity* ent) {
switch (this->animationState) {
case 0:
diff --git a/src/enemy/enemy50.c b/src/enemy/enemy50.c
index 2811e901..40bd1fde 100644
--- a/src/enemy/enemy50.c
+++ b/src/enemy/enemy50.c
@@ -154,7 +154,7 @@ void sub_08040D30(Enemy50Entity* this) {
}
void sub_08040D90(Enemy50Entity* this) {
- if (sub_0806F520()) {
+ if (sub_0806F520(super)) {
Enemy50_SubActions[super->subAction](this);
} else {
sub_08041128(this);
diff --git a/src/enemy/fallingBoulder.c b/src/enemy/fallingBoulder.c
index 4928bf84..828b3670 100644
--- a/src/enemy/fallingBoulder.c
+++ b/src/enemy/fallingBoulder.c
@@ -97,7 +97,7 @@ NONMATCH("asm/non_matching/fallingBoulder/sub_0802C334.inc", void sub_0802C334(E
s32 i;
for (i = 1; i > -1; i--) {
Entity* ent = CreateFx(this, FX_ROCK2, 0);
- if (ent) {
+ if (ent != NULL) {
ent->x.HALF.HI += 12;
ent->x.HALF.HI -= diff;
}
diff --git a/src/enemy/fireballGuy.c b/src/enemy/fireballGuy.c
index 43ceb90c..6e140df5 100644
--- a/src/enemy/fireballGuy.c
+++ b/src/enemy/fireballGuy.c
@@ -91,7 +91,7 @@ void sub_08045454(Entity* this) {
}
ent = CreateFx(this, FX_DEATH, 0);
- if (ent)
+ if (ent != NULL)
CopyPosition(this, ent);
DeleteEntity(this);
diff --git a/src/enemy/flyingPot.c b/src/enemy/flyingPot.c
new file mode 100644
index 00000000..1736979d
--- /dev/null
+++ b/src/enemy/flyingPot.c
@@ -0,0 +1,265 @@
+/**
+ * @file flyingPot.c
+ * @ingroup Enemies
+ *
+ * @brief Flying pot enemy
+ */
+#define NENT_DEPRECATED
+#include "collision.h"
+#include "functions.h"
+#include "enemy.h"
+#include "player.h"
+#include "room.h"
+
+extern void (*const gUnk_080012C8[])(Entity*);
+extern Hitbox gUnk_080FD34C;
+
+typedef struct {
+ /* 0x00 */ Entity base;
+ /* 0x68 */ u8 filler[0xC];
+ /* 0x74 */ u16 tileIndex;
+} FlyingPotEntity;
+
+enum FlyingPotActions {
+ /* 0 */ FLYING_POT_ACTION_0,
+ /* 1 */ FLYING_POT_ACTION_1,
+ /* 2 */ FLYING_POT_ACTION_2,
+ /* 3 */ FLYING_POT_ACTION_3,
+ /* 4 */ FLYING_POT_ACTION_4,
+ /* 5 */ FLYING_POT_ACTION_5,
+ /* 6 */ FLYING_POT_ACTION_6,
+};
+
+enum FlyingPotSubActions {
+ /* 0 */ FLYING_POT_SUBACTION_0,
+ /* 1 */ FLYING_POT_SUBACTION_1,
+ /* 2 */ FLYING_POT_SUBACTION_2,
+ /* 3 */ FLYING_POT_SUBACTION_3,
+ /* 4 */ FLYING_POT_SUBACTION_DO_NOTHING,
+ /* 5 */ FLYING_POT_SUBACTION_5,
+};
+
+// Functions
+void FlyingPot_OnTick(FlyingPotEntity*); // 0803708C
+void FlyingPot_OnCollision(FlyingPotEntity*); // 080370A4
+void FlyingPot_OnGrabbed(FlyingPotEntity*); // 0803712C
+
+// Subactions
+void FlyingPot_SubAction0(FlyingPotEntity*); // 08037144
+void FlyingPot_SubAction1(FlyingPotEntity*); // 0803715C
+void FlyingPot_SubAction2(FlyingPotEntity*); // 0803718C
+void FlyingPot_SubAction3(FlyingPotEntity*); // 080371F8
+void FlyingPot_SubActionDoNothing(FlyingPotEntity*);
+void FlyingPot_SubAction5(FlyingPotEntity*); // 08037218
+
+// Actions
+void FlyingPot_Init(FlyingPotEntity*); // ? // 08037220
+void FlyingPot_Action1(FlyingPotEntity*); // 08037280
+void FlyingPot_Action2(FlyingPotEntity*); // 080372E8
+void FlyingPot_Action3(FlyingPotEntity*); // 0803737C
+void FlyingPot_Action4(FlyingPotEntity*); // 080373B0
+void FlyingPot_Action5(FlyingPotEntity*); // 080373C8
+void FlyingPot_Action6(FlyingPotEntity*); // 080373E0
+
+void sub_08037408(FlyingPotEntity*);
+void sub_08037418(FlyingPotEntity*);
+
+void (*const FlyingPot_Functions[])(Entity*) = {
+ (EntityActionPtr)FlyingPot_OnTick,
+ (EntityActionPtr)FlyingPot_OnCollision,
+ GenericKnockback,
+ GenericDeath,
+ GenericConfused,
+ (EntityActionPtr)FlyingPot_OnGrabbed,
+};
+
+void FlyingPot(Entity* thisx) {
+ s32 index = sub_080012DC(thisx);
+
+ if (index != 0) {
+ gUnk_080012C8[index](thisx);
+ } else {
+ FlyingPot_Functions[GetNextFunction(thisx)](thisx);
+ }
+}
+
+void FlyingPot_OnTick(FlyingPotEntity* this) {
+ static void (*const FlyingPot_Actions[])(FlyingPotEntity*) = {
+ FlyingPot_Init, FlyingPot_Action1, FlyingPot_Action2, FlyingPot_Action3,
+ FlyingPot_Action4, FlyingPot_Action5, FlyingPot_Action6,
+ };
+
+ FlyingPot_Actions[super->action](this);
+}
+
+void FlyingPot_OnCollision(FlyingPotEntity* this) {
+ sub_08037418(this);
+
+ if (super->bitfield == 0x9D) {
+ super->action = FLYING_POT_ACTION_6;
+ COLLISION_OFF(super);
+ super->zVelocity = 0x2A000;
+ super->spritePriority.b1 = 1;
+
+ SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer);
+ } else if (super->z.HALF.HI != 0) {
+ sub_08037408(this);
+ }
+
+ EnemyFunctionHandlerAfterCollision(super, FlyingPot_Functions);
+}
+
+void FlyingPot_OnGrabbed(FlyingPotEntity* this) {
+ static void (*const FlyingPot_SubActions[])(FlyingPotEntity*) = {
+ FlyingPot_SubAction0, FlyingPot_SubAction1, FlyingPot_SubAction2,
+ FlyingPot_SubAction3, FlyingPot_SubActionDoNothing, FlyingPot_SubAction5,
+ };
+
+ FlyingPot_SubActions[super->subAction](this);
+}
+
+void FlyingPot_SubAction0(FlyingPotEntity* this) {
+ sub_08037418(this);
+
+ super->subAction = FLYING_POT_SUBACTION_1;
+ super->actionDelay = 0;
+ super->field_0x1d = 0x30;
+}
+
+void FlyingPot_SubAction1(FlyingPotEntity* this) {
+ sub_08037418(this);
+
+ if (sub_0806F520(super)) {
+ sub_0806F4E8(super);
+ } else {
+ super->spriteOffsetX = 0;
+
+ if (super->z.HALF.HI != 0) {
+ sub_08037408(this);
+ }
+ }
+}
+
+void FlyingPot_SubAction2(FlyingPotEntity* this) {
+ if (super->actionDelay == 0) {
+ sub_08037418(this);
+ super->actionDelay = 1;
+ COLLISION_OFF(super);
+ super->spriteOffsetX = 0;
+
+ SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer);
+ }
+
+ if (sub_0806F520(super)) {
+ sub_0806F3E4(super);
+ } else {
+ sub_08037408(this);
+ }
+}
+
+void FlyingPot_SubAction3(FlyingPotEntity* this) {
+ if (!(gPlayerState.field_0x1c & 0xF)) {
+ sub_08037408(this);
+ }
+}
+
+void FlyingPot_SubActionDoNothing(FlyingPotEntity* this) {
+}
+
+void FlyingPot_SubAction5(FlyingPotEntity* this) {
+ sub_08037408(this);
+}
+
+void FlyingPot_Init(FlyingPotEntity* this) {
+ u32 tile;
+
+ super->action = FLYING_POT_ACTION_1;
+ super->field_0x1c = 2;
+ super->y.HALF.HI += 3;
+
+ tile = TILE(super->x.HALF.HI, super->y.HALF.HI);
+ this->tileIndex = GetTileIndex(tile, super->collisionLayer);
+ SetTile(0x4000, tile, super->collisionLayer);
+ InitializeAnimation(super, 5);
+}
+
+void FlyingPot_Action1(FlyingPotEntity* this) {
+ sub_08037418(this);
+
+ if (GetTileTypeByEntity(super) != 0x4000) {
+ SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer);
+ sub_08037408(this);
+ }
+
+ if (PlayerInRange(super, 1, 0x40)) {
+ super->action = FLYING_POT_ACTION_2;
+ super->actionDelay = 30;
+ }
+}
+
+void FlyingPot_Action2(FlyingPotEntity* this) {
+ static const u8 offsets[] = { -1, 1, 1, -1 };
+
+ sub_08037418(this);
+
+ super->spriteOffsetX += offsets[super->actionDelay & 3];
+
+ if (--super->actionDelay == 0) {
+ super->action = FLYING_POT_ACTION_3;
+ super->spritePriority.b1 = 1;
+ super->spriteOffsetX = 0;
+ super->hitType = 0xA0;
+ super->flags2 = 0xF;
+ super->hitbox = &gUnk_080FD34C;
+
+ SetTile(this->tileIndex, TILE(super->x.HALF.HI, super->y.HALF.HI), super->collisionLayer);
+ }
+}
+
+void FlyingPot_Action3(FlyingPotEntity* this) {
+ super->z.WORD -= 0x10000;
+
+ if (super->z.HALF.HI <= -6) {
+ super->action = FLYING_POT_ACTION_4;
+ super->actionDelay = 10;
+ super->direction = GetFacingDirection(super, &gPlayerEntity);
+ }
+}
+
+void FlyingPot_Action4(FlyingPotEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->action = FLYING_POT_ACTION_5;
+ }
+}
+
+void FlyingPot_Action5(FlyingPotEntity* this) {
+ ProcessMovement2(super);
+
+ if (super->collisions != COL_NONE) {
+ sub_08037408(this);
+ }
+}
+
+void FlyingPot_Action6(FlyingPotEntity* this) {
+ if (super->zVelocity < 0) {
+ super->spriteSettings.flipY = 1;
+ }
+
+ if (!GravityUpdate(super, 0x2000)) {
+ sub_08037408(this);
+ }
+}
+
+void sub_08037408(FlyingPotEntity* this) {
+ CreateFx(super, FX_POT_SHATTER, 0);
+ DeleteThisEntity();
+}
+
+void sub_08037418(FlyingPotEntity* this) {
+ u32 tile = COORD_TO_TILE(super);
+
+ if (GetTileIndex(tile, super->collisionLayer) == 0x4067) {
+ SetTile(this->tileIndex, tile, super->collisionLayer);
+ DeleteThisEntity();
+ }
+}
diff --git a/src/enemy/flyingSkull.c b/src/enemy/flyingSkull.c
index 262781bb..0374b579 100644
--- a/src/enemy/flyingSkull.c
+++ b/src/enemy/flyingSkull.c
@@ -1,4 +1,5 @@
#define NENT_DEPRECATED
+#include "collision.h"
#include "entity.h"
#include "enemy.h"
#include "functions.h"
@@ -140,7 +141,7 @@ void sub_08039DD8(FlyingSkullEntity* this) {
super->actionDelay = 0x1e;
} else {
ent = CreateEnemy(STALFOS, super->type - 2);
- if (ent) {
+ if (ent != NULL) {
ent->type2 = 1;
CopyPosition(super, ent);
SetTile(this->unk_0x74, COORD_TO_TILE(super), super->collisionLayer);
@@ -159,7 +160,7 @@ void sub_08039ECC(FlyingSkullEntity* this) {
void sub_08039EE4(FlyingSkullEntity* this) {
super->subAction = 1;
COLLISION_OFF(super);
- super->collisions = 0;
+ super->collisions = COL_NONE;
super->hitbox = (Hitbox*)&gUnk_080FD340;
gPlayerEntity.animationState;
this->unk_0x76 = gPlayerEntity.animationState;
@@ -175,7 +176,7 @@ void sub_08039F4C(FlyingSkullEntity* this) {
void sub_08039F78(FlyingSkullEntity* this) {
super->spritePriority.b1 = 1;
- if (super->z.HALF.HI == 0 || super->collisions) {
+ if (super->z.HALF.HI == 0 || (super->collisions != COL_NONE)) {
sub_0803A0E0(this);
}
}
@@ -222,7 +223,7 @@ void sub_0803A09C(FlyingSkullEntity* this) {
GetNextFrame(super);
ProcessMovement2(super);
- if (super->collisions) {
+ if (super->collisions != COL_NONE) {
sub_0803A0E0(this);
}
}
diff --git a/src/enemy/ghini.c b/src/enemy/ghini.c
index 7bd4179b..ab807ba0 100644
--- a/src/enemy/ghini.c
+++ b/src/enemy/ghini.c
@@ -113,7 +113,7 @@ void Ghini_OnConfused(GhiniEntity* this) {
}
void Ghini_OnGrabbed(GhiniEntity* this) {
- if (sub_0806F520()) {
+ if (sub_0806F520(super)) {
Ghini_SubActions[super->subAction](this);
} else {
sub_0803F51C(this);
diff --git a/src/enemy/gibdo.c b/src/enemy/gibdo.c
index 4e18f26e..611e2fcc 100644
--- a/src/enemy/gibdo.c
+++ b/src/enemy/gibdo.c
@@ -42,9 +42,6 @@ void sub_08037ACC(GibdoEntity*);
void Gibdo_CreateObjects(GibdoEntity*);
void sub_08037A14(GibdoEntity*);
-extern void sub_0804A4E4(Entity*, Entity*);
-u32 sub_0804A044(Entity*, Entity*, u32);
-
void (*const Gibdo_Functions[6])(Entity*);
void (*const gUnk_080CF2AC[9])(GibdoEntity*);
extern Entity* gUnk_020000B0;
diff --git a/src/enemy/gleerok.c b/src/enemy/gleerok.c
index 0577eec7..95c2232c 100644
--- a/src/enemy/gleerok.c
+++ b/src/enemy/gleerok.c
@@ -283,7 +283,7 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D3B8.inc", void sub_0802D3B8(GleerokE
do {
ent = CreateEnemy(GLEEROK, 1);
super->child = ent;
- if (ent) {
+ if (ent != NULL) {
ent->type2 = uvar1 + 1;
super->child->collisionLayer = super->collisionLayer;
super->child->x.HALF.HI = super->x.HALF.HI;
@@ -301,7 +301,7 @@ NONMATCH("asm/non_matching/gleerok/sub_0802D3B8.inc", void sub_0802D3B8(GleerokE
ent = CreateEnemy(GLEEROK, 2);
super->child = ent;
- if (ent) {
+ if (ent != NULL) {
super->child->collisionLayer = super->collisionLayer;
super->child->x.HALF.HI = super->x.HALF.HI;
super->child->y.HALF.HI = super->y.HALF.HI + ((uvar1 + 1) * 12);
@@ -760,7 +760,7 @@ void sub_0802DCE0(GleerokEntity* this) {
if (this->unk_84->ent2->field_0xf == 0) {
super->child = CreateProjectileWithParent(super, GLEEROK_PROJECTILE, 0);
- if (super->child) {
+ if (super->child != NULL) {
super->child->direction = this->unk_84->filler[0x15];
super->child->type2 = this->unk_84->ent2->frame & 0xf;
super->child->parent = this->unk_84->ent2;
@@ -827,7 +827,7 @@ void sub_0802DDD8(GleerokEntity* this) {
if (this->unk_84->ent2->field_0xf == 1) {
super->child = CreateProjectileWithParent(super, GLEEROK_PROJECTILE, r2);
- if (super->child) {
+ if (super->child != NULL) {
super->child->direction = this->unk_84->filler[0x15];
super->child->type2 = this->unk_84->ent2->frame & 0xf;
super->child->parent = this->unk_84->ent2;
@@ -1094,7 +1094,7 @@ void sub_0802E300(GleerokEntity* this) {
InitializeAnimation(super, 0x4d);
ent = CreateEnemy(GLEEROK, 5);
super->child = ent;
- if (super->child) {
+ if (super->child != NULL) {
super->child->parent = super;
heap->ent = super->child;
((GleerokEntity*)super->child)->unk_84 = heap;
diff --git a/src/enemy/gyorgChild.c b/src/enemy/gyorgChild.c
index 698ad03a..84bd4e6e 100644
--- a/src/enemy/gyorgChild.c
+++ b/src/enemy/gyorgChild.c
@@ -56,7 +56,7 @@ void GyorgChild_OnGrabbed(GyorgChildEntity* this) {
GyorgChild_OnGrabbed_Action1,
GyorgChild_OnGrabbed_Action3,
};
- if (sub_0806F520()) {
+ if (sub_0806F520(super)) {
GyorgChild_OnGrabbed_Actions[super->subAction](this);
}
}
diff --git a/src/enemy/helmasaur.c b/src/enemy/helmasaur.c
index 5d34065a..731e24bb 100644
--- a/src/enemy/helmasaur.c
+++ b/src/enemy/helmasaur.c
@@ -98,7 +98,7 @@ void sub_0802BCA8(Entity* this) {
this->field_0x3a = this->field_0x3a & 0xfb;
this->field_0x1c = 0x12;
ent = CreateEnemy(HELMASAUR, 1);
- if (ent) {
+ if (ent != NULL) {
ent->animationState = this->animationState;
CopyPosition(this, ent);
}
@@ -356,7 +356,7 @@ void sub_0802C18C(Entity* this) {
this->field_0x78.HALF.LO--;
if ((this->field_0x78.HALF.LO & 7) == 0) {
Entity* ent = CreateObject(SPECIAL_FX, 0x11, 0x40);
- if (ent) {
+ if (ent != NULL) {
PositionRelative(this, ent, 0, Q_16_16(1.0));
}
}
diff --git a/src/enemy/lakituCloud.c b/src/enemy/lakituCloud.c
index 25616556..1c311f6c 100644
--- a/src/enemy/lakituCloud.c
+++ b/src/enemy/lakituCloud.c
@@ -34,7 +34,7 @@ void LakituCloud_OnKnockback(Entity* this) {
}
void LakituCloud_OnGrabbed(Entity* this) {
- if (sub_0806F520(this) == 0) {
+ if (!sub_0806F520(this)) {
if (this->subAction == 2) {
sub_0803CE3C(this);
}
diff --git a/src/enemy/mazaalMacro.c b/src/enemy/mazaalMacro.c
index 6140e2e5..24cca8a9 100644
--- a/src/enemy/mazaalMacro.c
+++ b/src/enemy/mazaalMacro.c
@@ -144,7 +144,7 @@ void sub_08034E68(Entity* this) {
sub_08035120(this);
}
if (gRoomTransition.field_0x39 == 0) {
- if (sub_08079F8C() != 0) {
+ if (sub_08079F8C()) {
this->action = 3;
scriptExecutionContext = StartCutscene(this, (u16*)script_MazaalMacroDefeated);
*(ScriptExecutionContext**)&this->cutsceneBeh = scriptExecutionContext;
diff --git a/src/enemy/miniSlime.c b/src/enemy/miniSlime.c
index 7c82d1d6..aba4510e 100644
--- a/src/enemy/miniSlime.c
+++ b/src/enemy/miniSlime.c
@@ -34,7 +34,7 @@ void MiniSlime_OnCollision(Entity* this) {
void MiniSlime_OnDeath(Entity* this) {
Entity* parent = this->parent;
- if (this != parent && parent) {
+ if ((this != parent) && (parent != NULL)) {
this->field_0x6c.HALF.LO &= 0x7f;
this->parent->child = this->child;
this->child->parent = this->parent;
diff --git a/src/enemy/moldorm.c b/src/enemy/moldorm.c
index 7a5ab69c..2e7597ee 100644
--- a/src/enemy/moldorm.c
+++ b/src/enemy/moldorm.c
@@ -6,6 +6,7 @@
*/
#include "enemy.h"
+#include "collision.h"
#include "functions.h"
void sub_08022EAC(Entity*);
@@ -103,7 +104,7 @@ void sub_08022D40(Entity* this) {
sub_08022F14(this);
ProcessMovement0(this);
- if (this->collisions) {
+ if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
this->animationState = ((this->direction + 2) & 0x1c) >> 2;
this->frameIndex = this->animationState;
@@ -112,7 +113,7 @@ void sub_08022D40(Entity* this) {
}
void sub_08022D90(Entity* this) {
- if (this->parent->next) {
+ if (this->parent->next != NULL) {
Entity* parent;
gUnk_080CBBBC[this->action](this);
diff --git a/src/enemy/moldworm.c b/src/enemy/moldworm.c
index 03f29e2a..96a3ada3 100644
--- a/src/enemy/moldworm.c
+++ b/src/enemy/moldworm.c
@@ -42,7 +42,7 @@ NONMATCH("asm/non_matching/moldworm/Moldworm.inc", void Moldworm(Entity* this))
this->field_0x7c.BYTES.byte1 = this->field_0x7c.BYTES.byte0;
EnemyFunctionHandler(this, Moldworm_Functions);
} else {
- if (this->parent->next) {
+ if (this->parent->next != NULL) {
if (this->type != 8) {
sub_080235BC(this);
} else {
@@ -191,7 +191,7 @@ void sub_08023AB0(Entity*);
void sub_08023398(Entity* this) {
this->field_0x7c.BYTES.byte0++;
- if (this->field_0x7c.BYTES.byte3 && sub_08049FDC(this, 1) == 0) {
+ if (this->field_0x7c.BYTES.byte3 && !sub_08049FDC(this, 1)) {
this->field_0x78.HWORD = 1;
}
@@ -258,7 +258,7 @@ void sub_080234D8(Entity* this) {
}
void sub_0802351C(Entity* this) {
- if (this->actionDelay != 0 && (this->type2 == 1 || gPlayerEntity.frameIndex == 0xff)) {
+ if ((this->actionDelay != 0) && ((this->type2 == 1) || (gPlayerEntity.frameIndex == 0xff))) {
this->actionDelay = 0;
this->child->action = 3;
this->child->field_0xf = this->field_0x80.HALF.LO;
@@ -377,8 +377,8 @@ void sub_0802376C(Entity* this) {
void sub_080237D8(Entity* this) {
Entity* parent = this->parent;
- if (parent->animIndex == 0x17 && this->actionDelay != 0 && this->x.HALF.HI == parent->x.HALF.HI &&
- this->y.HALF.HI == parent->y.HALF.HI) {
+ if ((parent->animIndex == 0x17) && (this->actionDelay != 0) && (this->x.HALF.HI == parent->x.HALF.HI) &&
+ (this->y.HALF.HI == parent->y.HALF.HI)) {
this->action = 1;
COLLISION_OFF(this);
this->spriteSettings.draw = 0;
@@ -501,7 +501,7 @@ void sub_08023AB0(Entity* this) {
if (this->field_0x7a.HALF.HI == 8) {
if (this->field_0x7c.BYTES.byte2) {
this->field_0x7c.BYTES.byte2--;
- } else if (!sub_08023B38(this) || 0x1d >= this->field_0x78.HWORD) {
+ } else if (!sub_08023B38(this) || (this->field_0x78.HWORD <= 0x1D)) {
this->hitType = 0x85;
this->field_0x7a.HALF.HI = 0;
this->field_0x7c.BYTES.byte2 = 30;
diff --git a/src/enemy/mulldozer.c b/src/enemy/mulldozer.c
index 6a6a79de..1550c4d1 100644
--- a/src/enemy/mulldozer.c
+++ b/src/enemy/mulldozer.c
@@ -7,6 +7,7 @@
#define NENT_DEPRECATED
#include "global.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -63,11 +64,11 @@ void sub_08032CAC(MulldozerEntity* this) {
case 2:
case 3:
super->action = 6;
- super->actionDelay = super->type != 0 ? 0x5a : 200;
+ super->actionDelay = (super->type != 0) ? 0x5a : 200;
super->field_0xf = 2;
this->unk_80 = 3;
super->direction = super->knockbackDirection;
- super->direction = (super->direction + ((Random() & 0x40) != 0 ? 4 : 0x1c));
+ super->direction += ((Random() & 0x40) != 0) ? 4 : 0x1c;
super->direction &= 0x1f;
super->speed = 0;
break;
@@ -102,7 +103,7 @@ void Mulldozer_Action1(MulldozerEntity* this) {
if (--super->actionDelay == 0) {
sub_080330C0(this);
} else {
- if (sub_08033364(this) != 0) {
+ if (sub_08033364(this)) {
sub_08033100(this);
}
}
@@ -200,7 +201,7 @@ void sub_08032F48(MulldozerEntity* this) {
}
void sub_08032F64(MulldozerEntity* this) {
- if (super->collisions != 0) {
+ if (super->collisions != COL_NONE) {
sub_0800417E(super, super->collisions);
super->animationState = super->direction >> 2;
sub_08032F24(this);
diff --git a/src/enemy/octorok.c b/src/enemy/octorok.c
index a205d1d6..85ed9aaa 100644
--- a/src/enemy/octorok.c
+++ b/src/enemy/octorok.c
@@ -129,7 +129,7 @@ void Octorok_ShootNut(Entity* this) {
GetNextFrame(this);
if (this->frame & 1) {
Entity* ent = CreateProjectileWithParent(this, ROCK_PROJECTILE, 0);
- if (ent) {
+ if (ent != NULL) {
const s8* off;
ent->direction = this->direction;
off = &gOctorokNutOffset[this->direction / 4];
diff --git a/src/enemy/octorokBoss.c b/src/enemy/octorokBoss.c
index 49ca9525..d69fefd0 100644
--- a/src/enemy/octorokBoss.c
+++ b/src/enemy/octorokBoss.c
@@ -6,6 +6,7 @@
*/
#define NENT_DEPRECATED
#include "enemy/octorokBoss.h"
+#include "collision.h"
#include "functions.h"
#include "game.h"
#include "object.h"
@@ -494,7 +495,7 @@ void OctorokBoss_Action1(OctorokBossEntity* this) {
sub_08036914(super, angle, radius);
this->angle.HALF.HI = -((OctorokBossEntity*)super->parent)->angle.HALF.HI;
}
- if (IS_FROZEN((OctorokBossEntity*)super->parent) == 0) {
+ if (!IS_FROZEN((OctorokBossEntity*)super->parent)) {
super->spriteSettings.draw |= 1;
}
break;
@@ -639,14 +640,15 @@ void OctorokBoss_Action1_ChargeAttack(OctorokBossEntity* this) {
if (this->timer == 0) {
ProcessMovement0(super);
- knockbackCondition = 0;
+ knockbackCondition = FALSE;
if ((super->direction != 0) && (super->direction != 0x10)) {
- knockbackCondition = ((u32)super->collisions & 0xee00) != 0;
+ knockbackCondition = ((super->collisions & (COL_EAST_ANY | COL_WEST_ANY)) != COL_NONE);
}
- if (((super->direction != 0x18) && (super->direction != 8)) && ((super->collisions & 0xee) != 0)) {
- knockbackCondition = 1;
+ if (((super->direction != 0x18) && (super->direction != 8)) &&
+ (super->collisions & (COL_NORTH_ANY | COL_SOUTH_ANY))) {
+ knockbackCondition = TRUE;
}
- if (knockbackCondition != 0) {
+ if (knockbackCondition) {
super->knockbackDuration = 0x20;
super->knockbackSpeed = 0x200;
super->knockbackDirection = super->direction ^ 0x10;
@@ -911,7 +913,7 @@ void OctorokBoss_Burning(OctorokBossEntity* this) {
void OctorokBoss_Burning_SubAction0(OctorokBossEntity* this) {
super->subAction = 1;
super->speed = 0x200;
- super->collisions = 0;
+ super->collisions = COL_NONE;
super->direction = (u8)(-this->angle.HALF.HI ^ 0x80U) >> 3;
this->timer = 0x78;
this->angularSpeed.HWORD = 0x180;
@@ -922,13 +924,13 @@ void OctorokBoss_Burning_SubAction0(OctorokBossEntity* this) {
void OctorokBoss_Burning_SubAction1(OctorokBossEntity* this) {
ProcessMovement0(super);
- if (super->collisions != 0) {
+ if (super->collisions != COL_NONE) {
super->subAction = 2;
this->heap->targetAngle = this->angle.HALF.HI;
- if ((super->collisions & 0xee00) != 0) {
+ if ((super->collisions & (COL_EAST_ANY | COL_WEST_ANY)) != COL_NONE) {
this->heap->targetAngle = -this->heap->targetAngle;
}
- if ((super->collisions & 0xee) != 0) {
+ if ((super->collisions & (COL_NORTH_ANY | COL_SOUTH_ANY)) != COL_NONE) {
this->heap->targetAngle = -this->heap->targetAngle ^ 0x80;
}
super->knockbackDuration = 0x18;
@@ -951,10 +953,10 @@ void OctorokBoss_Burning_SubAction2(OctorokBossEntity* this) {
if ((u32)(this->heap->targetAngle - this->angle.HALF.HI + 7) < 0xf) {
super->subAction = 1;
super->direction = ((u8) - this->angle.HALF.HI ^ 0x80) >> 3;
- super->collisions = 0;
+ super->collisions = COL_NONE;
ProcessMovement0(super);
} else {
- if ((u8)(this->heap->targetAngle - this->angle.HALF.HI) >= 0x81) {
+ if ((u8)(this->heap->targetAngle - this->angle.HALF.HI) > 0x80) {
this->angle.HWORD -= this->angularSpeed.HWORD;
} else {
this->angle.HWORD += this->angularSpeed.HWORD;
@@ -1161,7 +1163,7 @@ void OctorokBoss_StartRegularAttack(OctorokBossEntity* this) {
super->subAction = ACTION1_SUBACTION2;
super->speed = 0x200;
this->timer = 0x3c;
- super->collisions = 0;
+ super->collisions = COL_NONE;
this->heap->unk_0 = 4;
SoundReq(SFX_159);
return;
diff --git a/src/enemy/octorokGolden.c b/src/enemy/octorokGolden.c
index 4bdac449..a2fcfab6 100644
--- a/src/enemy/octorokGolden.c
+++ b/src/enemy/octorokGolden.c
@@ -8,9 +8,6 @@ extern void (*const gUnk_080012C8[])(Entity*);
const s8 gUnk_080CF490[];
const u8 gUnk_080CF498[];
-extern s32 sub_080012DC(Entity*);
-extern u32 sub_0804A044(Entity*, Entity*, u32);
-
void sub_08037E14(Entity* this);
bool32 sub_08037E90(Entity* this);
diff --git a/src/enemy/peahat.c b/src/enemy/peahat.c
index c6051ba0..93452e64 100644
--- a/src/enemy/peahat.c
+++ b/src/enemy/peahat.c
@@ -19,9 +19,6 @@ extern const s8 gUnk_080CA5D4[];
void sub_080205F8(Entity*);
void sub_08020604(Entity*);
-extern u32 sub_08049F1C(Entity*, Entity*, u32);
-extern void sub_0804AA1C(Entity*);
-
extern Entity* gUnk_020000B0;
enum {
@@ -57,7 +54,7 @@ void Peahat_OnCollision(Entity* this) {
if (this->field_0x82.HALF.LO) {
if (this->bitfield == 0x94) {
Entity* ent = CreateEnemy(PEAHAT, PeahatForm_Propeller);
- if (ent) {
+ if (ent != NULL) {
CopyPosition(this, ent);
ent->z.HALF.HI -= 8;
}
diff --git a/src/enemy/pesto.c b/src/enemy/pesto.c
index f7f8baf1..210d8b41 100644
--- a/src/enemy/pesto.c
+++ b/src/enemy/pesto.c
@@ -6,6 +6,7 @@
*/
#include "enemy.h"
+#include "collision.h"
#include "object.h"
#include "game.h"
#include "functions.h"
@@ -170,7 +171,7 @@ void sub_080240B8(Entity* this) {
this->field_0x82.HALF.HI = 0;
ent = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
- if (ent) {
+ if (ent != NULL) {
this->child = ent;
ent->parent = this;
ent->y.HALF.HI += 0x10;
@@ -413,7 +414,7 @@ void sub_080244E8(Entity* this) {
this->field_0x78.HWORD -= 0xe;
ent = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
- if (ent) {
+ if (ent != NULL) {
ent->parent = this;
ent->z.HALF.HI += 0xe;
ent->child = this->child;
@@ -436,7 +437,7 @@ void sub_080244E8(Entity* this) {
this->field_0x78.HWORD -= 0xe;
ent = CreateProjectileWithParent(this, DIRT_BALL_PROJECTILE, this->field_0x82.HALF.HI);
- if (ent) {
+ if (ent != NULL) {
ent->parent = this;
ent->z.HALF.HI += 0xe;
this->child = ent;
@@ -525,7 +526,7 @@ void sub_080244E8(Entity* this) {
void sub_08024940(Entity* this) {
u32 random = Random() & 0x70;
- if (this->collisions != 0) {
+ if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
sub_080249F4(this);
}
@@ -661,7 +662,7 @@ bool32 sub_08024B38(Entity* this) {
}
ent = FindEntityByID(PLAYER_ITEM, PLAYER_ITEM_BOMB, 2);
- if (ent) {
+ if (ent != NULL) {
do {
if (ent->action != 2 && ent->z.HALF.HI == 0 && sub_08049F1C(this, ent, 0xa0)) {
iVar4 = 1;
@@ -678,7 +679,7 @@ bool32 sub_08024B38(Entity* this) {
}
ent = FindEntityByID(OBJECT, POT, 6);
- if (ent) {
+ if (ent != NULL) {
do {
if (ent->action == 1 && sub_08049F1C(this, ent, 0xa0)) {
iVar4 = 1;
diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c
index 18838cf6..3b080dd8 100644
--- a/src/enemy/puffstool.c
+++ b/src/enemy/puffstool.c
@@ -6,6 +6,7 @@
*/
#include "enemy.h"
+#include "collision.h"
#include "object.h"
#include "functions.h"
@@ -156,7 +157,7 @@ void sub_08025230(Entity* this) {
this->direction = sub_08025C60(this);
}
- if (this->collisions != 0) {
+ if (this->collisions != COL_NONE) {
if (--this->field_0xf == 0) {
sub_0800417E(this, this->collisions);
}
@@ -528,12 +529,12 @@ void sub_08025AE8(Entity* this) {
Entity* ent;
ent = CreateFx(this, FX_BROWN_SMOKE, 0);
- if (ent) {
+ if (ent != NULL) {
ent->y.WORD--;
}
ent = CreateFx(this, FX_BROWN_SMOKE_LARGE, 0);
- if (ent) {
+ if (ent != NULL) {
ent->y.WORD++;
}
}
@@ -552,7 +553,7 @@ void sub_08025B18(Entity* this) {
sub_08025AB8((((x + offset[0]) >> 4) & 0x3fU) | ((((y + offset[1]) >> 4) & 0x3fU) << 6), layer);
ent = CreateObject(OBJECT_21, 2, 0);
- if (ent) {
+ if (ent != NULL) {
PositionRelative(this, ent, Q_16_16(offset[0]), Q_16_16(offset[1]));
ent->x.HALF.HI &= -0x10;
ent->x.HALF.HI += 8;
@@ -566,7 +567,7 @@ void sub_08025B18(Entity* this) {
void sub_08025BD4(Entity* this) {
if (this->field_0x82.HALF.LO && (this->frame & 1) == 0) {
Entity* ent = CreateObject(OBJECT_21, 0, 0);
- if (ent) {
+ if (ent != NULL) {
PositionRelative(this, ent, Q_16_16(gUnk_080CC0BA[this->animationState * 2 + 0]),
Q_16_16(gUnk_080CC0BA[this->animationState * 2 + 1]));
ent->z.HALF.HI = -10;
diff --git a/src/enemy/rockChuchu.c b/src/enemy/rockChuchu.c
index f1d8bad4..9f118b2b 100644
--- a/src/enemy/rockChuchu.c
+++ b/src/enemy/rockChuchu.c
@@ -8,8 +8,6 @@
#include "enemy.h"
#include "functions.h"
-extern void sub_0804A4E4(Entity*, Entity*);
-
extern void (*const RockChuchu_Functions[])(Entity*);
extern void (*const gUnk_080CB960[])(Entity*);
@@ -47,7 +45,7 @@ void RockChuchu_OnCollision(Entity* this) {
case 0x1c:
CreateFx(this, FX_ROCK, 0);
ent = CreateEnemy(CHUCHU, 1);
- if (ent) {
+ if (ent != NULL) {
ent->type2 = 1;
#ifndef EU
ent->iframes = -8;
@@ -102,7 +100,7 @@ void sub_080223E4(Entity* this) {
Entity* ent;
ent = this->child;
- if (ent) {
+ if (ent != NULL) {
ent->bitfield = 0x94;
ent->iframes = 0x10;
#ifndef EU
diff --git a/src/enemy/rope.c b/src/enemy/rope.c
index 8d728a03..37c63337 100644
--- a/src/enemy/rope.c
+++ b/src/enemy/rope.c
@@ -12,7 +12,6 @@ extern void (*const Rope_Functions[6])(Entity*);
extern void (*const gUnk_080CE460[4])(Entity*);
extern void (*const gUnk_080CE470[3])(Entity*);
extern Entity* gUnk_020000B0;
-extern u32 sub_0804A044(Entity*, Entity*, u32);
void sub_08031600(Entity*);
u32 sub_0803163C(Entity*);
@@ -39,7 +38,7 @@ void Rope_OnCollision(Entity* this) {
}
void Rope_OnGrabbed(Entity* this) {
- if (sub_0806F520()) {
+ if (sub_0806F520(this)) {
gUnk_080CE470[this->subAction](this);
}
}
diff --git a/src/enemy/ropeGolden.c b/src/enemy/ropeGolden.c
index ca3a57c7..a4a6fc99 100644
--- a/src/enemy/ropeGolden.c
+++ b/src/enemy/ropeGolden.c
@@ -14,9 +14,6 @@ extern void (*const gUnk_080012C8[])(Entity*);
extern void (*const RopeGolden_Functions[6])(Entity*);
extern void (*const gUnk_080CF4E0[4])(Entity*);
-extern s32 sub_080012DC(Entity*);
-extern u32 sub_0804A044(Entity*, Entity*, u32);
-
void sub_080383AC(Entity*);
void sub_080383E4(Entity*);
diff --git a/src/enemy/scissorsBeetle.c b/src/enemy/scissorsBeetle.c
index 28ce9d57..66914591 100644
--- a/src/enemy/scissorsBeetle.c
+++ b/src/enemy/scissorsBeetle.c
@@ -1,4 +1,5 @@
#define NENT_DEPRECATED
+#include "collision.h"
#include "entity.h"
#include "enemy.h"
#include "functions.h"
@@ -63,7 +64,7 @@ void ScissorsBeetle_OnGrabbed(ScissorsBeetleEntity* this) {
void ScissorsBeetle_Init(ScissorsBeetleEntity* this) {
Entity* ent = CreateProjectile(MANDIBLES_PROJECTILE);
- if (!ent)
+ if (ent == NULL)
return;
sub_0804A720(super);
@@ -92,7 +93,7 @@ void sub_080389E8(ScissorsBeetleEntity* this) {
sub_08038C2C((ScissorsBeetleEntity*)child);
} else if (super->actionDelay) {
super->actionDelay--;
- } else if (super->collisions) {
+ } else if (super->collisions != COL_NONE) {
super->actionDelay = 0xc;
if ((child->animationState & 1) == 0) {
child->animationState += Random() & 0x20 ? 1 : 7;
diff --git a/src/enemy/slime.c b/src/enemy/slime.c
index 3c88ae1c..ddae5cb9 100644
--- a/src/enemy/slime.c
+++ b/src/enemy/slime.c
@@ -15,8 +15,6 @@ typedef struct {
void sub_08044FF8(Entity*);
void sub_08045178(Entity*, Entity*, int, int);
-extern void sub_0804A4E4(Entity*, Entity*);
-
extern void (*const gUnk_080D16BC[])(Entity*);
extern void (*const Slime_Functions[])(Entity*);
extern u8 gUnk_080D16D0[4]; // Entity count per form
@@ -116,7 +114,7 @@ void sub_080450A8(Entity* this) {
}
ent = CreateFx(this, FX_DEATH, 0);
- if (ent)
+ if (ent != NULL)
CopyPosition(this, ent);
DeleteEntity(this);
diff --git a/src/enemy/sluggula.c b/src/enemy/sluggula.c
index 5405cf71..759a3c5c 100644
--- a/src/enemy/sluggula.c
+++ b/src/enemy/sluggula.c
@@ -8,13 +8,9 @@
#include "enemy.h"
#include "functions.h"
-extern s32 sub_080012DC(Entity*);
-bool32 PlayerInRange(Entity*, u32, u32);
-
void sub_08023E10(Entity*);
void sub_08023E54(Entity*);
void sub_08023E9C(Entity*);
-void sub_0804A4E4(Entity*, Entity*);
extern void (*const gUnk_080012C8[])(Entity*);
@@ -136,7 +132,7 @@ void sub_08023CE0(Entity* this) {
if (this->frame) {
if (this->frame & ANIM_DONE) {
Entity* ent = CreateEnemy(SLUGGULA, 1);
- if (ent) {
+ if (ent != NULL) {
sub_0804A4E4(this, ent);
DeleteThisEntity();
}
@@ -167,7 +163,7 @@ void sub_08023E54(Entity* this) {
if (this->field_0xf++ > 27) {
this->field_0xf = 0;
ent = CreateEnemy(SLUGGULA, 2);
- if (ent) {
+ if (ent != NULL) {
const s8* ptr = &gUnk_080CBDF7[this->animationState * 2];
PositionRelative(this, ent, Q_16_16(ptr[0]), Q_16_16(ptr[1]));
}
@@ -178,7 +174,7 @@ extern Entity* gUnk_020000B0;
void sub_08023E9C(Entity* this) {
u32 uVar3 = Random();
- if (sub_08049FA0(this) == 0 && (uVar3 & 1)) {
+ if (!sub_08049FA0(this) && (uVar3 & 1)) {
this->direction = DirectionRoundUp(sub_08049EE4(this));
} else if (sub_08049FDC(this, 1) && (uVar3 & 6)) {
u32 uVar3 = GetFacingDirection(this, gUnk_020000B0) - this->direction;
diff --git a/src/enemy/spark.c b/src/enemy/spark.c
index f6f9325d..32cb9345 100644
--- a/src/enemy/spark.c
+++ b/src/enemy/spark.c
@@ -5,6 +5,7 @@
* @brief Spark enemy
*/
+#include "collision.h"
#include "enemy.h"
#include "object.h"
#include "functions.h"
@@ -30,7 +31,7 @@ void Spark_OnCollision(Entity* this) {
this->spriteSettings.draw = 0;
this->action = 2;
ent = CreateFx(this, FX_DEATH, 0);
- if (ent) {
+ if (ent != NULL) {
this->child = ent;
this->actionDelay = 14;
CopyPosition(this, ent);
@@ -40,7 +41,6 @@ void Spark_OnCollision(Entity* this) {
}
void Spark_OnGrabbed(Entity* this) {
- /* ... */
}
void sub_0802B33C(Entity* this) {
@@ -57,7 +57,7 @@ void sub_0802B35C(Entity* this) {
GetNextFrame(this);
ProcessMovement0(this);
is_head = this->type == 0;
- if (this->collisions == 0) {
+ if (this->collisions == COL_NONE) {
if (--this->field_0xf == 0) {
this->field_0xf = 0x78;
@@ -68,49 +68,49 @@ void sub_0802B35C(Entity* this) {
this->field_0xf = 0x78;
switch (DirectionRound(this->direction)) {
case DirectionNorth:
- if (this->collisions & 0xe) {
+ if ((this->collisions & COL_NORTH_ANY) != COL_NONE) {
this->direction = is_head ? DirectionWest : DirectionEast;
} else {
- if ((this->collisions & 0xe000) == 0x4000 && is_head) {
+ if (((this->collisions & COL_EAST_ANY) == COL_EAST_NORTH) && is_head) {
this->direction = DirectionEast;
}
- if ((this->collisions & 0xe00) == 0x400 && !is_head) {
+ if (((this->collisions & COL_WEST_ANY) == COL_WEST_NORTH) && !is_head) {
this->direction = DirectionWest;
}
}
break;
case DirectionSouth:
- if (this->collisions & 0xe0) {
+ if ((this->collisions & COL_SOUTH_ANY) != COL_NONE) {
this->direction = is_head ? DirectionEast : DirectionWest;
} else {
- if ((this->collisions & 0xe000) == 0x2000 && !is_head) {
+ if (((this->collisions & COL_EAST_ANY) == COL_EAST_SOUTH) && !is_head) {
this->direction = DirectionEast;
}
- if ((this->collisions & 0xe00) == 0x200 && is_head) {
+ if (((this->collisions & COL_WEST_ANY) == COL_WEST_SOUTH) && is_head) {
this->direction = DirectionWest;
}
}
break;
case DirectionWest:
- if (this->collisions & 0xe00) {
+ if ((this->collisions & COL_WEST_ANY) != COL_NONE) {
this->direction = is_head ? DirectionSouth : DirectionNorth;
} else {
- if ((this->collisions & 0xe) == 4 && is_head) {
+ if (((this->collisions & COL_NORTH_ANY) == COL_NORTH_EAST) && is_head) {
this->direction = DirectionNorth;
}
- if ((this->collisions & 0xe0) == 0x40 && !is_head) {
+ if (((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_EAST) && !is_head) {
this->direction = DirectionSouth;
}
}
break;
case DirectionEast:
- if (this->collisions & 0xe000) {
+ if ((this->collisions & COL_EAST_ANY) != COL_NONE) {
this->direction = is_head ? DirectionNorth : DirectionSouth;
} else {
- if ((this->collisions & 0xe) == 2 && !is_head) {
+ if (((this->collisions & COL_NORTH_ANY) == COL_NORTH_WEST) && !is_head) {
this->direction = DirectionNorth;
}
- if ((this->collisions & 0xe0) == 0x20 && is_head) {
+ if (((this->collisions & COL_SOUTH_ANY) == COL_SOUTH_WEST) && is_head) {
this->direction = DirectionSouth;
}
}
@@ -122,7 +122,7 @@ void sub_0802B35C(Entity* this) {
void sub_0802B4A8(Entity* this) {
if (--this->actionDelay == 0) {
Entity* ent = CreateObjectWithParent(this, GROUND_ITEM, 0x60, 0);
- if (ent) {
+ if (ent != NULL) {
ent->y.HALF.HI -= 4;
}
DeleteEntity(this);
diff --git a/src/enemy/spearMoblin.c b/src/enemy/spearMoblin.c
index 53412903..a824b803 100644
--- a/src/enemy/spearMoblin.c
+++ b/src/enemy/spearMoblin.c
@@ -380,7 +380,7 @@ bool32 sub_080288A4(Entity* this) {
void sub_080288C0(Entity* this) {
Entity* ent = this->child;
- if (ent && (ent->bitfield & 0x80)) {
+ if ((ent != NULL) && (ent->bitfield & 0x80)) {
this->knockbackDirection = ent->knockbackDirection;
this->iframes = -ent->iframes;
this->knockbackSpeed = ent->knockbackSpeed;
diff --git a/src/enemy/spinyChuchu.c b/src/enemy/spinyChuchu.c
index 7d49e0d2..7499234b 100644
--- a/src/enemy/spinyChuchu.c
+++ b/src/enemy/spinyChuchu.c
@@ -9,11 +9,6 @@
#include "functions.h"
#include "hitbox.h"
-extern void sub_08001318(Entity*);
-extern u32 PlayerInRange(Entity*, u32, u32);
-extern void sub_0804A4E4(Entity*, Entity*);
-extern void sub_0804AA1C(Entity*);
-
u32 sub_080228CC(Entity*);
u32 sub_080228F0(Entity*);
diff --git a/src/enemy/stalfos.c b/src/enemy/stalfos.c
index 67f6b6e1..31086dc1 100644
--- a/src/enemy/stalfos.c
+++ b/src/enemy/stalfos.c
@@ -7,6 +7,7 @@
#define NENT_DEPRECATED
#include "global.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -123,7 +124,7 @@ void sub_08039418(StalfosEntity* this) {
}
void sub_08039438(StalfosEntity* this) {
- if (sub_0806F520()) {
+ if (sub_0806F520(super)) {
Stalfos_SubActions[super->subAction](this);
}
}
@@ -366,7 +367,7 @@ void sub_0803992C(StalfosEntity* this) {
super->direction = super->animationState << 3;
this->unk_78 = (u16)gUnk_080CF900[Random() & 0xf];
CalculateEntityTileCollisions(super, super->direction, 0);
- if ((gUnk_080CF910[super->animationState] & super->collisions) != 0) {
+ if ((gUnk_080CF910[super->animationState] & super->collisions) != COL_NONE) {
InitAnimationForceUpdate(super, super->animationState);
} else {
InitAnimationForceUpdate(super, super->animationState + 4);
diff --git a/src/enemy/takkuri.c b/src/enemy/takkuri.c
index dc28b862..64c61158 100644
--- a/src/enemy/takkuri.c
+++ b/src/enemy/takkuri.c
@@ -74,7 +74,7 @@ void Takkuri_OnCollision(TakkuriEntity* this) {
void Takkuri_OnGrabbed(TakkuriEntity* this) {
gUnk_080CFF6C[super->subAction](this);
GetNextFrame(super);
- if (sub_0806F520(super) == 0) {
+ if (!sub_0806F520(super)) {
super->action = 2;
super->subAction = 0;
this->unk_0x84 = 2;
@@ -132,7 +132,7 @@ void sub_0803BD08(TakkuriEntity* this) {
sub_0803BEE8(this);
GetNextFrame(super);
ent = sub_08049DF4(1);
- if (ent) {
+ if (ent != NULL) {
if (EntityInRectRadius(super, gUnk_020000B0, 0x88, 0x50)) {
if (gUnk_020000B0->y.HALF.HI > super->y.HALF.HI + 8) {
super->action = 2;
@@ -306,7 +306,7 @@ void sub_0803C0AC(Entity* this) {
u32 index, rupeeType, rupees;
Entity* ent;
ent = sub_08049DF4(1);
- if (!ent)
+ if (ent == NULL)
return;
rupees = gSave.stats.rupees;
diff --git a/src/enemy/tektite.c b/src/enemy/tektite.c
index db461a94..776f08e5 100644
--- a/src/enemy/tektite.c
+++ b/src/enemy/tektite.c
@@ -5,6 +5,7 @@
* @brief Tektite enemy
*/
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -135,7 +136,7 @@ void sub_0802F300(Entity* this) {
this->field_0xf = 0;
InitializeAnimation(this, 3);
return;
- } else if (this->collisions != 0) {
+ } else if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
} else if ((GetTileUnderEntity(this) & 0xf0) == 0x50) {
this->direction = (this->direction + 0x10) & 0x1f;
diff --git a/src/enemy/tektiteGolden.c b/src/enemy/tektiteGolden.c
index af71db25..f8862aa8 100644
--- a/src/enemy/tektiteGolden.c
+++ b/src/enemy/tektiteGolden.c
@@ -5,6 +5,7 @@
* @brief Golden Tektite enemy
*/
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -114,7 +115,7 @@ void sub_08038048(Entity* this) {
this->actionDelay = 0x14;
InitializeAnimation(this, 3);
return;
- } else if (this->collisions != 0) {
+ } else if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
} else if ((GetTileUnderEntity(this) & 0xf0) == 0x50) {
this->direction = (this->direction + 0x10) & 0x1f;
diff --git a/src/enemy/vaatiWrath.c b/src/enemy/vaatiWrath.c
index 2d8c3619..f2c8c769 100644
--- a/src/enemy/vaatiWrath.c
+++ b/src/enemy/vaatiWrath.c
@@ -561,7 +561,7 @@ void VaatiWrathType0ActionD(Entity* this) {
void sub_08041BE8(Entity* this) {
Entity* entity;
- if (sub_08079F8C() != 0) {
+ if (sub_08079F8C()) {
this->subAction = 1;
this->actionDelay = 120;
this->updatePriority = PRIO_NO_BLOCK;
diff --git a/src/enemy/waterDrop.c b/src/enemy/waterDrop.c
index 629c54cd..2b390879 100644
--- a/src/enemy/waterDrop.c
+++ b/src/enemy/waterDrop.c
@@ -34,7 +34,7 @@ void sub_0802A250(Entity* this) {
UpdateSpriteForCollisionLayer(this);
ent = CreateObject(OBJECT_66, 0, 0);
- if (ent) {
+ if (ent != NULL) {
ent->parent = this;
}
}
diff --git a/src/enemy/wisp.c b/src/enemy/wisp.c
index 94943d52..73f82457 100644
--- a/src/enemy/wisp.c
+++ b/src/enemy/wisp.c
@@ -5,6 +5,7 @@
* @brief Wisp enemy
*/
+#include "collision.h"
#include "enemy.h"
#include "save.h"
#include "object.h"
@@ -69,7 +70,7 @@ void Wisp_OnCollision(Entity* this) {
}
void Wisp_OnGrabbed(Entity* this) {
- if (sub_0806F520() != 0) {
+ if (sub_0806F520(this)) {
gUnk_080CEB98[this->subAction](this);
}
}
@@ -102,7 +103,7 @@ void sub_08033674(Entity* this) {
void sub_080336A8(Entity* this) {
if (--this->actionDelay == 0) {
sub_08033744(this);
- } else if (this->collisions != 0) {
+ } else if (this->collisions != COL_NONE) {
sub_0800417E(this, this->collisions);
}
ProcessMovement0(this);
diff --git a/src/enemy/wizzrobeWind.c b/src/enemy/wizzrobeWind.c
index 4ea7da19..4fce3d5a 100644
--- a/src/enemy/wizzrobeWind.c
+++ b/src/enemy/wizzrobeWind.c
@@ -7,6 +7,7 @@
#define NENT_DEPRECATED
#include "global.h"
+#include "collision.h"
#include "enemy.h"
#include "enemy/wizzrobe.h"
#include "functions.h"
@@ -262,7 +263,7 @@ void sub_0802F9C8(WizzrobeEntity* this) {
} else {
if (super->type2 != 0) {
ProcessMovement0(super);
- if (super->collisions != 0) {
+ if (super->collisions != COL_NONE) {
super->flags &= 0x7f;
this->timer1 = 0x28;
}
diff --git a/src/entity.c b/src/entity.c
index d696050c..7345650f 100644
--- a/src/entity.c
+++ b/src/entity.c
@@ -339,7 +339,7 @@ void DeleteEntityAny(Entity* ent) {
}
void DeleteEntity(Entity* ent) {
- if (ent->next) {
+ if (ent->next != NULL) {
UnloadGFXSlots(ent);
UnloadOBJPalette(ent);
UnloadOBJPalette2(ent);
@@ -418,7 +418,7 @@ Manager* GetEmptyManager(void) {
void DeleteManager(void* ent) {
Manager* manager = (Manager*)ent;
- if (!manager->next)
+ if (manager->next == NULL)
return;
ReleaseTransitionManager(manager);
diff --git a/src/fileselect.c b/src/fileselect.c
index 93355380..b0ce954b 100644
--- a/src/fileselect.c
+++ b/src/fileselect.c
@@ -106,12 +106,12 @@ void sub_08051458(void);
void CreateDialogBox(u32 arg0, u32 arg1) {
u32 sfx;
- struct_080FC844 var0;
+ Font var0;
sub_08050384();
MemCopy(&gUnk_080FC844, &var0, sizeof(gUnk_080FC844));
sub_08056FEC(arg1, gUnk_020227E8);
- var0.unk10 |= gUnk_080FC85C[arg0][0] << 0xC;
+ var0.gfx_src |= gUnk_080FC85C[arg0][0] << 0xC;
sub_0805F46C(gUnk_080FC85C[arg0][1], &var0);
sfx = gUnk_080FC85C[arg0][2];
if (sfx) {
@@ -296,7 +296,7 @@ static void sub_0805066C(void) {
void sub_0805070C(void) {
u32 i;
int j;
- struct_02036540* var0;
+ WStruct* var0;
char* name;
var0 = sub_0805F2C8();
@@ -322,7 +322,7 @@ void sub_0805070C(void) {
void sub_08050790(void) {
u32 i, j;
- struct_02036540* var0;
+ WStruct* var0;
u32 var1;
var0 = sub_0805F2C8();
diff --git a/src/game.c b/src/game.c
index b4465752..7baf9d5c 100644
--- a/src/game.c
+++ b/src/game.c
@@ -30,6 +30,8 @@
#include "subtask.h"
#include "itemMetaData.h"
#include "player.h"
+#include "transitions.h"
+#include "roomid.h"
// Game task
@@ -82,10 +84,8 @@ extern void** gAreaTilesets[];
extern void** gAreaRoomMaps[];
extern void* gAreaMetatiles[];
extern void* gUnk_080B755C[];
-extern void** gExitLists[];
extern void** gAreaTable[];
-extern void CreateDialogBox(u32, u32);
extern void FinalizeSave(void);
extern void ClearArmosData(void);
extern void ClearRoomMemory(void);
@@ -169,24 +169,6 @@ typedef struct {
extern struct_08127F94 gUnk_08127F94[];
typedef struct {
- u16* dest;
- void* gfx_dest;
- void* buffer_loc;
- u32 _c;
- u16 gfx_src;
- u8 width;
- u8 right_align : 1;
- u8 sm_border : 1;
- u8 unused : 1;
- u8 draw_border : 1;
- u8 border_type : 4;
- u8 fill_type;
- u8 _15;
- u8 _16;
- u8 stylized;
-} Font;
-
-typedef struct {
u8 dest_off[8];
u8 _8;
u8 right_align;
@@ -195,7 +177,7 @@ typedef struct {
typedef struct {
u8 area;
- u8 room;
+ RoomID room : 8;
u8 _2;
u8 _3;
u16 x;
@@ -1438,7 +1420,7 @@ static void InitRoomResInfo(RoomResInfo* info, RoomHeader* r_hdr, u32 area, u32
info->map = *(gAreaRoomMaps[area] + room);
info->metatiles = gAreaMetatiles[area];
info->bg_anim = gUnk_080B755C[area];
- info->exits = *(gExitLists[area] + room);
+ info->exits = gExitLists[area][room];
if (gAreaTable[area] != NULL) {
info->properties = *(gAreaTable[area] + room);
}
diff --git a/src/manager/manager4.c b/src/manager/manager4.c
index 7568960d..7ed53807 100644
--- a/src/manager/manager4.c
+++ b/src/manager/manager4.c
@@ -12,7 +12,7 @@ void Manager4_Main(Manager* this) {
gUnk_08107C70[this->action](this);
}
-extern void sub_080805F8(void);
+extern void UpdateIsDiggingCave(void);
extern DiggingCaveEntrance* sub_08057AA8(DiggingCaveEntrance*, int);
@@ -21,8 +21,8 @@ void sub_0805786C(Manager* this) {
u8 room;
u8 area;
u16 uVar = 0x81 << 7;
- sub_080805F8();
- if (gUnk_03004030.unk_08 != 0) {
+ UpdateIsDiggingCave();
+ if (gUnk_03004030.isDiggingCave != 0) {
if (gUnk_03004030.unk_00 == 0) {
gUnk_03004030.unk_0a = 0xFF;
room = gRoomControls.room;
@@ -66,7 +66,7 @@ void sub_08057A18(Manager*, DiggingCaveEntrance*);
u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) {
u16 offsetX, offsetY, offsetX2, offsetY2;
u32 tmp, tmp2;
- if (gUnk_03004030.unk_08) {
+ if (gUnk_03004030.isDiggingCave) {
offsetX = gPlayerEntity.x.HALF.HI - gRoomControls.origin_x;
offsetY = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y;
offsetX2 = (entr->unk_00 & 0x3F) * 16 + 8;
@@ -105,10 +105,10 @@ void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) {
gUnk_03004030.unk_06 = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y - ((entr->unk_00 & 0xFC0) >> 2);
#ifndef EU
- tmp = gUnk_03004030.unk_08;
+ tmp = gUnk_03004030.isDiggingCave;
if (!tmp) {
if ((entr->target_room | 0x80) != gUnk_03004030.unk_0b) {
- gUnk_02034480.unk_00 = gUnk_03004030.unk_08;
+ gUnk_02034480.unk_00 = gUnk_03004030.isDiggingCave;
}
gUnk_03004030.unk_0b = entr->target_room | 0x80;
}
diff --git a/src/manager/managerB.c b/src/manager/managerB.c
index a54ae310..1e49669f 100644
--- a/src/manager/managerB.c
+++ b/src/manager/managerB.c
@@ -62,8 +62,9 @@ void ManagerB_WaitForFlag(ManagerB* this) {
void ManagerB_WaitForDone(ManagerB* this) {
// check if all helpers are done
- if (this->manager.unk_0e)
+ if (this->manager.unk_0e) {
return;
+ }
// set the completion flag for the fight
SetFlag(this->unk_3e);
// restore music (if it was set, which apparently is only possible if there's a flag the fight waited for)
@@ -87,25 +88,28 @@ void ManagerB_LoadFight(Manager* this) {
EntityData* prop;
Entity* ent;
u32 counter;
+
this->action = 2;
this->unk_0e = 0;
counter = 0;
// Create a helper to keep track of the created entities.
monitor = CreateHelper(this);
- if (!monitor)
+ if (monitor == NULL) {
DeleteThisEntity();
+ }
+
prop = (EntityData*)GetCurrentRoomProperty(this->unk_0b);
- if (prop) {
- while (*((u8*)prop) != 0xFF) {
+ if (prop != NULL) {
+ while (prop->kind != 0xFF) {
ent = LoadRoomEntity(prop++);
- if (ent && (ent->kind == ENEMY)) {
+ if ((ent != NULL) && (ent->kind == ENEMY)) {
ent->field_0x6c.HALF.HI |= 0x40;
ManagerBHelper_Monitor(monitor, ent, counter++);
}
if (counter >= 7) {
counter = 0;
monitor = CreateHelper(this);
- if (!monitor)
+ if (monitor == NULL)
return;
}
}
@@ -139,27 +143,31 @@ void ManagerBHelper_Monitor(ManagerBHelper* this, Entity* ent, u32 index) {
// case volumeMasterTarget is 1: The manager is a helper
void ManagerBHelper_Main(Manager* this) {
- u8 i, anyRemaining;
+ u8 i;
+ bool32 anyRemaining;
Entity* current;
+
if (this->action == 0) {
this->action = 1;
SetDefaultPriority((Entity*)this, PRIO_NO_BLOCK);
}
// go through and check all monitored enemies.
- anyRemaining = 0;
+ anyRemaining = FALSE;
for (i = 0; i < 8; i++) {
- if ((current = ((ManagerBHelper*)this)->enemies[i])) {
- if (!current->next) {
+ current = ((ManagerBHelper*)this)->enemies[i];
+ if (current != NULL) {
+ if (current->next == NULL) {
((ManagerBHelper*)this)->enemies[i] = 0;
} else {
- anyRemaining = 1;
+ anyRemaining = TRUE;
}
}
}
if (!anyRemaining) {
// inform the parent that we're done
- if (((ManagerB*)this->parent)->manager.unk_0e) {
- ((ManagerB*)this->parent)->manager.unk_0e--;
+ ManagerB* parent = (ManagerB*)this->parent;
+ if (parent->manager.unk_0e != 0) {
+ parent->manager.unk_0e--;
}
DeleteThisEntity();
}
@@ -174,8 +182,9 @@ void ReplaceMonitoredEntity(Entity* old, Entity* new) {
u32 i;
for (current = (ManagerBHelper*)end->next; (Manager*)current != end;
current = (ManagerBHelper*)current->manager.next) {
- if (current->manager.type != 0x9 || current->manager.subtype != 0xB)
+ if (current->manager.type != 0x9 || current->manager.subtype != 0xB) {
continue;
+ }
for (i = 0; i < 8; i++) {
if (old == current->enemies[i]) {
current->enemies[i] = new;
diff --git a/src/menu/kinstone_menu.c b/src/menu/kinstone_menu.c
index 2643eb57..13d95850 100644
--- a/src/menu/kinstone_menu.c
+++ b/src/menu/kinstone_menu.c
@@ -15,16 +15,6 @@
#include "enemy.h"
#include "functions.h"
-typedef struct {
- u8 filler0[0x1];
- u8 unk1;
- u8 charColor;
- u8 bgColor;
- u16 unk4;
- u16 unk6;
- u8* unk8;
-} struct_02036540;
-
extern u32 sub_08000E44(u32);
extern void sub_080A3B74(void);
extern s32 sub_080A3B48(void);
@@ -32,9 +22,9 @@ extern void sub_0805ECEC(u32, u32, u32, u32);
extern void sub_0801C2F0(u32, u32);
extern void sub_0801E6C8(u32);
extern void sub_0801E798(u32);
-extern struct_02036540* sub_0805F2C8(void);
-extern void sub_0805F300(struct_02036540*);
-extern u32 sub_0805F76C(u8*, struct_02036540*);
+extern WStruct* sub_0805F2C8(void);
+extern void sub_0805F300(WStruct*);
+extern u32 sub_0805F76C(u8*, WStruct*);
typedef struct {
void* sourceAddress;
@@ -55,7 +45,7 @@ extern const u8 gGlobalGfxAndPalettes[];
extern u8 gTextGfxBuffer[];
extern u8 gUnk_02002AC0[];
-u32 sub_080A44E0(struct_02036540*, u8*, u32);
+u32 sub_080A44E0(WStruct*, u8*, u32);
u32 sub_080A4418(u32, u32);
u32 sub_080A43DC(u32);
u32 sub_080A43A8(u32);
@@ -74,6 +64,13 @@ Subtask KinstoneMenu_Type2;
Subtask KinstoneMenu_Type3;
Subtask KinstoneMenu_Type4;
Subtask KinstoneMenu_Type5;
+
+ASM_FUNC("asm/non_matching/menu/kinstone_menu/sub_080A3B48.inc", s32 sub_080A3B48(void))
+
+void sub_080A3B74(void) {
+ gKinstoneMenu.unk2f = 0;
+}
+
void Subtask_KinstoneMenu(void) {
static Subtask* const kinstoneMenuTypes[] = {
KinstoneMenu_Type0, KinstoneMenu_Type1, KinstoneMenu_Type2,
@@ -594,7 +591,7 @@ void KinstoneMenu_080A4468(void) {
}
u32 KinstoneMenu_080A4494(void) {
- struct_02036540* psVar1;
+ WStruct* psVar1;
u8* r1;
u32 ret;
@@ -617,7 +614,7 @@ u32 KinstoneMenu_080A4494(void) {
return ret;
}
-u32 sub_080A44E0(struct_02036540* param_1, u8* param_2, u32 param_3) {
+u32 sub_080A44E0(WStruct* param_1, u8* param_2, u32 param_3) {
u32 uVar1;
u32 size;
diff --git a/src/message.c b/src/message.c
index b10d00a1..e4db0a1e 100644
--- a/src/message.c
+++ b/src/message.c
@@ -31,17 +31,17 @@ enum {
};
extern void WriteBit(u32*, u32);
-extern void sub_0805EF40(Token* tok, const u8*);
+extern bool32 sub_0805EF40(Token* tok, const u8*);
extern void RecoverUI(u32 bottomPt, u32 topPt);
extern void RefreshUI(void);
-extern void sub_0805F918(u32, u32, u32);
+extern void sub_0805F918(u32, u32, void*);
extern u32 DecToHex(u32, u8*, u32);
u32 sub_08056FEC(u32, u8*);
u32 GetCharacter(Token* tok);
extern void sub_0805EEB4(Token* tok, u32 textIdx);
-u16 sub_0805F7DC(u32, u8*);
-u32 GetFontStrWith(u8*, u32);
+u32 sub_0805F7DC(u32, WStruct*);
+u32 GetFontStrWith(Token*, u32);
static void StatusUpdate(u32 status);
@@ -270,7 +270,7 @@ END_NONMATCH
if (gTextRender.renderStatus == RENDER_INIT) {
gTextRender.renderStatus = RENDER_UPDATE;
gTextRender._98.bytes.b1 = 1;
- sub_08056F88(gTextRender.message.unk3, gTextRender._50.unk3);
+ sub_08056F88(gTextRender.message.unk3, gTextRender._50.bgColor);
SoundReq(SFX_TEXTBOX_OPEN);
}
@@ -315,7 +315,7 @@ static u32 MsgUpdate(void) {
}
static void TextDispInit(TextRender* this) {
- if ((gTextRender.curToken.flags & 1) == 0) {
+ if (gTextRender.curToken.unk00 == 0) {
if (gTextRender._98.bytes.b1 == 0) {
StatusUpdate(MSG_DIE);
}
@@ -398,7 +398,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
StatusUpdate(MSG_CLOSE);
break;
case 4:
- this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken.flags, 0)) / 2;
+ this->_50.unk6 += (this->_50.unk4 - this->_50.unk6 - GetFontStrWith(&this->curToken, 0)) / 2;
break;
case 5:
gMessage.unk = this->curToken.param;
@@ -427,7 +427,7 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
break;
case 9:
gTextRender.message.unk3 = this->curToken.param;
- sub_08056F88(this->curToken.param, this->_50.unk3);
+ sub_08056F88(this->curToken.param, this->_50.bgColor);
break;
case 10:
this->message.textWindowPosY = this->curToken.param;
@@ -488,14 +488,14 @@ NONMATCH("asm/non_matching/textbox/RunTextCommand.inc", /*static*/ u16 RunTextCo
PaletteChange(this, palette);
}
}
- return sub_0805F7DC(chr, &this->_50.unk0);
+ return sub_0805F7DC(chr, &this->_50);
}
END_NONMATCH
/*static*/ void PaletteChange(TextRender* this, u32 id) {
u32 temp = id % 8;
this->_8f = temp;
- this->_50.unk2 = temp;
+ this->_50.charColor = temp;
}
const u8 gUnk_08107C0F[] = { 0x8, 0x1e, 0x4, 0x12, 0x0 };
@@ -813,12 +813,12 @@ void sub_08056F88(u32 unk_1, u32 unk_2) {
uVar1 = unk_1 << 4 | unk_2;
if (gTextRender._9c != uVar1) {
gTextRender._9c = uVar1;
- sub_0805F918(unk_1, unk_2, 0x0600CF60);
+ sub_0805F918(unk_1, unk_2, (void*)0x0600CF60);
}
}
static void sub_08056FBC(TextRender* ctb) {
- sub_08056FEC(ctb->message.field_0x10, &ctb->_66[0x2]);
+ sub_08056FEC(ctb->message.rupees, &ctb->_66[0x2]);
sub_08056FEC(ctb->message.field_0x14, &ctb->_66[0xa]);
sub_08056FEC(ctb->message.field_0x18, &ctb->_77[0x1]);
sub_08056FEC(ctb->message.field_0x1c, &ctb->_77[0x9]);
diff --git a/src/movement.c b/src/movement.c
index 29eeb5a9..1e54b3c5 100644
--- a/src/movement.c
+++ b/src/movement.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "collision.h"
#include "entity.h"
#include "room.h"
#include "area.h"
@@ -6,38 +7,9 @@
#include "asm.h"
#include "item.h"
#include "coord.h"
+#include "transitions.h"
#include "functions.h"
-/** Collisions. */
-typedef enum {
- COL_NONE = 0x0,
- COL_NORTH_WEST = 0x2,
- COL_NORTH_EAST = 0x4,
- COL_NORTH_FULL = 0x6,
- COL_NORTH_ANY = 0xe,
- COL_SOUTH_WEST = 0x20,
- COL_SOUTH_EAST = 0x40,
- COL_SOUTH_FULL = 0x60,
- COL_SOUTH_ANY = 0xe0,
- COL_WEST_SOUTH = 0x200,
- COL_WEST_NORTH = 0x400,
- COL_WEST_FULL = 0x600,
- COL_WEST_ANY = 0xe00,
- COL_EAST_SOUTH = 0x2000,
- COL_EAST_NORTH = 0x4000,
- COL_EAST_FULL = 0x6000,
- COL_EAST_ANY = 0xe000,
-} Collisions;
-
-extern u8 gExitList_RoyalValley_ForestMaze[];
-extern u8 gUnk_08135190[];
-extern u8 gUnk_08134FBC[];
-extern u8 gUnk_08135048[];
-extern u8 gUnk_0813A76C[];
-
-bool32 IsTileCollision(const u8*, s32, s32, u32);
-void CalculateEntityTileCollisions(Entity*, u32, u32);
-bool32 ProcessMovementInternal(Entity*, s32, s32, u32);
bool32 sub_080AF0C8(Entity*);
/** The type of the movement/collision? that is done. */
@@ -117,7 +89,8 @@ bool32 TileCollisionFunction2(s32 x, s32 y) {
0b1111111111111110,
0b1111111111111111,
*/
- 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535,
+ 0x8000, 0xC000, 0xE000, 0xF000, 0xF800, 0xFC00, 0xFE00, 0xFF00,
+ 0xFF80, 0xFFC0, 0xFFE0, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF,
};
return gUnk_08133918[y & 0xf] >> (x & 0xf) & 1;
@@ -127,24 +100,24 @@ bool32 TileCollisionFunction2(s32 x, s32 y) {
bool32 TileCollisionFunction3(s32 x, s32 y) {
static const u16 gUnk_08133938[] = {
/*
- 0b1,
- 0b11,
- 0b111,
- 0b1111,
- 0b11111,
- 0b111111,
- 0b1111111,
- 0b11111111,
- 0b111111111,
- 0b1111111111,
- 0b11111111111,
- 0b111111111111,
- 0b1111111111111,
- 0b11111111111111,
- 0b111111111111111,
+ 0b0000000000000001,
+ 0b0000000000000011,
+ 0b0000000000000111,
+ 0b0000000000001111,
+ 0b0000000000011111,
+ 0b0000000000111111,
+ 0b0000000001111111,
+ 0b0000000011111111,
+ 0b0000000111111111,
+ 0b0000001111111111,
+ 0b0000011111111111,
+ 0b0000111111111111,
+ 0b0001111111111111,
+ 0b0011111111111111,
+ 0b0111111111111111,
0b1111111111111111,
*/
- 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535,
+ 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF,
};
return gUnk_08133938[y & 0xf] >> (x & 0xf) & 1;
}
@@ -170,7 +143,8 @@ bool32 TileCollisionFunction4(s32 x, s32 y) {
0b1100000000000000,
0b1000000000000000,
*/
- 65535, 65534, 65532, 65528, 65520, 65504, 65472, 65408, 65280, 65024, 64512, 63488, 61440, 57344, 49152, 32768,
+ 0xFFFF, 0xFFFE, 0xFFFC, 0xFFF8, 0xFFF0, 0xFFE0, 0xFFC0, 0xFF80,
+ 0xFF00, 0xFE00, 0xFC00, 0xF800, 0xF000, 0xE000, 0xC000, 0x8000,
};
return gUnk_08133958[y & 0xf] >> (x & 0xf) & 1;
}
@@ -180,23 +154,23 @@ bool32 TileCollisionFunction5(s32 x, s32 y) {
static const u16 gUnk_08133978[] = {
/*
0b1111111111111111,
- 0b111111111111111,
- 0b11111111111111,
- 0b1111111111111,
- 0b111111111111,
- 0b11111111111,
- 0b1111111111,
- 0b111111111,
- 0b11111111,
- 0b1111111,
- 0b111111,
- 0b11111,
- 0b1111,
- 0b111,
- 0b11,
- 0b1,
+ 0b0111111111111111,
+ 0b0011111111111111,
+ 0b0001111111111111,
+ 0b0000111111111111,
+ 0b0000011111111111,
+ 0b0000001111111111,
+ 0b0000000111111111,
+ 0b0000000011111111,
+ 0b0000000001111111,
+ 0b0000000000111111,
+ 0b0000000000011111,
+ 0b0000000000001111,
+ 0b0000000000000111,
+ 0b0000000000000011,
+ 0b0000000000000001,
*/
- 65535, 32767, 16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1,
+ 0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF, 0xFFF, 0x7FF, 0x3FF, 0x1FF, 0xFF, 0x7F, 0x3F, 0x1F, 0xF, 0x7, 0x3, 0x1,
};
return gUnk_08133978[y & 0xf] >> (x & 0xf) & 1;
}
@@ -215,14 +189,14 @@ bool32 TileCollisionFunction6(s32 x, s32 y) {
0b1111111111111111,
0b1111111111111111,
0b1111111111111111,
- 0b0,
- 0b0,
- 0b0,
- 0b0,
- 0b0,
- 0b0,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
*/
- 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 0, 0, 0, 0, 0, 0,
+ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
};
return gUnk_08133998[y & 0xf] >> (x & 0xf) & 1;
@@ -232,12 +206,12 @@ bool32 TileCollisionFunction6(s32 x, s32 y) {
bool32 TileCollisionFunction7(s32 x, s32 y) {
static const u16 gUnk_081339B8[] = {
/*
- 0b0,
- 0b0,
- 0b0,
- 0b0,
- 0b0,
- 0b0,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
+ 0b0000000000000000,
0b1111111111111111,
0b1111111111111111,
0b1111111111111111,
@@ -249,7 +223,7 @@ bool32 TileCollisionFunction7(s32 x, s32 y) {
0b1111111111111111,
0b1111111111111111,
*/
- 0, 0, 0, 0, 0, 0, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
};
return gUnk_081339B8[y & 0xf] >> (x & 0xf) & 1;
}
@@ -275,7 +249,8 @@ bool32 TileCollisionFunction8(s32 x, s32 y) {
0b1111111111000000,
0b1111111111000000,
*/
- 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472, 65472,
+ 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0,
+ 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0,
};
return gUnk_081339D8[y & 0xf] >> (x & 0xf) & 1;
}
@@ -284,24 +259,24 @@ bool32 TileCollisionFunction8(s32 x, s32 y) {
bool32 TileCollisionFunction9(s32 x, s32 y) {
static const u16 gUnk_081339F8[] = {
/*
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
- 0b1111111111,
+ 0b[000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
+ 0b0000001111111111,
*/
- 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023, 1023,
+ 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF, 0x3FF,
};
return gUnk_081339F8[y & 0xf] >> (x & 0xf) & 1;
}
@@ -2269,28 +2244,27 @@ void ProcessMovementInternal2(Entity* this, u32 direction, u32 speed) {
void sub_080AF250(s32 param_1) {
gArea.pCurrentRoomInfo = GetCurrentRoomInfo();
if (param_1 != 0) {
- (gArea.pCurrentRoomInfo)->exits = gUnk_08135190;
+ gArea.pCurrentRoomInfo->exits = gUnk_08135190;
} else {
- (gArea.pCurrentRoomInfo)->exits = gExitList_RoyalValley_ForestMaze;
+ gArea.pCurrentRoomInfo->exits = gExitList_RoyalValley_ForestMaze;
}
}
void sub_080AF284(void) {
if (CheckPlayerInRegion(0x78, gRoomControls.height - 0x50, 0x78, 0x50)) {
gArea.pCurrentRoomInfo = GetCurrentRoomInfo();
- (gArea.pCurrentRoomInfo)->exits = gUnk_08135048;
+ gArea.pCurrentRoomInfo->exits = gUnk_08135048;
} else {
- if (GetInventoryValue(ITEM_FOURSWORD) == 0) {
- return;
+ if (GetInventoryValue(ITEM_FOURSWORD) != 0) {
+ gArea.pCurrentRoomInfo = GetCurrentRoomInfo();
+ gArea.pCurrentRoomInfo->exits = gUnk_08134FBC;
}
- gArea.pCurrentRoomInfo = GetCurrentRoomInfo();
- (gArea.pCurrentRoomInfo)->exits = gUnk_08134FBC;
}
}
void sub_080AF2E4(void) {
if (GetInventoryValue(ITEM_FOURSWORD)) {
gArea.pCurrentRoomInfo = GetCurrentRoomInfo();
- (gArea.pCurrentRoomInfo)->exits = gUnk_0813A76C;
+ gArea.pCurrentRoomInfo->exits = gUnk_0813A76C;
}
}
diff --git a/src/npc/castorWildsStatue.c b/src/npc/castorWildsStatue.c
index d12e9b28..92cd3358 100644
--- a/src/npc/castorWildsStatue.c
+++ b/src/npc/castorWildsStatue.c
@@ -127,7 +127,7 @@ void sub_080675D4(Entity* this) {
for (i = 0; i < 9; i++, gUnk++) {
Entity* ent = CreateFx(this, FX_DEATH, 0);
- if (ent) {
+ if (ent != NULL) {
ent->x.HALF.HI += gUnk->x;
ent->y.HALF.HI += gUnk->y;
ent->z.HALF.HI = subAction;
@@ -140,7 +140,7 @@ void sub_080675D4(Entity* this) {
gUnk = gUnk_08110E8A;
for (i = 0; i < 4; i++, gUnk++) {
Entity* ent = CreateFx(this, FX_ROCK, 0);
- if (ent) {
+ if (ent != NULL) {
ent->x.HALF.HI = gUnk->x + ent->x.HALF.HI;
ent->y.HALF.HI = gUnk->y + ent->y.HALF.HI;
ent->z.HALF.HI = subAction;
diff --git a/src/npc/dog.c b/src/npc/dog.c
index 0f9f3f12..9a6364ec 100644
--- a/src/npc/dog.c
+++ b/src/npc/dog.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "functions.h"
#include "npc.h"
#include "item.h"
@@ -143,17 +144,17 @@ void sub_08069D54(Entity* this) {
if (this->x.HALF.HI < this->field_0x6e.HWORD) {
this->x.HALF.HI = this->field_0x6e.HWORD + 1;
- collisions = 0xe00;
+ collisions = COL_WEST_ANY;
} else if (this->x.HALF.HI > this->field_0x6c.HWORD) {
this->x.HALF.HI = this->field_0x6c.HWORD - 1;
- collisions = 0xe000;
+ collisions = COL_EAST_ANY;
}
if (this->y.HALF.HI < this->field_0x70.HALF_U.LO) {
this->y.HALF.HI = this->field_0x70.HALF_U.LO + 1;
- collisions = 0xe;
+ collisions = COL_NORTH_ANY;
} else if (this->y.HALF.HI > this->field_0x70.HALF_U.HI) {
this->y.HALF.HI = this->field_0x70.HALF_U.HI - 1;
- collisions = 0xe0;
+ collisions = COL_SOUTH_ANY;
}
sub_0800417E(this, collisions);
sub_08069F6C(this);
diff --git a/src/npc/goronMerchant.c b/src/npc/goronMerchant.c
index 9a0cf266..3cb1a668 100644
--- a/src/npc/goronMerchant.c
+++ b/src/npc/goronMerchant.c
@@ -77,7 +77,7 @@ void sub_08069654(Entity* this) {
void sub_08069660(Entity* this) {
MessageNoOverlap(0x2c1c, this);
- gMessage.field_0x10 = (u16)GoronMerchant_GetSalePrice(this);
+ gMessage.rupees = (u16)GoronMerchant_GetSalePrice(this);
}
void sub_08069684(void) {
diff --git a/src/npc/kid.c b/src/npc/kid.c
index 911dc22c..79cb7a89 100644
--- a/src/npc/kid.c
+++ b/src/npc/kid.c
@@ -270,15 +270,18 @@ void sub_080627E8(Entity* this, ScriptExecutionContext* context) {
RestorePrevTileEntity(0x64d, 1);
}
-NONMATCH("asm/non_matching/kid/Kid_Head.inc", void Kid_Head(Entity* this)) {
- s32 iVar1;
+void Kid_Head(Entity* this) {
+ u32 uVar1;
u32 uVar2;
u32 uVar3;
u32 uVar4;
+ u32 uVar5;
+ u8* ptr;
- iVar1 = (u32)this->type * 4;
- uVar3 = ((u8)this->frame & 0x1f) + (u32)gUnk_0810C0A0[iVar1];
- uVar4 = (this->frameIndex & 0x1f) + (u32)gUnk_0810C0A0[iVar1 + 1];
+ uVar1 = this->type * 4;
+ ptr = &gUnk_0810C0A0[uVar1];
+ uVar3 = ((u8)this->frame & 0x1f) + ptr[0];
+ uVar4 = (this->frameIndex & 0x1f) + ptr[1];
switch (this->type) {
case 0:
case 1:
@@ -290,19 +293,20 @@ NONMATCH("asm/non_matching/kid/Kid_Head.inc", void Kid_Head(Entity* this)) {
if (uVar2 != 0) {
uVar2 = uVar2 + 0x50;
}
+ uVar2--;
SetExtraSpriteFrame(this, 0, uVar3);
SetExtraSpriteFrame(this, 1, uVar4);
- SetExtraSpriteFrame(this, 2, uVar2 - 1);
+ SetExtraSpriteFrame(this, 2, uVar2);
SetSpriteSubEntryOffsetData1(this, 1, 0);
SetSpriteSubEntryOffsetData2(this, 1, 2);
sub_0807000C(this);
break;
case 6:
- uVar2 = this->frameSpriteSettings & 0xf;
+ uVar5 = this->frameSpriteSettings & 0xf;
if ((this->frameSpriteSettings & 0xf) != 0) {
- uVar2 = uVar2 + 0x93;
+ uVar5 = uVar5 + 0x93;
}
- SetExtraSpriteFrame(this, 0, uVar2 - 1);
+ SetExtraSpriteFrame(this, 0, uVar5 - 1);
SetExtraSpriteFrame(this, 1, uVar3);
SetExtraSpriteFrame(this, 2, uVar4);
SetSpriteSubEntryOffsetData1(this, 2, 1);
@@ -320,10 +324,9 @@ NONMATCH("asm/non_matching/kid/Kid_Head.inc", void Kid_Head(Entity* this)) {
break;
}
}
-END_NONMATCH
-NONMATCH("asm/non_matching/kid/sub_08062948.inc", void sub_08062948(Entity* this, ScriptExecutionContext* context)) {
- u8 bVar1;
+void sub_08062948(Entity* this, ScriptExecutionContext* context) {
+ s32 bVar1;
u16 uVar2;
u32 uVar3;
s32 iVar4;
@@ -332,64 +335,60 @@ NONMATCH("asm/non_matching/kid/sub_08062948.inc", void sub_08062948(Entity* this
context->unk_18 += 1;
context->unk_12 = (Random() & 0x3f) + 0x20;
uVar3 = Random() & 0x18;
- bVar1 = this->direction;
- if (bVar1 != 8) {
- if (bVar1 >= 9) {
- if (bVar1 == 0x10) {
- if (uVar3 == 0) {
- uVar3 = 0x18;
- }
- } else {
- if ((bVar1 == 0x18) && (uVar3 == 8)) {
- uVar3 = 0;
- }
- }
- } else {
- if ((bVar1 == 0) && (uVar3 == 0x10)) {
+ switch (this->direction) {
+ case 0:
+ if (uVar3 == 0x10) {
uVar3 = 8;
}
- }
- } else {
- if (uVar3 == 0x18) {
- uVar3 = 0x10;
- }
+ break;
+ case 0x8:
+ if (uVar3 == 0x18) {
+ uVar3 = 0x10;
+ }
+ break;
+ case 0x10:
+ if (uVar3 == 0) {
+ uVar3 = 0x18;
+ }
+ break;
+ case 0x18:
+ if ((uVar3 == 8)) {
+ uVar3 = 0;
+ }
}
+
this->direction = (u8)uVar3;
- uVar3 = sub_0806F5B0(uVar3);
- this->animationState = (u8)uVar3;
+ this->animationState = sub_0806F5B0(uVar3);
this->speed = 0x80;
}
uVar3 = (this->animationState >> 1) + 4;
if (uVar3 != this->animIndex) {
InitializeAnimation(this, uVar3);
- this->field_0x80.HALF.LO = (u16)this->animIndex;
+ this->field_0x80.HWORD = (u16)this->animIndex;
}
ProcessMovement0(this);
- iVar4 = this->x.HALF.HI - this->field_0x6c.HALF.LO;
+ iVar4 = this->x.HALF.HI - (s16)this->field_0x6c.HWORD;
if (0x10 < iVar4) {
- this->x.HALF.HI = this->field_0x6c.HALF.LO + 0x10;
+ this->x.HALF.HI = this->field_0x6c.HWORD + 0x10;
context->unk_12 = 1;
}
if (iVar4 < -0x10) {
- this->x.HALF.HI = this->field_0x6c.HALF.LO + -0x10;
+ this->x.HALF.HI = this->field_0x6c.HWORD - 0x10;
context->unk_12 = 1;
}
- iVar4 = this->y.HALF.HI - this->field_0x6e.HALF.LO;
+ iVar4 = this->y.HALF.HI - (s16)this->field_0x6e.HWORD;
if (0x10 < iVar4) {
- this->y.HALF.HI = this->field_0x6e.HALF.LO + 0x10;
+ this->y.HALF.HI = this->field_0x6e.HWORD + 0x10;
context->unk_12 = 1;
}
if (iVar4 < -0x10) {
- this->y.HALF.HI = this->field_0x6e.HALF.LO + -0x10;
+ this->y.HALF.HI = this->field_0x6e.HWORD - 0x10;
context->unk_12 = 1;
}
- uVar2 = context->unk_12 - 1;
- context->unk_12 = uVar2;
- if (uVar2 != 0) {
+ if (--context->unk_12 != 0) {
gActiveScriptInfo.commandSize = 0;
}
}
-END_NONMATCH
void sub_08062A48(Entity* this, ScriptExecutionContext* context) {
this->field_0x6a.HALF.LO = sub_0801E99C(this);
diff --git a/src/npc/phonograph.c b/src/npc/phonograph.c
index dd731979..8643cf95 100644
--- a/src/npc/phonograph.c
+++ b/src/npc/phonograph.c
@@ -12,7 +12,7 @@ void sub_0806EABC(Entity* this);
void sub_0806EABC(Entity* this, u32 param);
#endif
-extern u32 gUnk_081146B8;
+extern Font gUnk_081146B8;
extern s8 gUnk_081145E4[];
void Phonograph(Entity* this) {
diff --git a/src/npc/picolyteBottle.c b/src/npc/picolyteBottle.c
index 6dbf5010..dec3e542 100644
--- a/src/npc/picolyteBottle.c
+++ b/src/npc/picolyteBottle.c
@@ -175,7 +175,7 @@ void sub_0806E140(PicolyteBottleEntity* this, ScriptExecutionContext* context) {
MessageFromTarget(0x421b);
} else {
MessageFromTarget(0x4218);
- gMessage.field_0x10 = this->unk76;
+ gMessage.rupees = this->unk76;
}
} else {
context->condition = 0;
@@ -201,7 +201,7 @@ void sub_0806E1FC(PicolyteBottleEntity* this) {
void sub_0806E20C(void) {
if (gRoomTransition.field_0x6 != 0) {
MessageFromTarget(0x421f);
- gMessage.field_0x10 = gRoomTransition.field_0x6;
+ gMessage.rupees = gRoomTransition.field_0x6;
} else {
MessageFromTarget(0x4220);
}
diff --git a/src/npc/stockwell.c b/src/npc/stockwell.c
index e72cb9c0..d305d835 100644
--- a/src/npc/stockwell.c
+++ b/src/npc/stockwell.c
@@ -66,7 +66,7 @@ void sub_080650CC(Entity* this) {
MessageNoOverlap(confirmMsgId, this);
//! @bug itemPrice (r8) is not initialized if gRoomVars.shopItemType == 0
- gMessage.field_0x10 = (u16)itemPrice;
+ gMessage.rupees = (u16)itemPrice;
} else if ((this->frame & 0x40)) {
InitializeAnimation(this, gUnk_0810FDB8[Random() & 0xf]);
} else {
diff --git a/src/npc/tingleSiblings.c b/src/npc/tingleSiblings.c
index 82eb9ee2..32d6ab05 100644
--- a/src/npc/tingleSiblings.c
+++ b/src/npc/tingleSiblings.c
@@ -117,7 +117,7 @@ void sub_08064EE8(Entity* this) {
}
fxEnt = CreateFx(this, confettiFx, 0);
- if (fxEnt && bVar1 == 2) {
+ if ((fxEnt != NULL) && (bVar1 == 2)) {
fxEnt->spriteSettings.flipX = 1;
}
}
@@ -171,7 +171,7 @@ void sub_08064F28(Entity* this, ScriptExecutionContext* context) {
}
MessageNoOverlap(TingleSiblings_MessageIndices[this->type][uVar5], this);
if (iVar4 > 0) {
- gMessage.field_0x10 = (u16)iVar4;
+ gMessage.rupees = (u16)iVar4;
}
if (CheckRoomFlag(roomFlag) == 0) {
diff --git a/src/npcUtils.c b/src/npcUtils.c
index 2bd9564a..09906e44 100644
--- a/src/npcUtils.c
+++ b/src/npcUtils.c
@@ -138,7 +138,7 @@ u32 sub_0806EE20(Entity* ent) {
u32 v3;
if (!ent->interactType) {
- if (ent->child)
+ if (ent->child != NULL)
return gUnk_08114EFC[ent->field_0x16](ent);
} else {
ent->knockbackSpeed = 8;
diff --git a/src/object.c b/src/object.c
index da1eb312..060876d7 100644
--- a/src/object.c
+++ b/src/object.c
@@ -187,7 +187,7 @@ void (*const gObjectFunctions[])(Entity*) = {
[OBJECT_B6] = ObjectB6,
[WELL] = Well,
[WIND_TRIBE_TELEPORTER] = WindTribeTeleporter,
- [OBJECT_B9] = ObjectB9,
+ [CUCCO_MINIGAME] = ObjectB9,
[GYORG_BOSS_OBJECT] = GyorgBossObject,
[WINDCREST] = Windcrest,
[LIT_AREA] = LitArea,
diff --git a/src/object/bakerOven.c b/src/object/bakerOven.c
index fd2b80aa..d4b26c28 100644
--- a/src/object/bakerOven.c
+++ b/src/object/bakerOven.c
@@ -22,7 +22,7 @@ void sub_0809CC74(Entity* this) {
/* Create steam clouds */
for (i = 0; i < 3; i++) {
ent = CreateObject(BAKER_OVEN, 1, i);
- if (ent) {
+ if (ent != NULL) {
ent->parent = this;
PositionRelative(this, ent, 16 * Q_16_16((i + 1) / 2) - Q_16_16(8.0), Q_16_16(-14.0));
}
diff --git a/src/object/bigBarrel.c b/src/object/bigBarrel.c
index af09b0f4..77e6ff6a 100644
--- a/src/object/bigBarrel.c
+++ b/src/object/bigBarrel.c
@@ -105,7 +105,7 @@ void sub_08088BE0(BigBarrelEntity* this) {
if (CheckLocalFlag(0x15) == 0) {
sub_08088C78(this, 2, 0, 0xffffff88);
ent = sub_08088C78(this, 4, 0x15, 0);
- if (ent) {
+ if (ent != NULL) {
ent->x.HALF.HI = gRoomControls.origin_x + 0x48;
ent->y.HALF.HI = gRoomControls.origin_y + 200;
}
@@ -114,7 +114,7 @@ void sub_08088BE0(BigBarrelEntity* this) {
if (CheckLocalFlag(0x16) == 0) {
sub_08088C78(this, 2, 1, 0x78);
ent = sub_08088C78(this, 4, 0x16, 0);
- if (ent) {
+ if (ent != NULL) {
ent->x.HALF.HI = gRoomControls.origin_x + 0x188;
ent->y.HALF.HI = gRoomControls.origin_y + 200;
}
@@ -249,7 +249,7 @@ void sub_08088E74(BigBarrelEntity* this) {
} else {
if ((gRoomTransition.frameCount & 7U) == 0) {
ent = CreateObjectWithParent(super, OBJECT_2A, 0, 0x1e);
- if (ent) {
+ if (ent != NULL) {
ent->updatePriority = 3;
ent->spriteRendering.b3 = 0;
ent->spritePriority.b0 = 0;
diff --git a/src/object/bird.c b/src/object/bird.c
index f16d46b5..3cb75c4b 100644
--- a/src/object/bird.c
+++ b/src/object/bird.c
@@ -2,22 +2,45 @@
#include "object.h"
#include "functions.h"
#include "item.h"
+#include "message.h"
+#include "game.h"
-extern void (*const gUnk_08123EC0[])(Entity*);
-extern void (*const gUnk_08123EEC[])(Entity*);
-extern void (*const gUnk_08123EF4[])(Entity*);
-extern void (*const gUnk_08123EFC[])(Entity*);
-extern void (*const gUnk_08123F04[])(Entity*);
+extern u16 script_EzloTalkOcarina[];
+
+void Bird_Type0(Entity*);
+void Bird_Type1(Entity*);
+void Bird_Type2(Entity*);
+void Bird_Type3(Entity*);
+void Bird_Type8(Entity*);
+void Bird_Type9(Entity*);
+void Bird_Type10(Entity*);
+void Bird_Type0_Init(Entity*);
+void Bird_Type0_Action1(Entity*);
+void Bird_Type1_Init(Entity*);
+void Bird_Type1_Action1(Entity*);
+void Bird_Type1_Action1_Subaction0(Entity*);
+void Bird_Type1_Action1_Subaction1(Entity*);
+void Bird_Type2_Init(Entity*);
+void Bird_Type2_Action1(Entity*);
void Bird(Entity* this) {
- gUnk_08123EC0[this->type](this);
+ static void (*const typeFuncs[])(Entity*) = {
+ Bird_Type0, Bird_Type1, Bird_Type2, Bird_Type3, Bird_Type3, Bird_Type3,
+ Bird_Type3, Bird_Type3, Bird_Type8, Bird_Type9, Bird_Type10,
+ };
+ typeFuncs[this->type](this);
}
-void sub_0809CF3C(Entity* this) {
- gUnk_08123EEC[this->action](this);
+void Bird_Type0(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ Bird_Type0_Init,
+ Bird_Type0_Action1,
+ };
+
+ actionFuncs[this->action](this);
}
-void sub_0809CF54(Entity* this) {
+void Bird_Type0_Init(Entity* this) {
Entity* target;
this->action++;
@@ -42,8 +65,7 @@ void sub_0809CF54(Entity* this) {
}
}
-void sub_0809CFEC(Entity* this) {
-
+void Bird_Type0_Action1(Entity* this) {
LinearMoveUpdate(this);
GravityUpdate(this, *(s16*)&this->field_0x68.HWORD);
if (this->actionDelay != 0) {
@@ -56,22 +78,30 @@ void sub_0809CFEC(Entity* this) {
UpdateAnimationSingleFrame(this);
}
-void sub_0809D030(Entity* this) {
- gUnk_08123EF4[this->action](this);
+void Bird_Type1(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ Bird_Type1_Init,
+ Bird_Type1_Action1,
+ };
+ actionFuncs[this->action](this);
}
-void sub_0809D048(Entity* this) {
+void Bird_Type1_Init(Entity* this) {
this->action++;
this->collisionLayer = 1;
UpdateSpriteForCollisionLayer(this);
InitAnimationForceUpdate(this, 0x17);
}
-void sub_0809D06C(Entity* this) {
- gUnk_08123EFC[this->subAction](this);
+void Bird_Type1_Action1(Entity* this) {
+ static void (*const subActionFuncs[])(Entity*) = {
+ Bird_Type1_Action1_Subaction0,
+ Bird_Type1_Action1_Subaction1,
+ };
+ subActionFuncs[this->subAction](this);
}
-void sub_0809D084(Entity* this) {
+void Bird_Type1_Action1_Subaction0(Entity* this) {
u32 temp;
if (this->parent != NULL) {
@@ -85,7 +115,7 @@ void sub_0809D084(Entity* this) {
}
}
-void sub_0809D0AC(Entity* this) {
+void Bird_Type1_Action1_Subaction1(Entity* this) {
Entity* fx;
if (sub_080044EC(this, 0x1800) < 2) {
@@ -102,28 +132,32 @@ void sub_0809D0AC(Entity* this) {
}
}
-void sub_0809D0F4(Entity* this) {
- gUnk_08123F04[this->action](this);
+void Bird_Type2(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ Bird_Type2_Init,
+ Bird_Type2_Action1,
+ };
+ actionFuncs[this->action](this);
}
-void sub_0809D10C(Entity* this) {
+void Bird_Type2_Init(Entity* this) {
this->action++;
this->collisionLayer = 1;
UpdateSpriteForCollisionLayer(this);
InitAnimationForceUpdate(this, 0x17);
}
-void sub_0809D130(Entity* this) {
+void Bird_Type2_Action1(Entity* this) {
if ((gPlayerState.flags & PL_MINISH) != 0) {
sub_0800445C(this);
} else if (IsCollidingPlayer(this) != 0) {
- CreateItemEntity(0x17, 0, 0);
+ CreateItemEntity(ITEM_OCARINA, 0, 0);
gSave.windcrests |= 0x10000000;
DeleteThisEntity();
}
}
-void sub_0809D178(Entity* this) {
+void Bird_Type3(Entity* this) {
if (this->action == 0) {
this->action++;
@@ -131,6 +165,7 @@ void sub_0809D178(Entity* this) {
UpdateSpriteForCollisionLayer(this);
this->frame = 0x80;
}
+
if ((this->frame & ANIM_DONE) != 0) {
InitializeAnimation(this, Random() & 3);
this->frameDuration = (Random() & 0xf) + 0x10;
@@ -142,3 +177,225 @@ void sub_0809D178(Entity* this) {
GetNextFrame(this);
}
}
+
+void Bird_Type8(Entity* this) {
+ Entity* pEVar5;
+
+ switch (this->action) {
+ case 0:
+ if (this->actionDelay != 0) {
+ this->frameIndex = 0xff;
+ this->actionDelay--;
+ return;
+ }
+ this->action = 1;
+ this->zVelocity = 0;
+ this->z.WORD = Q_16_16(-20.0);
+ this->speed = 0x180;
+ this->direction = 8;
+ this->collisionLayer = 1;
+ this->spritePriority.b0 = 0;
+ this->spriteRendering.b3 = 0;
+ this->spriteOrientation.flipY = 1;
+ this->x.HALF.HI = gRoomControls.scroll_x;
+ this->y.HALF.HI = gPlayerEntity.y.HALF.HI;
+ this->child = NULL;
+ SetDefaultPriority(this, 6);
+ InitAnimationForceUpdate(this, 0);
+ SoundReq(0x123);
+ break;
+ case 1:
+ this->collisionLayer = gPlayerEntity.collisionLayer;
+ this->speed += 8;
+ if (this->speed > 0x300) {
+ this->speed = 0x300;
+ }
+
+ if ((gPlayerEntity.flags & 0x80) != 0 && (gMessage.doTextBox & 0x7f) == 0 && gPlayerEntity.action != 28 &&
+ gPlayerEntity.action != 6 && gPlayerEntity.action != 9 && gPlayerState.framestate != 24 &&
+ gPlayerState.framestate != 11 && gPlayerState.framestate != 8 && sub_08079F8C() &&
+ (EntityInRectRadius(this, &gPlayerEntity, 0xe, 0xe))) {
+ s32 z = gPlayerEntity.z.HALF.HI - this->z.HALF.HI - 8;
+ if ((u16)z < 0x20 && gPlayerEntity.health != 0) {
+ pEVar5 = CreateObject(0x95, 10, 0);
+ if (pEVar5 != NULL) {
+ this->child = pEVar5;
+ this->action = 2;
+ this->actionDelay = 8;
+ this->speed = 0x300;
+ this->field_0x68.HWORD = 0xe000;
+ sub_08079184();
+ sub_08078B48();
+ ResetPlayerAnimationAndAction();
+ sub_08077B20();
+ gPlayerState.swim_state = 0;
+ gPlayerState.jump_status = 0;
+ gPlayerEntity.flags &= 0x7f;
+ gPlayerEntity.spriteSettings.draw = 0;
+ gPriorityHandler.sys_priority = 6;
+ gUnk_02034490.unk0 = 1;
+ }
+ }
+ }
+ break;
+ default:
+ sub_08078B48();
+ gPlayerEntity.spriteSettings.draw = 0;
+ break;
+ }
+ LinearMoveUpdate(this);
+ GravityUpdate(this, (s16)this->field_0x68.HWORD);
+ UpdateAnimationSingleFrame(this);
+ pEVar5 = this->child;
+ if (pEVar5 != NULL) {
+ if (gPlayerEntity.x.HALF.HI < this->x.HALF.HI - 8) {
+ this->actionDelay = 0;
+ }
+
+ if (this->actionDelay == 0) {
+ PositionRelative(this, pEVar5, 0xfff80000, 0);
+ pEVar5->z.HALF.HI += 0x18;
+ pEVar5->spritePriority.b0 = this->spritePriority.b0;
+ pEVar5->spriteRendering.b3 = this->spriteRendering.b3;
+ pEVar5->spriteOrientation.flipY = this->spriteOrientation.flipY;
+ } else {
+ this->actionDelay--;
+ CopyPosition(&gPlayerEntity, pEVar5);
+ }
+ }
+
+ if (CheckOnScreen(this) == 0) {
+ if (this->action == 2) {
+ gSave.windcrests |= 0x10000000;
+ MenuFadeIn(9, 0);
+ }
+ pEVar5 = this->child;
+ if (pEVar5 != NULL) {
+ DeleteEntityAny(pEVar5);
+ }
+ DeleteThisEntity();
+ }
+}
+
+void Bird_Type9(Entity* this) {
+ Entity* pEVar1;
+ Entity* child;
+
+ if (this->action == 0) {
+ this->action = 1;
+ this->spriteSettings.draw = 1;
+ this->zVelocity = -0x28000;
+ this->z.WORD = 0xffb4c000;
+ this->field_0x68.HWORD = 0xf000;
+ this->speed = 0x300;
+ this->direction = 8;
+ this->collisionLayer = 1;
+ this->spritePriority.b0 = 0;
+ this->spriteRendering.b3 = 0;
+ this->spriteOrientation.flipY = 1;
+ ;
+ SetDefaultPriority(this, 6);
+ this->x.HALF.HI = gRoomControls.scroll_x;
+ this->y.HALF.HI = gPlayerEntity.y.HALF.HI;
+ SoundReq(SFX_123);
+ this->spritePriority.b1 = 2;
+ InitAnimationForceUpdate(this, 0);
+ sub_08078B48();
+ } else if (this->action == 1) {
+ gPlayerEntity.spriteSettings.draw = 0;
+ child = this->child;
+ if (child != NULL) {
+ PositionRelative(this, child, Q_16_16(-8), 0);
+ child->z.HALF.HI += 0x18;
+ child->spritePriority.b0 = this->spritePriority.b0;
+ child->spriteRendering.b3 = this->spriteRendering.b3;
+ child->spriteOrientation.flipY = this->spriteOrientation.flipY;
+ }
+ sub_08078B48();
+ if (gRoomControls.scroll_x + 0x78 < this->x.HALF.HI) {
+ this->action++;
+ this->spritePriority.b1 = 1;
+ if (child != NULL) {
+ child->action++;
+ }
+ gRoomControls.camera_target = &gPlayerEntity;
+ gPlayerEntity.spriteSettings.draw = 1;
+ ResetPlayerAnimationAndAction();
+ ResetPlayerEventPriority();
+ gUnk_02034490.unk0 = 0;
+ if (!CheckGlobalFlag(WARP_1ST)) {
+ pEVar1 = CreateObject(OBJECT_69, 0, 0);
+ if (pEVar1 != NULL) {
+ *(ScriptExecutionContext**)&pEVar1->cutsceneBeh = StartCutscene(pEVar1, script_EzloTalkOcarina);
+ SetGlobalFlag(WARP_1ST);
+ }
+ }
+ }
+ }
+ LinearMoveUpdate(this);
+ GravityUpdate(this, (short)this->field_0x68.HWORD);
+ UpdateAnimationSingleFrame(this);
+ if (!CheckOnScreen(this)) {
+ DeleteThisEntity();
+ }
+}
+
+void Bird_Type10(Entity* this) {
+ this->palette.b.b0 = gPlayerEntity.palette.b.b0;
+ switch (this->action) {
+ case 0:
+ this->action = 1;
+ this->spriteSettings.draw = 1;
+ this->collisionLayer = 1;
+ this->spritePriority.b0 = 0;
+ this->spriteRendering.b3 = 0;
+ this->spriteOrientation.flipY = 1;
+ SetDefaultPriority(this, 6);
+ InitAnimationForceUpdate(this, 0xe0);
+ case 1:
+ UpdateAnimationSingleFrame(this);
+ break;
+ case 2:
+ this->action = 3;
+ break;
+ case 3:
+ DeleteThisEntity();
+ break;
+ }
+}
+
+void CreateBird(void) {
+ Entity* birdEnt;
+
+#ifndef EU
+ if (AreaAllowsWarp()) {
+#else
+ if (AreaIsOverworld()) {
+#endif
+ if (!FindEntity(OBJECT, BIRD, 6, 8, 0)) {
+ birdEnt = CreateObject(BIRD, 8, 0);
+ if (birdEnt != NULL) {
+ birdEnt->actionDelay = 0;
+ }
+ }
+ }
+}
+
+void sub_0809D738(void) {
+ Entity* pEVar1;
+ Entity* pEVar2;
+
+ pEVar1 = CreateObject(BIRD, 9, 0);
+ if (pEVar1 != NULL) {
+ gRoomControls.camera_target = NULL;
+ SetDefaultPriority(pEVar1, 6);
+ SetPlayerEventPriority();
+ pEVar2 = CreateObject(BIRD, 10, 0);
+ if (pEVar2 != NULL) {
+ pEVar1->child = pEVar2;
+ }
+ gUnk_02034490.unk0 = 1;
+ } else {
+ ResetPlayerAnimationAndAction();
+ }
+}
diff --git a/src/object/book.c b/src/object/book.c
index f42b2f1d..3c9e12b5 100644
--- a/src/object/book.c
+++ b/src/object/book.c
@@ -15,11 +15,9 @@ void Book(Entity* this) {
}
void sub_0809B3C4(Entity* this) {
- u32 obtained;
-
- obtained = GetInventoryValue(this->type + ITEM_QST_BOOK1);
+ u32 obtained = GetInventoryValue(this->type + ITEM_QST_BOOK1);
if (this->type2 != 3) {
- if (obtained) {
+ if (obtained != 0) {
DeleteThisEntity();
}
} else {
@@ -42,7 +40,7 @@ void sub_0809B3C4(Entity* this) {
}
UpdateSpriteForCollisionLayer(this);
- InitAnimationForceUpdate(this, this->type + 0x39);
+ InitAnimationForceUpdate(this, this->type + ITEM_QST_BOOK1);
switch (this->type2) {
case 0:
@@ -55,22 +53,23 @@ void sub_0809B3C4(Entity* this) {
case 1: {
u32 scroll;
u32 height;
+
this->action = 3;
scroll = (u16)gRoomControls.scroll_y - 0x10;
height = (u16)this->y.HALF.HI - scroll;
this->z.HALF.HI -= height;
- return;
+ break;
}
case 2:
this->action = 4;
- return;
+ break;
case 3:
this->action = 5;
this->subAction = 0;
this->spritePriority.b0 = 3;
break;
default:
- return;
+ break;
}
}
@@ -89,10 +88,10 @@ void sub_0809B4A8(Entity* this) {
this->action = 2;
this->actionDelay = 30;
- this->speed = 64;
- this->direction = 16;
+ this->speed = 0x40;
+ this->direction = 0x10;
- gPlayerState.pushedObject = 0x9e;
+ gPlayerState.pushedObject = TREE_THORNS;
gPlayerState.queued_action = PLAYER_PUSH;
gPlayerState.flags |= PL_BUSY;
@@ -101,7 +100,7 @@ void sub_0809B4A8(Entity* this) {
gPlayerEntity.direction = gPlayerEntity.animationState << 2;
EnqueueSFX(SFX_10F);
} else {
- this->actionDelay = 0x16;
+ this->actionDelay = 22;
}
}
@@ -109,12 +108,12 @@ void sub_0809B524(Entity* this) {
if (--this->actionDelay == 0) {
if (--this->field_0xf == 0) {
this->action = 3;
- this->y.HALF.HI += 32;
- this->z.HALF.HI -= 32;
+ this->y.HALF.HI += 0x20;
+ this->z.HALF.HI -= 0x20;
} else {
this->action = 1;
this->actionDelay = 22;
- this->field_0x80.HALF.LO = 24;
+ this->field_0x80.HALF.LO = 0x18;
}
}
@@ -134,7 +133,7 @@ void sub_0809B56C(Entity* this) {
SetFlag(this->field_0x86.HWORD);
fx = CreateFx(this, FX_DEATH, 0);
- if (fx) {
+ if (fx != NULL) {
SortEntityAbove(this, fx);
}
}
@@ -143,7 +142,7 @@ void sub_0809B5B4(Entity* this) {
if (gPlayerState.flags & PL_MINISH) {
sub_0800445C(this);
} else if (IsCollidingPlayer(this)) {
- CreateItemEntity(this->type + 0x39, 0, 0);
+ CreateItemEntity(this->type + ITEM_QST_BOOK1, 0, 0);
DeleteThisEntity();
}
}
@@ -152,9 +151,8 @@ void sub_0809B5EC(Entity* this) {
if (this->spriteSettings.draw == 1) {
switch (this->subAction) {
case 0: {
- Entity* parent;
- parent = FindEntityByID(NPC, STURGEON, 7);
- if (!parent) {
+ Entity* parent = FindEntityByID(NPC, STURGEON, 7);
+ if (parent == NULL) {
return;
}
if (parent->x.HALF.HI < this->x.HALF.HI) {
@@ -170,7 +168,7 @@ void sub_0809B5EC(Entity* this) {
break;
}
case 1: {
- if (!this->parent || !this->parent->next) {
+ if ((this->parent == NULL) || (this->parent->next == NULL)) {
DeleteThisEntity();
return;
}
@@ -206,9 +204,8 @@ void sub_0809B5EC(Entity* this) {
}
u32 sub_0809B688(Entity* this) {
- u32 ret;
+ u32 ret = EntityInRectRadius(this, &gPlayerEntity, 6, 12);
- ret = EntityInRectRadius(this, &gPlayerEntity, 6, 12);
if (ret == 1 && gPlayerState.field_0xd != 16) {
ret = 0;
}
@@ -217,8 +214,7 @@ u32 sub_0809B688(Entity* this) {
}
void sub_0809B6B0(Entity* parent, Entity* this) {
- s32 offset;
- offset = (s32)gUnk_08123D94[parent->animationState >> 1] << 16;
+ s32 offset = (s32)gUnk_08123D94[parent->animationState >> 1] << 16;
PositionRelative(parent, this, 0, offset);
diff --git a/src/object/button.c b/src/object/button.c
index 5a29e636..d4f602ba 100644
--- a/src/object/button.c
+++ b/src/object/button.c
@@ -242,7 +242,7 @@ u32 sub_08081F7C(Entity* this, u32 r7) {
if (this->actionDelay == 0)
return 1;
if (--this->actionDelay > 6) {
- if (this->child)
+ if (this->child != NULL)
this->child->spriteOffsetY = -4;
} else {
if (this->actionDelay == 6) {
diff --git a/src/object/cuccoMinigame.c b/src/object/cuccoMinigame.c
new file mode 100644
index 00000000..19f63c3f
--- /dev/null
+++ b/src/object/cuccoMinigame.c
@@ -0,0 +1,358 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "script.h"
+#include "npc.h"
+#include "fileselect.h"
+#include "functions.h"
+#include "object.h"
+#include "enemy.h"
+
+typedef struct {
+ Entity base;
+ s16 unk68;
+ s16 unk6a;
+ s16 unk6c;
+ u16 unk6e;
+ u8 unk70[0x18];
+} ObjectB9Entity;
+
+typedef Entity* ObjectB9Heap[10];
+
+u32 sub_080A1514();
+
+const u16 gUnk_08124C20[] = {
+ 25, 0x2, 25, 0x3, 30, 0x4, 45, 0x5, 50, 0x5, 45, 0x5, 50, 0x6, 60, 0x7, 55, 0x2, 55, 0x3,
+};
+
+static const u16 pObjectB9_MinigameCuccoDefs[][30] = {
+ { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001,
+ 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321,
+ 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC },
+ { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001,
+ 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321,
+ 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC },
+ { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001,
+ 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321,
+ 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC },
+ {
+ 0x0002, 0x02F6, 0x0346, 0x0001, 0x0266, 0x033C, 0x0001, 0x0319, 0x0296, 0x0001,
+ 0x0284, 0x0284, 0x0002, 0x0216, 0x0284, 0x0001, 0x0142, 0x0330, 0x0002, 0x0179,
+ 0x039F, 0x0001, 0x03A6, 0x0280, 0x0001, 0x039A, 0x015D, 0x0001, 0x031E, 0x01E5,
+ },
+ { 0x0001, 0x0296, 0x0314, 0x0001, 0x02E6, 0x0231, 0x0001, 0x0254, 0x0290, 0x0001,
+ 0x01F8, 0x0325, 0x0001, 0x0185, 0x0367, 0x0001, 0x0320, 0x01D6, 0x0002, 0x01F8,
+ 0x0287, 0x0002, 0x029D, 0x01B1, 0x0002, 0x01F9, 0x022D, 0x0002, 0x0114, 0x0321 },
+ { 0x0002, 0x02F6, 0x0346, 0x0001, 0x0266, 0x033C, 0x0001, 0x0319, 0x0296, 0x0001,
+ 0x0284, 0x0284, 0x0002, 0x0216, 0x0284, 0x0001, 0x0142, 0x0330, 0x0002, 0x0179,
+ 0x039F, 0x0002, 0x022D, 0x01CB, 0x0001, 0x039A, 0x015D, 0x0001, 0x031E, 0x01E5 },
+ { 0x0001, 0x02E9, 0x0318, 0x0001, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001,
+ 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321,
+ 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0001, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC },
+ { 0x0001, 0x02E9, 0x0318, 0x0002, 0x0280, 0x0380, 0x0002, 0x0277, 0x0314, 0x0001,
+ 0x0332, 0x0248, 0x0001, 0x0257, 0x028C, 0x0001, 0x0199, 0x031B, 0x0001, 0x0321,
+ 0x01B4, 0x0002, 0x02DF, 0x01D8, 0x0002, 0x03AD, 0x02DE, 0x0001, 0x0216, 0x01CC },
+ { 0x0001, 0x004D, 0x00F3, 0x0001, 0x011A, 0x0247, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
+ { 0x0001, 0x0051, 0x0328, 0x0002, 0x0114, 0x0321, 0x0002, 0x0332, 0x0248, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 }
+};
+
+static const u8 gUnk_08124EA0[] = { 0x3F, 0x0A, 0x01, 0x00, 0x3F, 0x0A, 0x01, 0x00, 0x3F, 0x14, 0x01, 0x00, 0x3F, 0x14,
+ 0x01, 0x00, 0x3F, 0x1E, 0x01, 0x00, 0x3F, 0x1E, 0x01, 0x00, 0x5C, 0x6E, 0x01, 0x00,
+ 0x5C, 0x6F, 0x01, 0x00, 0x5C, 0x70, 0x01, 0x00, 0x63, 0x00, 0x01, 0x00 };
+
+static const u16 CuccoMinigame_Sounds[] = { SFX_VO_CUCCO5, SFX_VO_CUCCO_CALL };
+
+static const u8 CuccoMinigameRupees[] = { 0, 10, 50, 0 };
+
+void ObjectB9(ObjectB9Entity* this) {
+ int index;
+ u32 val;
+ u8* puVar2;
+ const u16* ptr;
+
+ if (super->action == 0) {
+ super->action++;
+ ptr = gUnk_08124C20 + sub_080A1514() * 2;
+ this->unk68 = ptr[0] * 0x3c;
+ this->unk6a = 0;
+ this->unk6c = ptr[1];
+ this->unk6e = 1;
+
+ for (puVar2 = this->unk70, val = 0, index = 9; index >= 0; index--) {
+ *puVar2++ = val;
+ }
+ sub_0807DD64(super);
+ sub_0806EC20(super);
+ }
+ sub_0807DD94(super, 0);
+}
+
+NONMATCH("asm/non_matching/objectB9/sub_080A1270.inc", void sub_080A1270(ObjectB9Entity* this)) {
+ s32 iVar1;
+ int iVar2;
+ s32 iVar4;
+ s32 sVar6;
+ int iVar7;
+ s8* ptr;
+ s32 val;
+ Entity* pEnt;
+ Entity** entArray;
+
+ sVar6 = 0;
+ entArray = ((Entity**)super->myHeap);
+ ptr = this->unk70;
+ iVar1 = (gRoomControls.origin_x + 0x360);
+ iVar4 = (gRoomControls.origin_y + 0x350);
+ iVar1 = (iVar1 << 16) >> 16;
+ iVar4 = (iVar4 << 16) >> 16;
+ val = -1;
+
+ for (iVar7 = 0; iVar7 < 9; iVar7++) {
+ pEnt = entArray[iVar7];
+ if (((s8*)ptr)[iVar7] == 0) {
+ if (pEnt->next != NULL && pEnt != NULL) {
+ if ((iVar1 <= pEnt->x.HALF.HI) && (iVar4 <= pEnt->y.HALF.HI)) {
+ ptr[iVar7] = pEnt->type + 1;
+ pEnt->type2 = 1;
+ sVar6++;
+ SoundReq(CuccoMinigame_Sounds[pEnt->type]);
+ }
+ } else {
+ ((s8*)ptr)[iVar7] = val;
+ }
+ } else if (0 < (s8)ptr[iVar7]) {
+ sVar6++;
+ if (pEnt->next != NULL && pEnt != NULL) {
+ iVar2 = iVar1 + 4;
+ if (iVar2 > pEnt->x.HALF.HI) {
+ pEnt->x.HALF.HI = iVar2;
+ }
+ iVar2 = iVar4 + 4;
+ if (iVar2 > pEnt->y.HALF.HI) {
+ pEnt->y.HALF.HI = iVar2;
+ }
+ } else {
+ ((s8*)ptr)[iVar7] = val;
+ }
+ }
+ }
+
+ this->unk6a = sVar6;
+ gPlayerState.field_0x27[0] = 0xff;
+ if (--this->unk68 < 1) {
+ SoundReq(SFX_CUCCO_MINIGAME_BELL);
+ sub_08050384();
+ } else {
+ gActiveScriptInfo.commandSize = 0;
+ }
+}
+END_NONMATCH
+
+void CuccoMinigame_Cleanup(ObjectB9Entity* this) {
+ Entity** puVar1;
+ s8* pcVar2;
+ int index;
+
+ pcVar2 = this->unk70;
+ puVar1 = super->myHeap;
+
+ for (index = 9; index >= 0; index--, pcVar2++, puVar1++) {
+ Entity* pEnt = *puVar1;
+ if (*pcVar2 >= 0 && pEnt != NULL) {
+ DeleteEntityAny(pEnt);
+ }
+ }
+}
+
+void sub_080A13B4(ObjectB9Entity* this, ScriptExecutionContext* context) {
+ if (this->unk6a >= this->unk6c) {
+ MessageFromTarget(0x300c);
+ context->condition = 1;
+ } else {
+ MessageFromTarget(0x3005);
+ context->condition = 0;
+ }
+}
+
+void sub_080A13E8(ObjectB9Entity* this) {
+ bool32 bVar2;
+ const u8* ptr = &gUnk_08124EA0[sub_080A1514() * 4];
+
+ bVar2 = 0;
+ switch (ptr[0]) {
+ case 0x3f:
+ if (gSave.stats.hasAllFigurines) {
+ bVar2 = 1;
+ }
+ break;
+ case 0x5c:
+ if (gSave.didAllFusions) {
+ bVar2 = 1;
+ }
+ break;
+ case 0x63:
+ if (!CheckGlobalFlag(0x4f)) {
+ SetGlobalFlag(0x4f);
+ break;
+ }
+ bVar2 = 1;
+ break;
+ }
+
+ if (!bVar2) {
+ sub_080A7C18(ptr[0], ptr[1], 0);
+ } else {
+ this->unk6e = 2;
+ }
+}
+
+void sub_080A1460(ObjectB9Entity* this) {
+ s8* pcVar1;
+ int iVar2;
+ s32 rupees;
+ const u8* ptr;
+
+ sub_080A1514();
+ pcVar1 = this->unk70;
+ rupees = 0;
+ ptr = CuccoMinigameRupees;
+
+ for (iVar2 = 9; iVar2 >= 0; iVar2--) {
+ // Weird register addition
+ // ptr[*pcVar1] translates to add r0,r3,r0 but should be add r0,r3
+ u32 temp = *pcVar1;
+ temp += (int)ptr;
+ rupees += *(u8*)temp;
+ pcVar1++;
+ }
+ ModRupees(rupees);
+ MessageNoOverlap(0x3007, super);
+ gMessage.rupees = (u16)rupees;
+}
+
+void sub_080A14A8(void) {
+ int iVar1;
+
+ iVar1 = sub_080A1514();
+ iVar1++;
+ if (iVar1 > 9) {
+ iVar1 = 9;
+ }
+
+ if (iVar1 & 1) {
+ SetGlobalFlag(0x4b);
+ } else {
+ ClearGlobalFlag(0x4b);
+ }
+
+ if (iVar1 & 2) {
+ SetGlobalFlag(0x4c);
+ } else {
+ ClearGlobalFlag(0x4c);
+ }
+
+ if (iVar1 & 4) {
+ SetGlobalFlag(0x4d);
+ } else {
+ ClearGlobalFlag(0x4d);
+ }
+
+ if (iVar1 & 8) {
+ SetGlobalFlag(0x4e);
+ } else {
+ ClearGlobalFlag(0x4e);
+ }
+}
+
+u32 sub_080A1514(void) {
+ u32 rv = 0;
+
+ if (CheckGlobalFlag(0x4b)) {
+ rv = 1;
+ }
+
+ if (CheckGlobalFlag(0x4c)) {
+ rv |= 2;
+ }
+
+ if (CheckGlobalFlag(0x4d)) {
+ rv |= 4;
+ }
+
+ if (CheckGlobalFlag(0x4e)) {
+ rv |= 8;
+ }
+ return rv;
+}
+
+void CuccoMinigame_Init(Entity* this, ScriptExecutionContext* context) {
+ Entity* pEnt;
+ const short* pCuccoMinigameDef;
+ int index;
+ Entity** ppEVar5;
+ RoomControls* room;
+
+ context->condition = 0;
+ pEnt = CreateObject(CUCCO_MINIGAME, 0, 0);
+ if (pEnt != NULL) {
+ pEnt->myHeap = (u32*)zMalloc(sizeof(ObjectB9Heap));
+ if (pEnt->myHeap == NULL) {
+ DeleteEntityAny(pEnt);
+ } else {
+ *(ScriptExecutionContext**)&((GenericEntity*)pEnt)->cutsceneBeh =
+ (ScriptExecutionContext*)StartCutscene(pEnt, (u16*)context->intVariable);
+ pCuccoMinigameDef = pObjectB9_MinigameCuccoDefs[sub_080A1514()];
+ ppEVar5 = (Entity**)pEnt->myHeap;
+ room = &gRoomControls;
+ for (index = 9; index >= 0; index--, pCuccoMinigameDef += 3) {
+ if (pCuccoMinigameDef[0] < 1) {
+ pEnt = NULL;
+ } else {
+ pEnt = (Entity*)CreateEnemy(CUCCO_AGGR, pCuccoMinigameDef[0] - 1);
+ if (pEnt != NULL) {
+ pEnt->x.HALF.HI = room->origin_x + pCuccoMinigameDef[1];
+ pEnt->y.HALF.HI = room->origin_y + pCuccoMinigameDef[2];
+ pEnt->collisionLayer = 1;
+ }
+ }
+ *ppEVar5++ = pEnt;
+ }
+ context->condition = 1;
+ }
+ }
+}
+
+void sub_080A1608(void) {
+ u16 messageIndex;
+ const u16* ptr;
+
+ messageIndex = 0x3002;
+ if (CheckRoomFlag(1)) {
+ messageIndex = 0x3006;
+ }
+ MessageFromTarget(messageIndex);
+ gMessage.textWindowPosX = 1;
+ gMessage.textWindowPosY = 0;
+ ptr = &gUnk_08124C20[sub_080A1514() * 2];
+ gMessage.rupees = ptr[0];
+ gMessage.field_0x14 = ptr[1];
+}
+
+void sub_080A1648(void) {
+ SetTileType(0x407f, 0xd36, 1);
+ SetTileType(0x407f, 0xd37, 1);
+ SetTileType(0x407f, 0xd38, 1);
+ SetTileType(0x407e, 0xd75, 1);
+ SetTileType(0x407e, 0xe75, 1);
+}
+
+void sub_080A169C(void) {
+ sub_0807BA8C(0xd36, 1);
+ sub_0807BA8C(0xd37, 1);
+ sub_0807BA8C(0xd38, 1);
+ sub_0807BA8C(0xd75, 1);
+ sub_0807BA8C(0xe75, 1);
+}
diff --git a/src/object/figurineDevice.c b/src/object/figurineDevice.c
index df7dbdc5..a9efe80c 100644
--- a/src/object/figurineDevice.c
+++ b/src/object/figurineDevice.c
@@ -303,7 +303,7 @@ void FigurineDevice_Action4(FigurineDeviceEntity* this) {
gMessage.textWindowPosX = 1;
gMessage.textWindowPosY = 0xc;
#endif
- gMessage.field_0x10 = this->unk_81;
+ gMessage.rupees = this->unk_81;
break;
}
}
@@ -417,9 +417,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], &gUnk_08120AB4);
+ sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120AB4); // TODO convert data
} else {
- sub_0805F46C((u32)gUnk_08120AE4[super->type2], &gUnk_08120ACC);
+ sub_0805F46C((u32)gUnk_08120AE4[super->type2], (Font*)&gUnk_08120ACC); // TODO convert data
}
gScreen.bg0.updated = 1;
}
@@ -477,7 +477,7 @@ void sub_08088478(void) {
gMessage.textWindowPosX = 1;
gMessage.textWindowPosY = 0xc;
if (set0x10) {
- gMessage.field_0x10 = 5;
+ gMessage.rupees = 5;
}
#ifndef EU
gPlayerEntity.animationState = 6;
diff --git a/src/object/fileScreenObjects.c b/src/object/fileScreenObjects.c
index 7d2a295f..c7cac4e7 100644
--- a/src/object/fileScreenObjects.c
+++ b/src/object/fileScreenObjects.c
@@ -252,7 +252,7 @@ void sub_0808EABC(Entity* this) {
void sub_0808EB74(Entity* this) {
Entity* entity = sub_0808EC80(gMapDataBottomSpecial.unk6);
- if (entity) {
+ if (entity != NULL) {
this->x.WORD = entity->x.WORD;
this->y.WORD = entity->y.WORD;
this->spriteRendering.b3 = entity->spriteRendering.b3;
@@ -305,7 +305,7 @@ void sub_0808EBB8(Entity* this) {
// Fall through
default:
entity = sub_0808EC80(var0);
- if (entity) {
+ if (entity != NULL) {
SortEntityBelow(entity, this);
this->spriteRendering.b3 = entity->spriteRendering.b3;
x = entity->x.HALF.HI;
diff --git a/src/object/fireballChain.c b/src/object/fireballChain.c
new file mode 100644
index 00000000..ac5322b7
--- /dev/null
+++ b/src/object/fireballChain.c
@@ -0,0 +1,41 @@
+#define NENT_DEPRECATED
+#include "global.h"
+#include "entity.h"
+#include "functions.h"
+#include "projectile.h"
+#include "projectile/winder.h"
+
+void FireballChain(Entity* thisx) {
+ WinderEntity* newSegment;
+ Entity* parent;
+ Entity* child;
+ s32 i;
+ s32 j;
+
+ if (gEntCount > 0x42) {
+ return;
+ }
+
+ for (i = 0; i < 5; i++) {
+ u16* tmp;
+
+ newSegment = (WinderEntity*)CreateProjectile(WINDER);
+ if (i == 0) {
+ child = parent = &newSegment->base;
+ }
+
+ newSegment->base.type = i;
+ newSegment->base.parent = parent;
+ newSegment->base.child = child;
+ CopyPosition(thisx, &newSegment->base);
+
+ for (j = 0, tmp = newSegment->positions; j < WINDER_NUM_SEGMENTS; j++) {
+ *tmp++ = thisx->x.HALF.HI;
+ *tmp++ = thisx->y.HALF.HI;
+ }
+
+ child = &newSegment->base;
+ }
+
+ DeleteThisEntity();
+}
diff --git a/src/object/floatingPlatform.c b/src/object/floatingPlatform.c
index d62d7603..9701ba66 100644
--- a/src/object/floatingPlatform.c
+++ b/src/object/floatingPlatform.c
@@ -33,12 +33,11 @@ void sub_080860D8(FloatingPlatformEntity* this) {
}
void sub_0808611C(FloatingPlatformEntity* this) {
- int iVar2;
+ bool32 iVar2 = sub_08086168(this);
- iVar2 = sub_08086168(this);
if (super->actionDelay != 0 && super->parent->actionDelay == 0) {
- if (iVar2 != 0) {
+ if (iVar2) {
super->parent->actionDelay++;
}
@@ -46,7 +45,7 @@ void sub_0808611C(FloatingPlatformEntity* this) {
} else if (super->actionDelay == 0) {
sub_080A2BE4(super, iVar2);
} else {
- sub_080A2BE4(super, 0);
+ sub_080A2BE4(super, FALSE);
}
if (--this->unk70 == 0) {
diff --git a/src/object/gyorgBossObject.c b/src/object/gyorgBossObject.c
index b63b8d81..ebbec424 100644
--- a/src/object/gyorgBossObject.c
+++ b/src/object/gyorgBossObject.c
@@ -10,7 +10,6 @@
extern const ScreenTransitionData gUnk_0813ABD0;
-extern u32 sub_08079F8C(void);
struct GyorgChildSpawns {
s16 offsetX;
s16 offsetY;
diff --git a/src/object/houseDoorExterior.c b/src/object/houseDoorExterior.c
index 1627c7e8..baadd362 100644
--- a/src/object/houseDoorExterior.c
+++ b/src/object/houseDoorExterior.c
@@ -53,7 +53,7 @@ void sub_080866D8(Entity* this) {
if ((*((u32*)(&this->field_0x68)) & mask) == 0 && sub_080867CC(prop->unk5) &&
CheckRegionOnScreen(prop->unk0, prop->unk2, 32, 32)) {
entity = CreateObject(HOUSE_DOOR_EXT, prop->unk7, prop->unk6);
- if (entity) {
+ if (entity != NULL) {
entity->field_0x6c.HALF.LO = i;
entity->x.HALF.HI = gRoomControls.origin_x + prop->unk0 + 16;
entity->y.HALF.HI = gRoomControls.origin_y + prop->unk2 + 32;
@@ -157,7 +157,7 @@ static void sub_080868EC(Entity* entity, unk_80868EC* arg1) {
void sub_0808692C(Entity* this) {
this->flags &= ~ENT_SCRIPTED;
this->type2 = 2;
- this->action = this->frameIndex == 0 ? 1 : 2;
+ this->action = (this->frameIndex == 0) ? 1 : 2;
this->subAction = 0;
this->actionDelay = 8;
}
diff --git a/src/object/lilypadSmall.c b/src/object/lilypadSmall.c
index ce03ff99..eed1578f 100644
--- a/src/object/lilypadSmall.c
+++ b/src/object/lilypadSmall.c
@@ -4,7 +4,7 @@
extern u16 gUnk_08123318[];
static void sub_08097B24(Entity* this);
-static u32 sub_08097ADC(Entity* this);
+static bool32 sub_08097ADC(Entity* this);
void LilypadSmall(Entity* this) {
u32 rand;
@@ -29,19 +29,19 @@ void LilypadSmall(Entity* this) {
}
}
-static u32 sub_08097ADC(Entity* this) {
- if ((gPlayerState.flags & PL_MINISH) == 0) {
- return 0;
+static bool32 sub_08097ADC(Entity* this) {
+ if (!(gPlayerState.flags & PL_MINISH)) {
+ return FALSE;
} else if (EntityInRectRadius(this, &gPlayerEntity, 8, 8) == 0) {
- return 0;
- } else if (sub_08079F8C() == 0) {
- return 0;
+ return FALSE;
+ } else if (!sub_08079F8C()) {
+ return FALSE;
} else {
gPlayerState.field_0x14 = 1;
if (gPlayerEntity.z.HALF.HI != 0) {
- return 0;
+ return FALSE;
} else {
- return 1;
+ return TRUE;
}
}
}
@@ -52,7 +52,7 @@ static void sub_08097B24(Entity* this) {
u16* temp3;
if (--this->actionDelay == 0) {
- this->actionDelay = 0x5a;
+ this->actionDelay = 90;
this->frameIndex = (this->frameIndex + 1) & 3;
}
temp3 = gUnk_08123318;
diff --git a/src/object/mazaalBossObject.c b/src/object/mazaalBossObject.c
new file mode 100644
index 00000000..adc3ab6d
--- /dev/null
+++ b/src/object/mazaalBossObject.c
@@ -0,0 +1,207 @@
+#define NENT_DEPRECATED
+#include "global.h"
+#include "entity.h"
+#include "enemy.h"
+#include "functions.h"
+#include "item.h"
+#include "object.h"
+#include "player.h"
+#include "new_player.h"
+#include "room.h"
+#include "screen.h"
+#include "sound.h"
+
+extern u16 script_Object89Mazaal[];
+
+typedef struct {
+ /* 0x00 */ Entity base;
+ /* 0x68 */ u8 unk_68[0x1C];
+ /* 0x84 */ ScriptExecutionContext* cutsceneBeh;
+} MazaalBossObjectEntity;
+
+enum MazaalBossObjectActions {
+ /* 0 */ MAZAAL_BOSS_OBJECT_ACTION_0,
+ /* 1 */ MAZAAL_BOSS_OBJECT_ACTION_1,
+ /* 2 */ MAZAAL_BOSS_OBJECT_ACTION_2,
+ /* 3 */ MAZAAL_BOSS_OBJECT_ACTION_3,
+ /* 4 */ MAZAAL_BOSS_OBJECT_ACTION_4,
+ /* 5 */ MAZAAL_BOSS_OBJECT_ACTION_5,
+ /* 6 */ MAZAAL_BOSS_OBJECT_ACTION_6,
+ /* 7 */ MAZAAL_BOSS_OBJECT_ACTION_7,
+ /* 8 */ MAZAAL_BOSS_OBJECT_ACTION_8,
+};
+
+void MazaalBossObject_Action0(MazaalBossObjectEntity* this); // 0809AB04
+void MazaalBossObject_Action1(MazaalBossObjectEntity* this); // 0809ABA4
+void MazaalBossObject_Action2(MazaalBossObjectEntity* this); // 0809ABB0
+void MazaalBossObject_Action3(MazaalBossObjectEntity* this); // 0809ABD4
+void MazaalBossObject_Action4(MazaalBossObjectEntity* this); // 0809ABF4
+void MazaalBossObject_Action5(MazaalBossObjectEntity* this); // 0809AC3C
+void MazaalBossObject_Action6(MazaalBossObjectEntity* this); // 0809ACA0
+void MazaalBossObject_Action7(MazaalBossObjectEntity* this); // 0809ACCC
+void MazaalBossObject_Action8(MazaalBossObjectEntity* this); // 0809ACE8
+void sub_0809AD68(MazaalBossObjectEntity* this); // 0809AD68
+void sub_0809AD8C(MazaalBossObjectEntity* this); // 0809AD8C
+
+void MazaalBossObject(Entity* thisx) {
+ static void (*const MazaalBossObject_Actions[])(MazaalBossObjectEntity*) = {
+ MazaalBossObject_Action0, MazaalBossObject_Action1, MazaalBossObject_Action2,
+ MazaalBossObject_Action3, MazaalBossObject_Action4, MazaalBossObject_Action5,
+ MazaalBossObject_Action6, MazaalBossObject_Action7, MazaalBossObject_Action8,
+ };
+
+ MazaalBossObject_Actions[thisx->action]((MazaalBossObjectEntity*)thisx);
+}
+
+void MazaalBossObject_Action0(MazaalBossObjectEntity* this) {
+ Entity* mazaalHead;
+
+ if (CheckFlags(0x31)) {
+ sub_0809AD68(this);
+ sub_0809AD8C(this);
+ DeleteThisEntity();
+ }
+
+ mazaalHead = CreateEnemy(MAZAAL_HEAD, 0);
+ if (mazaalHead == NULL) {
+ return;
+ }
+
+ CopyPosition(super, mazaalHead);
+ super->child = mazaalHead;
+
+ if (gRoomTransition.field_0x38 != 0) {
+ if (gRoomTransition.field_0x39 != 0) {
+ DeleteThisEntity();
+ }
+
+ super->action = MAZAAL_BOSS_OBJECT_ACTION_7;
+ super->spriteSettings.draw = 0;
+ gRoomControls.camera_target = super;
+ sub_080809D4();
+ } else {
+ super->action = MAZAAL_BOSS_OBJECT_ACTION_1;
+ super->actionDelay = 30;
+ super->frameIndex = gRoomTransition.field_0x38;
+ super->spritePriority.b0 = 7;
+ super->spriteOffsetY = 0x20;
+
+ this->cutsceneBeh = StartCutscene(super, script_Object89Mazaal);
+ }
+}
+
+void MazaalBossObject_Action1(MazaalBossObjectEntity* this) {
+ ExecuteScriptForEntity(super, NULL);
+}
+
+void MazaalBossObject_Action2(MazaalBossObjectEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->action = MAZAAL_BOSS_OBJECT_ACTION_3;
+ super->actionDelay = 120;
+ gRoomControls.camera_target = super->child;
+ }
+}
+
+void MazaalBossObject_Action3(MazaalBossObjectEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->action = MAZAAL_BOSS_OBJECT_ACTION_4;
+ super->actionDelay = 90;
+ super->child->subAction = 1;
+ }
+}
+
+void MazaalBossObject_Action4(MazaalBossObjectEntity* this) {
+ if (super->child->subAction > 2) {
+ if (--super->actionDelay == 0) {
+ super->action = MAZAAL_BOSS_OBJECT_ACTION_5;
+ super->actionDelay = 8;
+ super->field_0xf = 0;
+ super->spriteRendering.alphaBlend = BLDALPHA_BLEND(1, 0);
+
+ gScreen.controls.layerFXControl =
+ BLDCNT_TGT2_BG3 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG0 | BLDCNT_EFFECT_BLEND;
+ gScreen.controls.alphaBlend = BLDALPHA_BLEND(0x10, 0);
+ }
+ }
+}
+
+void MazaalBossObject_Action5(MazaalBossObjectEntity* this) {
+ u32 tmp;
+
+ if (--super->actionDelay == 0) {
+ super->actionDelay = 8;
+
+ tmp = ++super->field_0xf;
+ tmp &= 0xFF;
+ gScreen.controls.alphaBlend = BLDALPHA_BLEND((0x10 - tmp) & 0xFF, tmp);
+
+ if (super->field_0xf > 15) {
+ super->spriteRendering.alphaBlend = BLDALPHA_BLEND(4, 0);
+ gScreen.controls.layerFXControl = 0;
+ super->action = MAZAAL_BOSS_OBJECT_ACTION_6;
+ super->actionDelay = 15;
+ super->spriteSettings.draw = 0;
+ }
+ }
+}
+
+void MazaalBossObject_Action6(MazaalBossObjectEntity* this) {
+ if (--super->actionDelay == 0) {
+ super->child->subAction = 6;
+ gRoomTransition.field_0x38 = 0xF1;
+
+ DeleteEntity(super);
+ }
+}
+
+void MazaalBossObject_Action7(MazaalBossObjectEntity* this) {
+ if (super->child->actionDelay == 1) {
+ super->action = MAZAAL_BOSS_OBJECT_ACTION_8;
+ super->subAction = 0;
+ super->actionDelay = 180;
+ }
+}
+
+void MazaalBossObject_Action8(MazaalBossObjectEntity* this) {
+ switch (super->subAction) {
+ default:
+ if (--super->actionDelay == 0) {
+ super->actionDelay = 90;
+ super->subAction = 1;
+ SoundReq(SFX_SECRET_BIG);
+ SetFlag(0x31);
+ sub_0809AD8C(this);
+ }
+ break;
+ case 1:
+ if (--super->actionDelay == 0) {
+ super->actionDelay = 120;
+ super->subAction = 2;
+ sub_0809AD68(this);
+ }
+ break;
+ case 2:
+ if (--super->actionDelay == 0) {
+ gRoomControls.camera_target = &gNewPlayerEntity.base;
+ gPlayerState.controlMode = CONTROL_1;
+ DeleteThisEntity();
+ }
+ break;
+ }
+}
+
+void sub_0809AD68(MazaalBossObjectEntity* this) {
+ LoadRoomEntityList(GetCurrentRoomProperty(super->type));
+ if (GetInventoryValue(ITEM_OCARINA) != 0) {
+ LoadRoomEntityList(GetCurrentRoomProperty(super->type2));
+ }
+}
+
+void sub_0809AD8C(MazaalBossObjectEntity* this) {
+ Entity* archway = CreateObject(ARCHWAY, 0x22, 0);
+
+ if (archway != NULL) {
+ archway->x.HALF.HI = gRoomControls.origin_x + 0xB8;
+ archway->y.HALF.HI = gRoomControls.origin_y + 8;
+ }
+}
diff --git a/src/object/minecart.c b/src/object/minecart.c
index ddd5d8f1..608c7e51 100644
--- a/src/object/minecart.c
+++ b/src/object/minecart.c
@@ -1,67 +1,82 @@
+#define NENT_DEPRECATED
#include "object.h"
#include "functions.h"
#include "hitbox.h"
-extern u32 sub_08091DDC(Entity*);
+typedef struct {
+ Entity base;
+ u8 filler[0x1C];
+ struct_030010EC* minecartData;
+} MinecartEntity;
+
extern u32 sub_08007DD6(u32, u32);
extern void sub_08017744(Entity*);
-extern void sub_08091C0C(Entity*);
-extern void (*const gUnk_081223A8[])(Entity*);
+u32 sub_08091DDC(MinecartEntity*);
+void sub_080916EC(MinecartEntity*);
+void sub_080917DC(MinecartEntity*);
+void sub_080918A4(MinecartEntity*);
+void sub_080919AC(MinecartEntity*);
+void sub_08091C0C(MinecartEntity*);
+void sub_08091C98(MinecartEntity*);
+void sub_08091CC8(MinecartEntity*);
+void sub_08091D90(MinecartEntity*);
-extern const s8 gUnk_081223C8[];
extern const u32 gUnk_081223D8[];
void Minecart(Entity* this) {
- gUnk_081223A8[this->action](this);
+ static void (*const actionFuncs[])(MinecartEntity*) = {
+ sub_080916EC, sub_080917DC, sub_080918A4, sub_080919AC, sub_08091C0C, sub_08091C98, sub_08091CC8, sub_08091D90,
+ };
+ actionFuncs[this->action]((MinecartEntity*)this);
this->bitfield = 0;
}
-void sub_080916EC(Entity* this) {
- struct_030010EC* unk = &gRoomTransition.minecart_data[this->actionDelay];
+void sub_080916EC(MinecartEntity* this) {
+ struct_030010EC* unk = &gRoomTransition.minecart_data[super->actionDelay];
- *(struct_030010EC**)&this->cutsceneBeh.HWORD = unk;
- if ((gRoomControls.room != unk->field_0x4) || (gPlayerState.flags & PL_IN_MINECART) != 0) {
+ this->minecartData = unk;
+ if ((gRoomControls.room != unk->room) || (gPlayerState.flags & PL_IN_MINECART) != 0) {
DeleteThisEntity();
}
- this->x.HALF.HI = gRoomControls.origin_x + ((unk->field_0x0 & 0x3f) << 4) + 8;
- this->y.HALF.HI = gRoomControls.origin_y + ((unk->field_0x0 & 0xfc << 4) >> 2) + 8;
- this->animationState = unk->field_0x5;
- this->type2 = unk->field_0x6;
- this->action = 1;
- this->hitbox = (Hitbox*)&gUnk_080FD310;
- COLLISION_ON(this);
- this->hitType = 1;
- this->field_0x3c = 0x47;
- this->hurtType = 0x44;
- this->flags2 = 0x80;
- this->direction = DirectionFromAnimationState(this->animationState);
- this->speed = 0x700;
- this->spritePriority.b1 = 3;
- InitAnimationForceUpdate(this, this->type2 + 4 + this->animationState);
- SetTile(0x4022, COORD_TO_TILE(this), this->collisionLayer);
+ super->x.HALF.HI = gRoomControls.origin_x + ((unk->tilePos & 0x3f) << 4) + 8;
+ super->y.HALF.HI = gRoomControls.origin_y + ((unk->tilePos & 0xfc << 4) >> 2) + 8;
+ super->animationState = unk->animationState;
+ super->type2 = unk->field_0x6;
+ super->action = 1;
+ super->hitbox = (Hitbox*)&gUnk_080FD310;
+ COLLISION_ON(super);
+ super->hitType = 1;
+ super->field_0x3c = 0x47;
+ super->hurtType = 0x44;
+ super->flags2 = 0x80;
+ super->direction = DirectionFromAnimationState(super->animationState);
+ super->speed = 0x700;
+ super->spritePriority.b1 = 3;
+ InitAnimationForceUpdate(super, super->type2 + 4 + super->animationState);
+ SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer);
}
-void sub_080917DC(Entity* this) {
- if ((this->bitfield & 0x7f) == 0x1d) {
- this->zVelocity = Q_16_16(2.625);
- this->action = 7;
- InitAnimationForceUpdate(this, this->type2 + 4 + this->animationState);
+void sub_080917DC(MinecartEntity* this) {
+ if ((super->bitfield & 0x7f) == 0x1d) {
+ super->zVelocity = Q_16_16(2.625);
+ super->action = 7;
+ InitAnimationForceUpdate(super, super->type2 + 4 + super->animationState);
SoundReq(SFX_13B);
} else {
- if (sub_0800445C(this) != 0) {
+ if (sub_0800445C(super) != 0) {
if (!((gPlayerState.flags & (PL_MINISH | PL_ROLLING)) || gPlayerState.field_0x1c ||
gPlayerState.heldObject || gPlayerState.jump_status)) {
- this->actionDelay++;
+ super->actionDelay++;
} else {
- this->actionDelay = 0;
+ super->actionDelay = 0;
}
} else {
- this->actionDelay = 0;
+ super->actionDelay = 0;
}
- if (this->type2 == 0) {
- if (this->actionDelay > 8) {
- this->action++;
+ if (super->type2 == 0) {
+ if (super->actionDelay > 8) {
+ super->action++;
gPlayerState.jump_status = 0x81;
gPlayerState.flags |= PL_ENTER_MINECART;
gPlayerEntity.zVelocity = Q_16_16(2.0);
@@ -72,100 +87,102 @@ void sub_080917DC(Entity* this) {
SoundReq(SFX_PLY_JUMP);
}
} else {
- this->actionDelay = 0;
+ super->actionDelay = 0;
}
}
}
-void sub_080918A4(Entity* this) {
- if (EntityInRectRadius(this, &gPlayerEntity, 2, 2) != 0) {
- gPlayerEntity.x.HALF.HI = this->x.HALF.HI;
- gPlayerEntity.y.HALF.HI = this->y.HALF.HI;
+void sub_080918A4(MinecartEntity* this) {
+ if (EntityInRectRadius(super, &gPlayerEntity, 2, 2) != 0) {
+ gPlayerEntity.x.HALF.HI = super->x.HALF.HI;
+ gPlayerEntity.y.HALF.HI = super->y.HALF.HI;
if (gPlayerEntity.z.HALF.HI > -0x10) {
if (gPlayerEntity.zVelocity >= 0) {
return;
}
- gPlayerEntity.animationState = this->animationState << 1;
+ gPlayerEntity.animationState = super->animationState << 1;
gPlayerState.flags = (gPlayerState.flags ^ PL_ENTER_MINECART) | PL_IN_MINECART;
- this->action++;
- this->field_0xf = 1;
- this->flags |= ENT_PERSIST;
- this->hitType = 0x97;
- this->field_0x3c = (gPlayerEntity.field_0x3c + 1) | 0x20;
- this->flags2 = gPlayerEntity.flags2;
- this->hurtType = 0x18;
- this->damage = 8;
- sub_0801766C(this);
- RestorePrevTileEntity(COORD_TO_TILE(this), this->collisionLayer);
+ super->action++;
+ super->field_0xf = 1;
+ super->flags |= ENT_PERSIST;
+ super->hitType = 0x97;
+ super->field_0x3c = (gPlayerEntity.field_0x3c + 1) | 0x20;
+ super->flags2 = gPlayerEntity.flags2;
+ super->hurtType = 0x18;
+ super->damage = 8;
+ sub_0801766C(super);
+ RestorePrevTileEntity(COORD_TO_TILE(super), super->collisionLayer);
SoundReq(SFX_137);
}
} else {
- gPlayerEntity.direction = GetFacingDirection(&gPlayerEntity, this);
+ gPlayerEntity.direction = GetFacingDirection(&gPlayerEntity, super);
}
if (gPlayerEntity.zVelocity < 0) {
- gPlayerEntity.spritePriority.b0 = this->spritePriority.b0 - 1;
+ gPlayerEntity.spritePriority.b0 = super->spritePriority.b0 - 1;
}
}
-void sub_080919AC(Entity* this) {
+void sub_080919AC(MinecartEntity* this) {
+ static const s8 gUnk_081223C8[] = { 0, -7, 7, 0, 0, 7, -7, 0 };
+
u32 iVar2;
u32 uVar3;
gRoomControls.unk5 = 7;
if ((gPlayerState.flags & PL_IN_MINECART) == 0) {
- this->action = 1;
+ super->action = 1;
return;
}
if ((gPlayerEntity.frame & 0xf) == 0) {
- COLLISION_OFF(this);
- CopyPosition(this, &gPlayerEntity);
+ COLLISION_OFF(super);
+ CopyPosition(super, &gPlayerEntity);
if ((gPlayerEntity.frame & 0xf0) == 0x10) {
- this->spriteOffsetY = 1;
+ super->spriteOffsetY = 1;
} else {
- this->spriteOffsetY = 0;
+ super->spriteOffsetY = 0;
}
} else {
- COLLISION_ON(this);
+ COLLISION_ON(super);
gPlayerEntity.speed = 0;
- LinearMoveUpdate(this);
- CopyPosition(this, &gPlayerEntity);
- gPlayerEntity.spritePriority.b0 = this->spritePriority.b0 - 1;
+ LinearMoveUpdate(super);
+ CopyPosition(super, &gPlayerEntity);
+ gPlayerEntity.spritePriority.b0 = super->spritePriority.b0 - 1;
if (!sub_08091DDC(this)) {
if ((gRoomTransition.frameCount & 0xf) == 0) {
SoundReq(SFX_138);
}
- if (--this->field_0xf == 0xff) {
+ if (--super->field_0xf == 0xff) {
SoundReq(SFX_PLY_VO7);
- this->field_0xf = 0x3c;
+ super->field_0xf = 0x3c;
}
- uVar3 = GetRelativeCollisionTile(this, gUnk_081223C8[this->animationState * 2],
- gUnk_081223C8[this->animationState * 2 + 1]);
- iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[this->animationState]);
+ uVar3 = GetRelativeCollisionTile(super, gUnk_081223C8[super->animationState * 2],
+ gUnk_081223C8[super->animationState * 2 + 1]);
+ iVar2 = sub_08007DD6(uVar3, gUnk_081223D8[super->animationState]);
if (iVar2 == 0) {
- this->direction = DirectionTurnAround(this->direction);
- this->animationState = AnimationStateFlip90(this->animationState);
+ super->direction = DirectionTurnAround(super->direction);
+ super->animationState = AnimationStateFlip90(super->animationState);
} else {
switch (uVar3) {
case 0x64:
- this->flags &= ~ENT_PERSIST;
- this->hitType = 1;
- this->field_0x3c = 0x47;
- this->hurtType = 0x44;
- this->flags2 = 0x80;
- this->action = 6;
- sub_08017744(this);
+ super->flags &= ~ENT_PERSIST;
+ super->hitType = 1;
+ super->field_0x3c = 0x47;
+ super->hurtType = 0x44;
+ super->flags2 = 0x80;
+ super->action = 6;
+ sub_08017744(super);
gPlayerState.jump_status = 0x41;
gPlayerState.flags = (gPlayerState.flags ^ PL_IN_MINECART) | PL_ENTER_MINECART;
gPlayerEntity.zVelocity = Q_16_16(2.0);
gPlayerEntity.speed = 0x200;
- gPlayerEntity.animationState = this->animationState << 1;
- gPlayerEntity.direction = this->direction;
+ gPlayerEntity.animationState = super->animationState << 1;
+ gPlayerEntity.direction = super->direction;
gPlayerEntity.flags |= PL_MINISH;
- sub_08004168(this);
- InitAnimationForceUpdate(this, this->animationState + 0xc);
+ sub_08004168(super);
+ InitAnimationForceUpdate(super, super->animationState + 0xc);
SoundReq(SFX_PLY_VO4);
SoundReq(SFX_139);
return;
@@ -177,21 +194,135 @@ void sub_080919AC(Entity* this) {
case 0x6d:
case 0x6e:
case 0x6f:
- if (uVar3 == GetTileUnderEntity(this)) {
+ if (uVar3 == GetTileUnderEntity(super)) {
sub_08091C0C(this);
- gPlayerEntity.animationState = this->animationState << 1;
+ gPlayerEntity.animationState = super->animationState << 1;
return;
}
break;
}
}
- gPlayerEntity.animationState = this->animationState << 1;
- if (this->animIndex == this->animationState) {
- UpdateAnimationSingleFrame(this);
+ gPlayerEntity.animationState = super->animationState << 1;
+ if (super->animIndex == super->animationState) {
+ UpdateAnimationSingleFrame(super);
} else {
- InitAnimationForceUpdate(this, this->animationState);
+ InitAnimationForceUpdate(super, super->animationState);
}
}
}
}
+
+void sub_08091C0C(MinecartEntity* this) {
+ sub_08004168(super);
+ CopyPosition(super, &gPlayerEntity);
+ switch (GetTileUnderEntity(super)) {
+ case 0x67:
+ if (super->direction == DirectionWest) {
+ super->direction = DirectionNorth;
+ super->animationState = 0;
+ } else {
+ super->direction = DirectionEast;
+ super->animationState = 1;
+ }
+ break;
+ case 0x68:
+ if (super->direction == DirectionEast) {
+ super->direction = DirectionSouth;
+ super->animationState = 2;
+ } else {
+ super->direction = DirectionWest;
+ super->animationState = 3;
+ }
+ break;
+ case 0x69:
+ if (super->direction == DirectionEast) {
+ super->direction = DirectionNorth;
+ super->animationState = 0;
+ } else {
+ super->direction = DirectionWest;
+ super->animationState = 3;
+ }
+ break;
+ case 0x6a:
+ if (super->direction == DirectionWest) {
+ super->direction = DirectionSouth;
+ super->animationState = 2;
+ } else {
+ super->direction = DirectionEast;
+ super->animationState = 1;
+ }
+ break;
+ default:
+ super->action = 3;
+ return;
+ }
+
+ super->action = 3;
+ gPlayerEntity.animationState = super->animationState << 1;
+}
+
+void sub_08091C98(MinecartEntity* this) {
+ LinearMoveUpdate(super);
+ CopyPosition(super, &gPlayerEntity);
+ if (gRoomControls.reload_flags == 0) {
+ super->action = 3;
+ super->speed = 0x700;
+ gRoomControls.camera_target = &gPlayerEntity;
+ }
+}
+
+void sub_08091CC8(MinecartEntity* this) {
+ struct_030010EC* minecartData;
+
+ if (gPlayerState.jump_status == 0) {
+ super->action = 1;
+ super->direction = DirectionTurnAround(super->direction);
+ super->animationState ^= 2;
+ gPlayerState.flags ^= PL_ENTER_MINECART;
+ minecartData = this->minecartData;
+ minecartData->tilePos = COORD_TO_TILE(super);
+ minecartData->room = gRoomControls.room;
+ minecartData->animationState = super->animationState;
+ InitAnimationForceUpdate(super, super->animationState + 0x10);
+ SetTile(0x4022, COORD_TO_TILE(super), super->collisionLayer);
+ } else {
+ UpdateAnimationSingleFrame(super);
+ gPlayerEntity.spritePriority.b0 = super->spritePriority.b0 - 1;
+ }
+}
+
+void sub_08091D90(MinecartEntity* this) {
+ if (super->zVelocity < 0) {
+ UpdateAnimationSingleFrame(super);
+ }
+ if (((super->frame & 0x7f) == 0) && GravityUpdate(super, 0x2000) == 0) {
+ super->type2 ^= 4;
+ super->action = 1;
+ this->minecartData->field_0x6 = super->type2;
+ SoundReq(SFX_13C);
+ }
+}
+
+bool32 sub_08091DDC(MinecartEntity* this) {
+ static const s8 gUnk_081223D0[] = { 0, -8, 8, 0, 0, 8, -8, 0 };
+ if ((sub_080B1AF0(super, gUnk_081223D0[super->animationState * 2], gUnk_081223D0[super->animationState * 2 + 1]) ==
+ 0xff) &&
+ (sub_0807BD14(&gPlayerEntity, super->animationState))) {
+ super->updatePriority = 6;
+ super->action = 5;
+ switch (super->direction) {
+ case 0:
+ case 8:
+ case 0x10:
+ case 0x18:
+ super->speed = 0xa0;
+ break;
+ }
+ gPlayerEntity.direction = super->direction;
+ gRoomControls.camera_target = super;
+ return 1;
+ } else {
+ return 0;
+ }
+}
diff --git a/src/object/object49.c b/src/object/object49.c
index 1b74b298..4eca5e6e 100644
--- a/src/object/object49.c
+++ b/src/object/object49.c
@@ -195,7 +195,7 @@ void sub_0808F3DC(Entity* this) {
if (this->type == 5 && (this->frame & 1)) {
Entity* entity = CreateObjectWithParent(this->child, 0x49, 8, 0);
- if (entity) {
+ if (entity != NULL) {
entity->parent = this->parent;
entity->child = this->parent->parent;
}
@@ -262,19 +262,19 @@ void sub_0808F554(Entity* this) {
void sub_0808F5EC(Entity* this) {
Entity* entity = CreateObjectWithParent(this->child, 0x49, 5, 0);
- if (entity) {
+ if (entity != NULL) {
entity->parent = this;
entity->child = this->child;
}
entity = CreateObjectWithParent(this->child, 0x49, 6, 0);
- if (entity) {
+ if (entity != NULL) {
entity->parent = this;
entity->child = this->child;
}
entity = CreateObjectWithParent(this->child, 0x49, 7, 0);
- if (entity) {
+ if (entity != NULL) {
entity->parent = this;
entity->child = this->child;
}
diff --git a/src/object/object96.c b/src/object/object96.c
new file mode 100644
index 00000000..2ffac509
--- /dev/null
+++ b/src/object/object96.c
@@ -0,0 +1,181 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "player.h"
+#include "asm.h"
+#include "functions.h"
+#include "sound.h"
+#include "item.h"
+#include "flags.h"
+#include "effects.h"
+
+typedef struct _struct_gUnk_08123FB0 {
+ void (*const funcEnt)(Entity*);
+ bool32 (*const func)(Entity*, const struct _struct_gUnk_08123FB0*);
+ s8 unk08;
+ s8 unk09;
+ u8 unk0a;
+ u8 unk0b;
+ u8 unk0c;
+ u8 type;
+ u8 unk0e;
+ u8 unk0f;
+ s32 zVelocity;
+ u32 unk14;
+ s16 speed;
+ s16 y;
+ u16 flag;
+ u8 actionDelay;
+ u8 unk1f;
+} struct_gUnk_08123FB0;
+
+static_assert(sizeof(struct_gUnk_08123FB0) == 0x20);
+
+void sub_0809D91C(Entity*);
+bool32 sub_0809D93C(Entity*, const struct_gUnk_08123FB0*);
+void Object96_Init(Entity*, const struct_gUnk_08123FB0*);
+void Object96_Action1(Entity*, const struct_gUnk_08123FB0*);
+void Object96_Action2(Entity*, const struct_gUnk_08123FB0*);
+void Object96_Action3(Entity*, const struct_gUnk_08123FB0*);
+
+static const struct_gUnk_08123FB0 gUnk_08123FB0[] = {
+ { sub_0809D91C, sub_0809D93C, 0, 0, 0x30, 0x30, 0x1, 0x3c, 0x3c, 0x13, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1,
+ 0x0 },
+ { sub_0809D91C, NULL, 0, 0, 0, 0, 0, 0x63, 0x63, 0x10, 0, 0x1800, 0, 0x18,
+#if defined(JP) || defined(DEMO_JP) || defined(EU)
+ 0xCD,
+#else
+ 0xd0,
+#endif
+ 0, 0 },
+ { sub_0809D91C, NULL, 0, 0, 0, 0, 0, 0x3c, 0x3c, 0xf, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1, 0x0 },
+ { sub_0809D91C, NULL, 0, 0, 0, 0, 0, 0x3c, 0x3c, 0x2, 0x10000, 0x1800, 0x140, 0x40, 0x4021, 0x1, 0x0 },
+ { sub_0809D91C, NULL, 0, 0, 0, 0, 0x0, 0x3c, 0x3c, 0xd, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1, 0x0 },
+ { sub_0809D91C, NULL, 0, 0, 0, 0, 0x0, 0x3c, 0x3c, 0x1a, 0x10000, 0x1800, 0x100, 0x40, 0x4021, 0x1, 0x0 },
+ { sub_0809D91C, NULL, 0, 0, 0, 0, 0x0, 0x3c, 0x3c, 0x13, 0x10000, 0x1800, 0x60, 0x40, 0x4021, 0x1, 0x0 },
+ { NULL, NULL, 0, 0, 0, 0, 0x0, 0x5c, 0x5c, 0x81, 0, 0x1800, 0x100, 0x20, 0x0, 0x1, 0x0 },
+};
+
+void Object96(Entity* this) {
+ static void (*const actionFuncs[])(Entity*, const struct_gUnk_08123FB0*) = {
+ Object96_Init,
+ Object96_Action1,
+ Object96_Action2,
+ Object96_Action3,
+ };
+ actionFuncs[this->action](this, &gUnk_08123FB0[this->type]);
+}
+
+void Object96_Init(Entity* this, const struct_gUnk_08123FB0* param_2) {
+ u32 type;
+ u32 dir;
+
+ this->action++;
+ this->collisionLayer = 2;
+ this->spriteRendering.b3 = 1;
+ this->zVelocity = param_2->zVelocity;
+ this->direction = param_2->unk0f;
+ this->speed = param_2->speed;
+ this->y.HALF.HI -= param_2->y;
+ this->z.WORD = 0;
+ this->actionDelay = param_2->actionDelay;
+ if ((this->direction & 0x80)) {
+ dir = this->direction;
+ if (dir == 0x81) {
+ this->direction = (((gPlayerEntity.animationState * 4 + (Random() & 3)) - 2) & 0x1f) ^ 0x10;
+ }
+ }
+ UpdateSpriteForCollisionLayer(this);
+ type = this->type;
+ sub_08080CB4(this);
+ this->type = type;
+}
+
+void Object96_Action1(Entity* this, const struct_gUnk_08123FB0* param_2) {
+ u32 type;
+ s32 iVar3;
+
+ iVar3 = 1;
+ if (param_2->func != NULL) {
+ iVar3 = param_2->func(this, param_2);
+ }
+ if (iVar3 != 0) {
+ this->action++;
+ this->y.HALF.HI += param_2->y;
+ this->z.HALF.HI -= param_2->y;
+ }
+ type = this->type;
+ this->type = param_2->type;
+ sub_08080CB4(this);
+ this->type = type;
+}
+
+void Object96_Action2(Entity* this, const struct_gUnk_08123FB0* param_2) {
+ u8 type;
+
+ LinearMoveUpdate(this);
+ if (sub_080044EC(this, param_2->unk14) < 2) {
+ if (this->actionDelay) {
+ this->actionDelay--;
+ this->zVelocity = param_2->unk14 << 3;
+ } else {
+ this->action++;
+ this->collisionLayer = gPlayerEntity.collisionLayer;
+ UpdateSpriteForCollisionLayer(this);
+ if (param_2->funcEnt != NULL) {
+ param_2->funcEnt(this);
+ }
+ }
+ SoundReq(SFX_RUPEE_BOUNCE);
+ }
+ type = this->type;
+ this->type = param_2->type;
+ sub_08080CB4(this);
+ this->type = type;
+}
+
+void Object96_Action3(Entity* this, const struct_gUnk_08123FB0* param_2) {
+ u8 type;
+
+ if (gPlayerState.flags & 0x80) {
+ sub_0800445C(this);
+ } else {
+ if (IsCollidingPlayer(this)) {
+ CreateItemEntity(param_2->type, this->type2, 0);
+ if (param_2->flag) {
+ SetFlag(param_2->flag);
+ }
+ DeleteThisEntity();
+ }
+ }
+ type = this->type;
+ this->type = param_2->type;
+ sub_08080CB4(this);
+ this->type = type;
+}
+
+void sub_0809D91C(Entity* this) {
+ Entity* fxEnt;
+
+ fxEnt = CreateFx(this, FX_DASH, 0);
+ if (fxEnt != NULL) {
+ SortEntityBelow(this, fxEnt);
+ }
+ SoundReq(SFX_SECRET);
+}
+
+bool32 sub_0809D93C(Entity* this, const struct_gUnk_08123FB0* param_2) {
+ u32 uVar1;
+
+ if (gPlayerEntity.action == 6 && ((param_2->unk0c >> gPlayerEntity.animationState & 1) != 0)) {
+ uVar1 = (gPlayerEntity.x.HALF.HI - this->x.HALF.HI) + param_2->unk08 + param_2->unk0a;
+ if (param_2->unk0a * 2 <= (u16)uVar1) {
+ return 0;
+ }
+
+ uVar1 = (gPlayerEntity.y.HALF.HI - (this->y.HALF.HI + param_2->y)) + param_2->unk09 + param_2->unk0b;
+ if (param_2->unk0b * 2 > (u16)uVar1) {
+ return 1;
+ }
+ }
+ return 0;
+}
diff --git a/src/object/object98.c b/src/object/object98.c
new file mode 100644
index 00000000..798836dc
--- /dev/null
+++ b/src/object/object98.c
@@ -0,0 +1,68 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "projectile.h"
+#include "room.h"
+#include "functions.h"
+
+typedef struct {
+ Entity base;
+ u8 filler[0xC];
+ u16 unk74;
+ u16 unk76;
+ u8 filler2[0x6];
+ u8 unk7e;
+} Object98Entity;
+
+void sub_0809E360(Object98Entity*);
+void sub_0809E3E4(Object98Entity*);
+
+void Object98(Entity* this) {
+ static void (*const actionFuncs[])(Object98Entity*) = {
+ sub_0809E360,
+ sub_0809E3E4,
+ };
+
+ actionFuncs[this->action]((Object98Entity*)this);
+}
+
+void sub_0809E360(Object98Entity* this) {
+ u32 bVar1;
+ Entity* projEnt;
+ u32 index;
+
+ if (8 < super->actionDelay) {
+ super->actionDelay = 8;
+ }
+
+ if (0x48 - super->actionDelay > gEntCount) {
+ for (index = 0; index < super->actionDelay; index++) {
+ projEnt = CreateProjectile(GURUGURU_BAR_PROJECTILE);
+ projEnt->actionDelay = 14 + 12 * index;
+ projEnt->parent = super;
+ }
+
+ super->action = 1;
+ bVar1 = this->unk7e;
+ this->unk76 = bVar1 << 8;
+ super->animationState = bVar1 << 6;
+ SetDefaultPriority(super, 0);
+ if (super->type != 0) {
+ super->child = (Entity*)GetCurrentRoomProperty(super->type);
+ sub_080A2CC0(super, (u16**)&super->child, &this->unk74);
+ }
+ }
+}
+
+void sub_0809E3E4(Object98Entity* this) {
+ this->unk76 += super->type2;
+ super->animationState = this->unk76 >> 2;
+ if (super->type != 0) {
+ if ((super->direction & 0x80) == 0) {
+ LinearMoveUpdate(super);
+ }
+
+ if (--this->unk74 == 0) {
+ sub_080A2CC0(super, (u16**)&super->child, &this->unk74);
+ }
+ }
+}
diff --git a/src/object/object99.c b/src/object/object99.c
new file mode 100644
index 00000000..e8bf6a33
--- /dev/null
+++ b/src/object/object99.c
@@ -0,0 +1,39 @@
+#include "entity.h"
+#include "coord.h"
+
+void Object99(Entity* this) {
+ Entity* parent;
+
+ parent = this->parent;
+ if (parent->next == NULL) {
+ DeleteThisEntity();
+ }
+
+ if (this->action == 0) {
+ this->action = 1;
+ this->field_0x76.HALF.LO = parent->animationState;
+ this->field_0x74.HALF.LO = this->spriteOffsetX;
+ this->field_0x74.HALF.HI = this->spriteOffsetY;
+ InitializeAnimation(this, this->animationState);
+ }
+
+ if (parent->animationState != this->field_0x76.HALF.LO) {
+ DeleteThisEntity();
+ }
+ this->spriteSettings.draw = parent->spriteSettings.draw;
+ CopyPositionAndSpriteOffset(parent, this);
+ this->spriteOffsetX += this->field_0x74.HALF.LO;
+ this->spriteOffsetY += this->field_0x74.HALF.HI;
+ if (this->animationState != 2) {
+ this->y.HALF.HI++;
+ this->spriteOffsetY--;
+ } else {
+ this->y.HALF.HI--;
+ this->spriteOffsetY++;
+ }
+
+ GetNextFrame(this);
+ if (this->frame & 0x80) {
+ DeleteThisEntity();
+ }
+}
diff --git a/src/object/objectA6.c b/src/object/objectA6.c
new file mode 100644
index 00000000..fc77a54e
--- /dev/null
+++ b/src/object/objectA6.c
@@ -0,0 +1,51 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "flags.h"
+#include "hitbox.h"
+#include "effects.h"
+
+typedef struct {
+ Entity base;
+ u8 filler[0x1E];
+ u16 objFlags;
+} ObjectA6Entity;
+
+void sub_0809F920(ObjectA6Entity*);
+void sub_0809F964(ObjectA6Entity*);
+
+void ObjectA6(Entity* this) {
+ static void (*const actionFuncs[])(ObjectA6Entity*) = {
+ sub_0809F920,
+ sub_0809F964,
+ };
+
+ actionFuncs[this->action]((ObjectA6Entity*)this);
+}
+
+void sub_0809F920(ObjectA6Entity* this) {
+ if (CheckFlags(this->objFlags)) {
+ DeleteThisEntity();
+ }
+
+ super->action = 1;
+ COLLISION_ON(super);
+ super->field_0x3c = 7;
+ super->hurtType = 0x48;
+ super->hitType = 1;
+ super->flags2 = 2;
+ super->hitbox = (Hitbox*)&gHitbox_0;
+}
+
+void sub_0809F964(ObjectA6Entity* this) {
+ Entity* fxEnt;
+
+ if (super->bitfield == 0xa1) {
+ fxEnt = CreateFx(super, FX_MAGIC_STORM, 0);
+ if (fxEnt != NULL) {
+ fxEnt->spritePriority.b0 = 3;
+ fxEnt->spriteOffsetY = -5;
+ }
+ SetFlag(this->objFlags);
+ DeleteThisEntity();
+ }
+}
diff --git a/src/object/objectA9.c b/src/object/objectA9.c
new file mode 100644
index 00000000..6d9981ba
--- /dev/null
+++ b/src/object/objectA9.c
@@ -0,0 +1,37 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "sound.h"
+
+void sub_0809FEF8(Entity*);
+void sub_0809FF28(Entity*);
+
+void ObjectA9(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ sub_0809FEF8,
+ sub_0809FF28,
+ DeleteEntity,
+ };
+
+ actionFuncs[this->action]((Entity*)this);
+}
+
+void sub_0809FEF8(Entity* this) {
+ static const u8 typeAnimationStates[] = { 0x2, 0x0, 0x43, 0x0 };
+ static const u16 typeSounds[] = { SFX_124, SFX_197, SFX_11D, SFX_NONE };
+ this->action = 1;
+ InitializeAnimation(this, typeAnimationStates[this->type]);
+ SoundReq(typeSounds[this->type]);
+}
+
+void sub_0809FF28(Entity* this) {
+ Entity* pEVar1;
+
+ GetNextFrame(this);
+ if (this->frame & 0x80) {
+ this->action = 2;
+ pEVar1 = this->parent;
+ pEVar1->flags = this->actionDelay;
+ pEVar1->spriteSettings.draw = this->field_0xf;
+ ((GenericEntity*)pEVar1)->field_0x6c.HALF.HI &= 0xef;
+ }
+}
diff --git a/src/object/objectAB.c b/src/object/objectAB.c
new file mode 100644
index 00000000..767c5238
--- /dev/null
+++ b/src/object/objectAB.c
@@ -0,0 +1,59 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "flags.h"
+#include "asm.h"
+#include "player.h"
+#include "coord.h"
+
+extern void sub_0805B390(u32);
+
+void ObjectAB_Init(Entity*);
+void ObjectAB_Action1(Entity*);
+void ObjectAB_Action2(Entity*);
+void sub_080A0190(Entity*);
+
+void ObjectAB(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ ObjectAB_Init,
+ ObjectAB_Action1,
+ ObjectAB_Action2,
+ };
+
+ actionFuncs[this->action]((Entity*)this);
+}
+
+void ObjectAB_Init(Entity* this) {
+ this->action++;
+ this->collisionLayer = 1;
+ this->spriteRendering.b3 = 3;
+ this->spritePriority.b0 = 7;
+ this->subAction = 0;
+ InitializeAnimation(this, 0);
+}
+
+void ObjectAB_Action1(Entity* this) {
+ if (CheckRoomFlag(0)) {
+ GetNextFrame(this);
+ if (this->frame & 0x80) {
+ this->action++;
+ }
+ }
+}
+
+void ObjectAB_Action2(Entity* this) {
+ if (CheckRoomFlag(1)) {
+ sub_080A0190(this);
+ RequestPriorityDuration(this, 0x1e);
+ if (EntityInRectRadius(this, &gPlayerEntity, 0x10, 0x10)) {
+ sub_0805B390(0x37);
+ }
+ }
+}
+
+void sub_080A0190(Entity* this) {
+ this->subAction = 1;
+ CopyPosition(this, &gPlayerEntity);
+ gPlayerState.queued_action = 3;
+ gPlayerState.field_0x38 = 0;
+ gPlayerState.flags |= PL_PIT_IS_EXIT;
+}
diff --git a/src/object/objectAD.c b/src/object/objectAD.c
new file mode 100644
index 00000000..ca73277e
--- /dev/null
+++ b/src/object/objectAD.c
@@ -0,0 +1,54 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "functions.h"
+#include "screen.h"
+
+void sub_080A04A4(Entity*);
+void sub_080A04E0(Entity*);
+void sub_080A04E8();
+
+void ObjectAD(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ sub_080A04A4,
+ sub_080A04E0,
+ };
+
+ actionFuncs[this->action]((Entity*)this);
+}
+
+void sub_080A04A4(Entity* this) {
+ this->action = 1;
+ this->frameIndex = 4;
+ this->actionDelay = 0;
+ this->spriteRendering.b3 = 3;
+ this->spritePriority.b0 = 7;
+ this->z.WORD = 0;
+ this->spriteRendering.alphaBlend = 1;
+ sub_080A04E8();
+}
+
+void sub_080A04E0(Entity* this) {
+ sub_080A04E8();
+}
+
+void sub_080A04E8(Entity* this) {
+ int iVar2;
+ u32 uVar3;
+
+ iVar2 = (this->parent->z.HALF.HI < 0 ? -this->parent->z.HALF.HI : this->parent->z.HALF.HI) + 0x100;
+ SetAffineInfo(this, iVar2, iVar2, 0);
+ iVar2 = ((0x1c0 - iVar2) * 10) / iVar2;
+ if (this->parent->type == 0x41) {
+ uVar3 = iVar2 * 2;
+ if (0xc < uVar3) {
+ uVar3 = 0xc;
+ }
+ iVar2 = (0x10 - iVar2) * 0x100;
+ iVar2 |= uVar3;
+ iVar2 &= 0xffff;
+ } else {
+ iVar2 |= (0x10 - iVar2) * 0x100;
+ iVar2 &= 0xffff;
+ }
+ gScreen.controls.alphaBlend = iVar2;
+}
diff --git a/src/object/objectB.c b/src/object/objectB.c
index f0cfc4e5..fbf4ef50 100644
--- a/src/object/objectB.c
+++ b/src/object/objectB.c
@@ -124,7 +124,7 @@ void ObjectB_Action2(ObjectBEntity* this) {
break;
}
MessageFromTarget(messageIndex);
- gMessage.field_0x10 = super->type2;
+ gMessage.rupees = super->type2;
}
}
}
diff --git a/src/object/objectB4.c b/src/object/objectB4.c
new file mode 100644
index 00000000..90c3b287
--- /dev/null
+++ b/src/object/objectB4.c
@@ -0,0 +1,135 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "menu.h"
+#include "coord.h"
+#include "object.h"
+
+extern void sub_0806FB00(Entity*, u32, u32, u32);
+extern bool32 sub_0806FB38(Entity*);
+
+void ObjectB4_Type0(Entity*);
+void ObjectB4_Type1(Entity*);
+void ObjectB4_Type2(Entity*);
+void ObjectB4_Type3(Entity*);
+
+const u16 gUnk_08124B10[] = { 0x40, 0x58, 0x68, 0x80, 0x94, 0xA8, 0xB0, 0x0 };
+
+void ObjectB4(Entity* this) {
+ static void (*const typeFuncs[])(Entity*) = {
+ ObjectB4_Type0,
+ ObjectB4_Type1,
+ ObjectB4_Type2,
+ ObjectB4_Type3,
+ };
+
+ typeFuncs[this->type]((Entity*)this);
+}
+
+void ObjectB4_Type0(Entity* this) {
+ Entity* pEVar3;
+
+ switch (this->action) {
+ case 0:
+ this->action = 1;
+ this->spriteSettings.draw = 2;
+ this->frameIndex = 9;
+ this->actionDelay = 8;
+ this->field_0xf = 0;
+ this->spriteRendering.b3 = 1;
+ this->spritePriority.b0 = 4;
+ this->spriteOrientation.flipY = 1;
+ sub_0806FB00(this, 0xbf, 0x48, 0x1e);
+ break;
+ case 1:
+ if ((this->field_0xf < 7) && (--this->actionDelay == 0)) {
+ this->actionDelay = 1;
+ pEVar3 = CreateObject(OBJECT_B4, 1, this->field_0xf);
+ if (pEVar3 != NULL) {
+ CopyPosition(this, pEVar3);
+ pEVar3->y.HALF.HI = 0x68;
+ SortEntityBelow(this, pEVar3);
+ }
+ this->field_0xf++;
+ }
+
+ if (sub_0806FB38(this) || (1 < gMenu.menuType)) {
+ this->x.HALF.HI = 0xbf;
+ this->y.HALF.HI = 0x48;
+ this->frameIndex = 10;
+ this->action = 2;
+ while (this->field_0xf < 7) {
+ pEVar3 = CreateObject(OBJECT_B4, 1, this->field_0xf);
+ if (pEVar3 != NULL) {
+ CopyPosition(this, pEVar3);
+ pEVar3->y.HALF.HI = 0x68;
+ SortEntityBelow(this, pEVar3);
+ }
+ this->field_0xf++;
+ }
+
+ pEVar3 = CreateObject(OBJECT_B4, 2, 0);
+ if (pEVar3 != NULL) {
+ pEVar3->x.HALF.HI = 0xc4;
+ pEVar3->y.HALF.HI = 0x2c;
+ SortEntityAbove(this, pEVar3);
+ }
+
+ pEVar3 = CreateObject(OBJECT_B4, 3, 0);
+ if (pEVar3 != NULL) {
+ pEVar3->x.HALF.HI = 0xb4;
+ pEVar3->y.HALF.HI = 0x19;
+ SortEntityAbove(this, pEVar3);
+ }
+ }
+ }
+}
+
+void ObjectB4_Type1(Entity* this) {
+ switch (this->action) {
+ case 0:
+ this->action = 1;
+ this->spriteSettings.draw = 2;
+ this->frameIndex = this->type2 + 2;
+ sub_0806FB00(this, gUnk_08124B10[this->type2], 0x68, 0x14);
+ break;
+ case 1:
+ if (sub_0806FB38(this) || 1 < gMenu.menuType) {
+ this->x.HALF.HI = gUnk_08124B10[this->type2];
+ this->y.HALF.HI = 0x68;
+ this->spritePriority.b0 = 7 - this->type2;
+ this->action = 2;
+ }
+ break;
+ }
+}
+
+void ObjectB4_Type2(Entity* this) {
+ static const u8 gUnk_08124B30[] = { 9, 10, 11, 12, 11, 10, 9, -1 };
+ if (this->action == 0) {
+ this->action = 1;
+ this->spriteSettings.draw = 2;
+ this->spriteRendering.b3 = 1;
+ this->spritePriority.b0 = 0;
+ this->spriteOrientation.flipY = 1;
+ this->frameIndex = 11;
+ this->actionDelay = (Random() & 0x3f) + 0x40;
+ this->field_0xf = 0;
+ }
+
+ if (--this->actionDelay == 0) {
+ this->actionDelay = 4;
+ this->frameIndex = gUnk_08124B30[this->field_0xf++] + 2;
+ if (gUnk_08124B30[this->field_0xf] == 0xff) {
+ this->actionDelay = (Random() & 0x3f) + 0x40;
+ this->field_0xf = 0;
+ }
+ }
+}
+
+void ObjectB4_Type3(Entity* this) {
+ if (this->action == 0) {
+ this->action = 1;
+ this->spriteSettings.draw = 2;
+ this->frameIndex = 15;
+ }
+}
diff --git a/src/object/objectBlockingStairs.c b/src/object/objectBlockingStairs.c
new file mode 100644
index 00000000..f9aa6a1b
--- /dev/null
+++ b/src/object/objectBlockingStairs.c
@@ -0,0 +1,350 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "flags.h"
+#include "sound.h"
+#include "functions.h"
+#include "asm.h"
+#include "object.h"
+#include "effects.h"
+
+typedef struct {
+ Entity base;
+ u8 filler[0x10];
+ u16 tilePos;
+ u8 unk7a;
+ u8 unk7b;
+ u8 filler2[0xA];
+ u16 objFlags;
+} ObjectBlockingStairsEntity;
+
+extern const Hitbox gUnk_080FD288;
+
+void ObjectBlockingStairs_Init(ObjectBlockingStairsEntity*);
+void ObjectBlockingStairs_Action1(ObjectBlockingStairsEntity*);
+void ObjectBlockingStairs_Action2(ObjectBlockingStairsEntity*);
+void ObjectBlockingStairs_Action3(ObjectBlockingStairsEntity*);
+void sub_080932A8(ObjectBlockingStairsEntity*);
+void sub_08093248(ObjectBlockingStairsEntity*);
+void sub_08093280(ObjectBlockingStairsEntity*);
+void sub_08093334(ObjectBlockingStairsEntity*);
+void sub_08093364(ObjectBlockingStairsEntity*);
+void ObjectBlockingStairs_Action4(ObjectBlockingStairsEntity*);
+u32 sub_080932D8(u32);
+void sub_080931A4(ObjectBlockingStairsEntity*, u32);
+
+void ObjectBlockingStairs(Entity* this) {
+ static void (*const actionFuncs[])(ObjectBlockingStairsEntity*) = {
+ ObjectBlockingStairs_Init, ObjectBlockingStairs_Action1, ObjectBlockingStairs_Action2,
+ ObjectBlockingStairs_Action3, ObjectBlockingStairs_Action4,
+ };
+
+ actionFuncs[this->action]((ObjectBlockingStairsEntity*)this);
+}
+
+void ObjectBlockingStairs_Init(ObjectBlockingStairsEntity* this) {
+ int iVar1;
+ u32 uVar2;
+
+ switch (sub_080932D8(super->type)) {
+ case 1:
+ super->action = 4;
+ super->x.HALF.HI -= 0x20;
+ uVar2 = 2;
+ break;
+ case 2:
+ super->action = 4;
+ super->x.HALF.HI += 0x20;
+ uVar2 = 3;
+ break;
+ default:
+ super->action = 1;
+ super->speed = 0x80;
+ super->field_0x16 = 1;
+ super->actionDelay = 0;
+ super->field_0xf = 0;
+ this->unk7a = 0x20;
+ this->unk7b = 0x80;
+ if (super->type == 0) {
+ super->hitbox = (Hitbox*)&gUnk_080FD288;
+ }
+ uVar2 = 0;
+ if ((this->objFlags) && !CheckFlags(this->objFlags)) {
+ uVar2 = 1;
+ }
+ break;
+ }
+
+ sub_080931A4(this, uVar2);
+}
+
+void ObjectBlockingStairs_Action1(ObjectBlockingStairsEntity* this) {
+ u32 tileType;
+ int xDist;
+ Entity* ent;
+
+ xDist = (int)gPlayerEntity.x.HALF.HI - super->x.HALF.HI;
+
+ if (this->objFlags) {
+ if (!CheckFlags(this->objFlags)) {
+ return;
+ }
+ if (this->unk7a != 0) {
+ sub_080932A8(this);
+ return;
+ }
+ }
+
+ if ((this->unk7b & 0x3f) == 0) {
+ this->unk7b |= 0xf;
+ sub_080931A4(this, 0);
+ if (xDist < 0) {
+ this->unk7b |= 0x40;
+ }
+ }
+
+ if (this->unk7b & 0x40) {
+ tileType = (u32)GetTileType(this->tilePos - 1, super->collisionLayer);
+ } else {
+ tileType = (u32)GetTileType(this->tilePos + 1, super->collisionLayer);
+ }
+
+ switch (tileType) {
+ case 0x4030:
+ case 0x4031:
+ super->action = 3;
+ super->direction = Direction8FromAnimationState(gPlayerEntity.animationState);
+ super->speed = 0x80;
+ super->actionDelay = 0x40;
+ RequestPriorityDuration(super, 0x50);
+ EnqueueSFX(SFX_10F);
+ sub_08093248(this);
+ return;
+ }
+
+ if ((gPlayerEntity.animationState & 2) == 0) {
+ return;
+ }
+ RegisterCarryEntity(super);
+
+ if (this->unk7b & 0x80) {
+ this->unk7b &= ~0x80;
+ if ((this->unk7b & 0x40) != 0) {
+ SetTile(0x402c, this->tilePos - 1, super->collisionLayer);
+ SetTile(0x403d, this->tilePos + 1, super->collisionLayer);
+ } else {
+ SetTile(0x403d, this->tilePos - 1, super->collisionLayer);
+ SetTile(0x402d, this->tilePos + 1, super->collisionLayer);
+ }
+ } else if (this->unk7b & 0x40) {
+ if (xDist >= 5) {
+ this->unk7b &= ~(0x40 | 0x80);
+ SetTile(0x403d, this->tilePos - 1, super->collisionLayer);
+ SetTile(0x402d, this->tilePos + 1, super->collisionLayer);
+ }
+ } else {
+ if (-xDist > 4) {
+ this->unk7b |= 0x40;
+ SetTile(0x402c, this->tilePos - 1, super->collisionLayer);
+ SetTile(0x403d, this->tilePos + 1, super->collisionLayer);
+ }
+ }
+}
+
+void ObjectBlockingStairs_Action2(ObjectBlockingStairsEntity* this) {
+ if (super->actionDelay) {
+ sub_08093280(this);
+ } else {
+ if (gPlayerState.heldObject == 0x12) {
+ if ((gPlayerEntity.frame & 2) != 0 && ++super->field_0xf > 8) {
+ gPlayerState.queued_action = 16;
+ gPlayerState.field_0x38 = 0x40;
+ gPlayerState.flags |= PL_BUSY;
+ gPlayerEntity.x.HALF.LO = 0;
+ gPlayerEntity.y.HALF.LO = 0;
+ super->direction = (gPlayerEntity.animationState ^ 4) << 2;
+ super->actionDelay = 0x40;
+ EnqueueSFX(SFX_10F);
+ sub_08093248(this);
+ }
+ } else if (super->subAction == 6) {
+ super->action = 1;
+ super->field_0xf = 0;
+ }
+ }
+}
+
+void ObjectBlockingStairs_Action3(ObjectBlockingStairsEntity* this) {
+ sub_0800445C(super);
+ LinearMoveUpdate(super);
+ if (--super->actionDelay == 0) {
+ sub_08093334(this);
+ }
+ sub_08093364(this);
+}
+
+void ObjectBlockingStairs_Action4(ObjectBlockingStairsEntity* this) {
+}
+
+void sub_080931A4(ObjectBlockingStairsEntity* this, u32 param_2) {
+ static const u16 gUnk_08122850[] = { 0x4027, 0x4023, 0x4028, 0x402c, 0x402b, 0x402d, 0x4029, 0x4026, 0x402a };
+ static const u16 gUnk_08122862[] = { 0x4027, 0x4023, 0x4028, 0x4024, 0x4022, 0x4025, 0x4029, 0x4026, 0x402a };
+ static const u16 gUnk_08122874[] = { 0x4027, 0x4023, 0x4023, 0x4024, 0x4022, 0x4022, 0x4029, 0x4026, 0x4026 };
+ static const u16 gUnk_08122886[] = { 0x4023, 0x4023, 0x4028, 0x4022, 0x4022, 0x4025, 0x4026, 0x4026, 0x402a };
+
+ u32 collisionLayer;
+ const u16* pTileTypes;
+ u32 index;
+ u32 tilePos;
+ int iVar5;
+
+ this->tilePos = COORD_TO_TILE(super);
+ tilePos = this->tilePos - 0x40;
+ collisionLayer = super->collisionLayer;
+
+ switch (param_2) {
+ case 1:
+ pTileTypes = gUnk_08122862;
+ break;
+ case 2:
+ pTileTypes = gUnk_08122874;
+ break;
+ case 3:
+ pTileTypes = gUnk_08122886;
+ break;
+ default:
+ case 0:
+ pTileTypes = gUnk_08122850;
+ break;
+ }
+
+ for (index = 0, iVar5 = 0; index < 9; index++) {
+ u32 pos = tilePos + iVar5 + index - 1;
+ SetTile(pTileTypes[index], pos, collisionLayer);
+ switch (index) {
+ case 2:
+ iVar5 = 0x3d;
+ break;
+ case 5:
+ iVar5 = 0x7a;
+ break;
+ }
+ }
+}
+
+void sub_08093248(ObjectBlockingStairsEntity* this) {
+ u32 collisionLayer;
+ u32 tilePos;
+ u32 index;
+ int iVar4;
+
+ tilePos = this->tilePos - 0x40;
+ collisionLayer = super->collisionLayer;
+ for (index = 0, iVar4 = 0; index < 9; index++) {
+ sub_0807BA8C(tilePos + iVar4 + index - 1, collisionLayer);
+ switch (index) {
+ case 2:
+ iVar4 = 0x3d;
+ break;
+ case 5:
+ iVar4 = 0x7a;
+ break;
+ }
+ }
+}
+
+void sub_08093280(ObjectBlockingStairsEntity* this) {
+ sub_0800445C(super);
+ LinearMoveUpdate(super);
+ if (--super->actionDelay == 0) {
+ sub_08093334(this);
+ }
+ sub_08093364(this);
+}
+
+void sub_080932A8(ObjectBlockingStairsEntity* this) {
+ this->unk7a--;
+ switch (this->unk7a & 3) {
+ case 1:
+ super->spriteOffsetX = 1;
+ break;
+ case 3:
+ super->spriteOffsetX = -1;
+ break;
+ default:
+ super->spriteOffsetX = 0;
+ break;
+ }
+}
+
+typedef struct {
+ u32 flagBank;
+ u16 unk4;
+ u16 unk6;
+} struct_gUnk_08122898;
+
+const struct_gUnk_08122898 gUnk_08122898[] = {
+ { 0x200, 0xa1, 0xa2 },
+ { 0x8c0, 0x6f, 0x70 },
+};
+
+u32 sub_080932D8(u32 param_1) {
+ const struct_gUnk_08122898* ptr = gUnk_08122898 + param_1;
+
+ if (CheckLocalFlagByBank(ptr->flagBank, ptr->unk4)) {
+ return 1;
+ } else {
+ if (CheckLocalFlagByBank(ptr->flagBank, ptr->unk6)) {
+ return 2;
+ } else {
+ return 0;
+ }
+ }
+}
+
+void sub_08093308(u32 param_1, u32 param_2) {
+ const struct_gUnk_08122898* ptr = gUnk_08122898 + param_1;
+ if (param_2 == 1) {
+ SetLocalFlagByBank(ptr->flagBank, ptr->unk4);
+ } else if (param_2 == 2) {
+ SetLocalFlagByBank(ptr->flagBank, ptr->unk6);
+ }
+}
+
+void sub_08093334(ObjectBlockingStairsEntity* this) {
+ u32 uVar1;
+
+ super->action = 4;
+ if (super->direction & 0x10) {
+ uVar1 = 1;
+ } else {
+ uVar1 = 2;
+ }
+ sub_080931A4(this, uVar1 + 1);
+ sub_08093308(super->type, uVar1);
+ EnqueueSFX(SFX_SECRET);
+}
+
+void sub_08093364(ObjectBlockingStairsEntity* this) {
+ s32 sVar1;
+ Entity* dashEffectEnt;
+
+ if ((super->actionDelay & 3) == 0) {
+ dashEffectEnt = CreateObject(SPECIAL_FX, FX_DASH, 0);
+ if (dashEffectEnt != NULL) {
+ dashEffectEnt->parent = super;
+ CopyPosition(super, dashEffectEnt);
+ if (super->direction & 0x10) {
+ dashEffectEnt->x.HALF.HI += 0x12;
+ } else {
+ dashEffectEnt->x.HALF.HI -= 0x12;
+ }
+
+ sVar1 = dashEffectEnt->y.HALF.HI;
+ if (super->actionDelay & 8) {
+ dashEffectEnt->y.HALF.HI = sVar1 + 8;
+ } else {
+ dashEffectEnt->y.HALF.HI = sVar1 - 8;
+ }
+ }
+ }
+}
diff --git a/src/object/picoBloom.c b/src/object/picoBloom.c
new file mode 100644
index 00000000..de912b8a
--- /dev/null
+++ b/src/object/picoBloom.c
@@ -0,0 +1,47 @@
+#define NENT_DEPRECATED
+#include "entity.h"
+#include "asm.h"
+#include "sound.h"
+
+void PicoBloom_Init(Entity*);
+void PicoBloom_Action1(Entity*);
+void PicoBloom_Action2(Entity*);
+
+void PicoBloom(Entity* this) {
+ static void (*const actionFuncs[])(Entity*) = {
+ PicoBloom_Init,
+ PicoBloom_Action1,
+ PicoBloom_Action2,
+ };
+
+ actionFuncs[this->action](this);
+}
+
+void PicoBloom_Init(Entity* this) {
+ static const u8 typeAnimationStates[] = { 3, 0, 3, 3, 3, 3 };
+ u32 nextAction;
+
+ nextAction = this->type2;
+ if (nextAction != 1) {
+ nextAction = 2;
+ }
+ this->action = nextAction;
+ this->actionDelay = (Random() & 0x7f) + 0x7f;
+ this->collisionLayer = 1;
+ UpdateSpriteForCollisionLayer(this);
+ InitializeAnimation(this, typeAnimationStates[this->type] + this->type2);
+}
+
+void PicoBloom_Action1(Entity* this) {
+ if (--this->actionDelay == 0) {
+ this->action++;
+ }
+}
+
+void PicoBloom_Action2(Entity* this) {
+ GetNextFrame(this);
+ if (this->frame & 1) {
+ this->frame &= ~1;
+ EnqueueSFX(SFX_21B);
+ }
+}
diff --git a/src/object/playerClone.c b/src/object/playerClone.c
index 4de97df9..3e7eadab 100644
--- a/src/object/playerClone.c
+++ b/src/object/playerClone.c
@@ -1,5 +1,6 @@
#define NENT_DEPRECATED
#include "entity.h"
+#include "collision.h"
#include "room.h"
#include "asm.h"
#include "sound.h"
@@ -49,7 +50,12 @@ void PlayerClone_Init(PlayerCloneEntity* this) {
SoundReq(SFX_112);
}
-const u16 PlayerCloneCollisions[] = { 0x2206, 0x6044, 0x4460, 0x622 };
+const u16 PlayerCloneCollisions[] = {
+ COL_NORTH_FULL | COL_WEST_SOUTH | COL_EAST_SOUTH,
+ COL_NORTH_EAST | COL_SOUTH_EAST | COL_EAST_FULL,
+ COL_SOUTH_FULL | COL_WEST_NORTH | COL_EAST_NORTH,
+ COL_NORTH_WEST | COL_SOUTH_WEST | COL_WEST_FULL,
+};
void PlayerClone_Action1(PlayerCloneEntity* this) {
static const Hitbox PlayerCloneHitbox = { 0, -3, { 5, 3, 3, 5 }, 6, 6 };
@@ -104,7 +110,8 @@ void PlayerClone_Action2(PlayerCloneEntity* this) {
super->y.HALF.HI = gPlayerEntity.y.HALF.HI + this->unk7a;
sub_08084CAC(this);
sub_080085B0(super);
- if ((super->collisions & 0x6666) != 0x6666) {
+ if ((super->collisions & (COL_NORTH_FULL | COL_SOUTH_FULL | COL_EAST_FULL | COL_WEST_FULL)) !=
+ (COL_NORTH_FULL | COL_SOUTH_FULL | COL_EAST_FULL | COL_WEST_FULL)) {
for (index = 0; index <= 3; index++) {
if (PlayerCloneCollisions[index] == (PlayerCloneCollisions[index] & super->collisions)) {
break;
diff --git a/src/object/pot.c b/src/object/pot.c
index 22ee8ce0..a11c6d4d 100644
--- a/src/object/pot.c
+++ b/src/object/pot.c
@@ -283,7 +283,7 @@ u32 sub_0808288C(Entity* this, u32 form, u32 arg2, u32 arg3) {
break;
default:
entity = CreateObjectWithParent(this, GROUND_ITEM, form, arg2);
- if (entity) {
+ if (entity != NULL) {
if (arg3 == 2) {
entity->actionDelay = 5;
entity->field_0x86.HWORD = this->field_0x86.HWORD;
diff --git a/src/object/smallIceBlock.c b/src/object/smallIceBlock.c
index 1b821625..e9689baf 100644
--- a/src/object/smallIceBlock.c
+++ b/src/object/smallIceBlock.c
@@ -7,6 +7,7 @@
#define NENT_DEPRECATED
#include "global.h"
+#include "collision.h"
#include "object.h"
#include "functions.h"
#include "hitbox.h"
@@ -204,7 +205,7 @@ bool32 sub_0809953C(SmallIceBlockEntity* this) {
uVar3 = sub_0800442E(super);
if (uVar3 != 0) {
- return 0;
+ return FALSE;
}
ProcessMovement2(super);
sub_0800445C(super);
@@ -216,17 +217,17 @@ bool32 sub_0809953C(SmallIceBlockEntity* this) {
}
switch (super->direction >> 3) {
case 0:
- if ((super->collisions & 0xe) == 0) {
- return 0;
+ if ((super->collisions & COL_NORTH_ANY) == COL_NONE) {
+ return FALSE;
}
if ((u32)(super->y.HALF.HI & 0xf) - 7 < 3) {
super->y.HALF.HI = (super->y.HALF.HI & 0xfff0) + 8;
- return 1;
+ return TRUE;
}
sub_0809969C(this);
break;
case 1:
- if ((super->collisions & 0xe000) == 0) {
+ if ((super->collisions & COL_EAST_ANY) == COL_NONE) {
return FALSE;
}
if ((u32)(super->x.HALF.HI & 0xf) - 7 < 3) {
@@ -236,7 +237,7 @@ bool32 sub_0809953C(SmallIceBlockEntity* this) {
sub_0809969C(this);
break;
case 2:
- if ((super->collisions & 0xe0) == 0) {
+ if ((super->collisions & COL_SOUTH_ANY) == COL_NONE) {
return FALSE;
}
if ((u32)(super->y.HALF.HI & 0xf) - 7 < 3) {
@@ -246,7 +247,7 @@ bool32 sub_0809953C(SmallIceBlockEntity* this) {
sub_0809969C(this);
break;
default:
- if ((super->collisions & 0xe00) != 0) {
+ if ((super->collisions & COL_WEST_ANY) != COL_NONE) {
if ((u32)(super->x.HALF.HI & 0xf) - 7 < 3) {
super->x.HALF.HI = (super->x.HALF.HI & 0xfff0) + 8;
return TRUE;
diff --git a/src/object/specialFx.c b/src/object/specialFx.c
index c5262d9c..dc51b4c4 100644
--- a/src/object/specialFx.c
+++ b/src/object/specialFx.c
@@ -144,6 +144,7 @@ void sub_080844E0(SpecialFxObject* this) {
static const u8 gUnk_0811FAC8[] = { 0x03, 0x37, 0x38, 0x39 };
static const u8 gUnk_0811FACC[] = { 0x17, 0x3e, 0x3f, 0x40 };
const struct_0811F960* ptr;
+
super->action = 1;
super->flags &= ~0x80;
super->spriteSettings.draw = 1;
@@ -219,7 +220,7 @@ void sub_08084680(SpecialFxObject* this) {
}
void sub_08084694(SpecialFxObject* this) {
- if (!super->parent || !super->parent->next) {
+ if ((super->parent == NULL) || (super->parent->next == NULL)) {
DeleteThisEntity();
}
GetNextFrame(super);
@@ -253,12 +254,15 @@ void sub_080846B0(SpecialFxObject* this) {
void sub_0808471C(SpecialFxObject* this) {
static const s8 gUnk_0811FB08[] = { -8, -8, 8, -8, -8, 8, 8, 8 };
+
GetNextFrame(super);
if (super->frame & ANIM_DONE) {
u32 i;
+
for (i = 0; i < 4; i++) {
Entity* fx = CreateFx(super, 0x24, 0);
- if (fx) {
+
+ if (fx != NULL) {
const s8* ptr = &gUnk_0811FB08[2 * i];
fx->x.HALF.HI += ptr[0];
fx->y.HALF.HI += ptr[1];
@@ -280,7 +284,7 @@ void sub_08084784(SpecialFxObject* this) {
void sub_08084798(SpecialFxObject* this) {
GetNextFrame(super);
- if ((super->frame & ANIM_DONE) || !super->child->next) {
+ if ((super->frame & ANIM_DONE) || (super->child->next == NULL)) {
DeleteThisEntity();
}
}
diff --git a/src/objectUtils.c b/src/objectUtils.c
index 6fdbe902..c4a93c17 100644
--- a/src/objectUtils.c
+++ b/src/objectUtils.c
@@ -264,7 +264,7 @@ void CreateSparkle(Entity* entity) {
}
}
-NONMATCH("asm/non_matching/objectUtils/sub_080A2BE4.inc", void sub_080A2BE4(Entity* this, u32 param_2)) {
+NONMATCH("asm/non_matching/objectUtils/sub_080A2BE4.inc", void sub_080A2BE4(Entity* this, bool32 param_2)) {
s16 oldValue;
s32 diff;
u16 newValue;
diff --git a/src/player.c b/src/player.c
index d39d30ba..ace9b023 100644
--- a/src/player.c
+++ b/src/player.c
@@ -6,6 +6,7 @@
*/
#include "global.h"
+#include "collision.h"
#include "asm.h"
#include "sound.h"
#include "entity.h"
@@ -3018,7 +3019,7 @@ static void sub_080739EC(Entity* this) {
if ((gPlayerState.jump_status & 0xC0) != 0) {
gPlayerState.field_0xd = this->direction;
if (gPlayerState.jump_status & 0x80)
- this->collisions = 0;
+ this->collisions = COL_NONE;
v = GRAVITY_RATE;
} else {
if ((u16)sub_0806F854(this, 0, -12)) {
@@ -3414,7 +3415,7 @@ void SurfaceAction_7(Entity* this) {
void SurfaceAction_MinishDoorFront(Entity* this) {
if ((this->y.HALF.HI & 0xF) <= 0xD) {
- this->collisions = 0x6600;
+ this->collisions = COL_EAST_FULL | COL_WEST_FULL;
hide(this);
} else {
EnablePlayerDraw(this);
@@ -3423,7 +3424,7 @@ void SurfaceAction_MinishDoorFront(Entity* this) {
void SurfaceAction_MinishDoorBack(Entity* this) {
if ((this->y.HALF.HI & 0xF) > 1) {
- this->collisions = 0x6600;
+ this->collisions = COL_EAST_FULL | COL_WEST_FULL;
hide(this);
} else {
EnablePlayerDraw(this);
@@ -3432,7 +3433,7 @@ void SurfaceAction_MinishDoorBack(Entity* this) {
void SurfaceAction_A(Entity* this) {
if ((this->x.HALF.HI & 0xF) < 12) {
- this->collisions = 0x66;
+ this->collisions = COL_NORTH_FULL | COL_SOUTH_FULL;
hide(this);
} else {
EnablePlayerDraw(this);
@@ -3441,7 +3442,7 @@ void SurfaceAction_A(Entity* this) {
void SurfaceAction_B(Entity* this) {
if ((this->x.HALF.HI & 0xF) > 4) {
- this->collisions = 0x66;
+ this->collisions = COL_NORTH_FULL | COL_SOUTH_FULL;
hide(this);
} else {
EnablePlayerDraw(this);
diff --git a/src/projectile/arrowProjectile.c b/src/projectile/arrowProjectile.c
index 91567d8b..755ee6f8 100644
--- a/src/projectile/arrowProjectile.c
+++ b/src/projectile/arrowProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
#include "object.h"
@@ -66,7 +67,7 @@ void ArrowProjectile_Action1(Entity* this) {
}
void ArrowProjectile_Action2(Entity* this) {
- if (this->collisions != 0) {
+ if (this->collisions != COL_NONE) {
this->action = 3;
COLLISION_OFF(this);
this->actionDelay = 0x20;
diff --git a/src/projectile/boneProjectile.c b/src/projectile/boneProjectile.c
index 3f9858a9..429a94c9 100644
--- a/src/projectile/boneProjectile.c
+++ b/src/projectile/boneProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -25,15 +26,15 @@ void sub_080A81C4(Entity* this) {
void BoneProjectile_Init(Entity* this) {
this->action = 1;
- this->actionDelay = 0x3c;
- this->z.HALF.HI = 0xfffe;
+ this->actionDelay = 60;
+ this->z.HALF.HI = -2;
InitializeAnimation(this, 0);
}
void BoneProjectile_Action1(Entity* this) {
GetNextFrame(this);
ProcessMovement3(this);
- if (this->collisions == 0) {
+ if (this->collisions == COL_NONE) {
if (IsProjectileOffScreen(this)) {
DeleteEntity(this);
} else {
diff --git a/src/projectile/cannonballProjectile.c b/src/projectile/cannonballProjectile.c
index acf5ccd7..18e79a67 100644
--- a/src/projectile/cannonballProjectile.c
+++ b/src/projectile/cannonballProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -49,7 +50,7 @@ void CannonballProjectile_Action1(Entity* this) {
void CannonballProjectile_Action2(Entity* this) {
GetNextFrame(this);
ProcessMovement3(this);
- if ((sub_080AB634(this) == 0) && (this->collisions != 0)) {
+ if ((sub_080AB634(this) == 0) && (this->collisions != COL_NONE)) {
CreateFx(this, FX_DEATH, 0);
DeleteThisEntity();
}
diff --git a/src/projectile/dekuSeedProjectile.c b/src/projectile/dekuSeedProjectile.c
index 94eb1e59..86fce52a 100644
--- a/src/projectile/dekuSeedProjectile.c
+++ b/src/projectile/dekuSeedProjectile.c
@@ -91,7 +91,7 @@ void DekuSeedProjectile_Action2(Entity* this) {
COLLISION_ON(this);
}
} else {
- sub_0800417E(this, (u32)this->collisions);
+ sub_0800417E(this, this->collisions);
sub_08016AD2(this);
InitializeAnimation(this, 0x19);
sub_080A86A0(this);
diff --git a/src/projectile/lakituCloudProjectile.c b/src/projectile/lakituCloudProjectile.c
index f66dd20e..a766f97b 100644
--- a/src/projectile/lakituCloudProjectile.c
+++ b/src/projectile/lakituCloudProjectile.c
@@ -24,7 +24,7 @@ void nullsub_539(Entity* this) {
}
void sub_080A9CF0(Entity* this) {
- if (sub_0806F520() == 0) {
+ if (!sub_0806F520(this)) {
CreateFx(this, FX_DEATH, 0);
DeleteThisEntity();
}
diff --git a/src/projectile/lakituLightning.c b/src/projectile/lakituLightning.c
index 1f366e0f..171be05c 100644
--- a/src/projectile/lakituLightning.c
+++ b/src/projectile/lakituLightning.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -32,7 +33,7 @@ void LakituLightning_Init(Entity* this) {
void LakituLightning_Action1(Entity* this) {
GetNextFrame(this);
ProcessMovement3(this);
- if ((this->collisions != 0) || (--this->actionDelay == 0)) {
+ if ((this->collisions != COL_NONE) || (--this->actionDelay == 0)) {
CreateFx(this, FX_BLUE_EFC, 0);
DeleteThisEntity();
}
diff --git a/src/projectile/moblinSpear.c b/src/projectile/moblinSpear.c
index 9d84ccbf..039eaa1d 100644
--- a/src/projectile/moblinSpear.c
+++ b/src/projectile/moblinSpear.c
@@ -9,16 +9,23 @@ typedef struct {
u8 height;
} HitboxChange;
-extern void (*const MoblinSpear_Functions[])(Entity*);
-extern void (*const MoblinSpear_Actions[])(Entity*);
-
-extern const HitboxChange gUnk_0812966C[];
+void MoblinSpear_OnTick(Entity* this);
+void sub_080A832C(Entity* this);
+void MoblinSpear_Init(Entity* this);
+void MoblinSpear_Action1(Entity* this);
void MoblinSpear(Entity* this) {
+ static void (*const MoblinSpear_Functions[])(Entity*) = {
+ MoblinSpear_OnTick, sub_080A832C, DeleteEntity, DeleteEntity, DeleteEntity,
+ };
MoblinSpear_Functions[GetNextFunction(this)](this);
}
void MoblinSpear_OnTick(Entity* this) {
+ static void (*const MoblinSpear_Actions[])(Entity*) = {
+ MoblinSpear_Init,
+ MoblinSpear_Action1,
+ };
MoblinSpear_Actions[this->action](this);
}
@@ -50,6 +57,16 @@ void MoblinSpear_Init(Entity* this) {
}
void MoblinSpear_Action1(Entity* this) {
+ static const HitboxChange gUnk_0812966C[] = {
+ { 6, 11, 2, 4 }, { -12, 2, 3, 3 }, { -13, -15, 1, 2 }, { 5, 12, 1, 3 }, { 7, 10, 1, 2 },
+ { 8, 9, 1, 3 }, { 7, 10, 1, 2 }, { -22, 1, 4, 2 }, { -12, 1, 3, 2 }, { -6, 2, 4, 2 },
+ { -12, 1, 3, 2 }, { -1, -19, 1, 1 }, { -4, -19, 1, 1 }, { -4, -20, 1, 1 }, { -4, -19, 1, 1 },
+ { 6, 9, 1, 2 }, { 6, 10, 1, 2 }, { 6, 9, 1, 2 }, { 6, 10, 1, 2 }, { -29, -11, 3, 2 },
+ { -29, -9, 3, 2 }, { -29, -11, 3, 2 }, { -29, -9, 3, 2 }, { -5, -25, 1, 2 }, { -5, -24, 1, 2 },
+ { -5, -25, 1, 2 }, { -5, -24, 1, 2 }, { 7, 12, 1, 2 }, { 7, 11, 1, 2 }, { -12, 3, 3, 1 },
+ { -12, 2, 3, 1 }, { -13, -16, 1, 2 }, { -13, -15, 1, 2 },
+ };
+
u8 frames;
Entity* parent;
u32 tmp;
@@ -86,20 +103,3 @@ void MoblinSpear_Action1(Entity* this) {
}
}
}
-
-void (*const MoblinSpear_Functions[])(Entity*) = {
- MoblinSpear_OnTick, sub_080A832C, DeleteEntity, DeleteEntity, DeleteEntity,
-};
-void (*const MoblinSpear_Actions[])(Entity*) = {
- MoblinSpear_Init,
- MoblinSpear_Action1,
-};
-
-const HitboxChange gUnk_0812966C[] = {
- { 6, 11, 2, 4 }, { -12, 2, 3, 3 }, { -13, -15, 1, 2 }, { 5, 12, 1, 3 }, { 7, 10, 1, 2 }, { 8, 9, 1, 3 },
- { 7, 10, 1, 2 }, { -22, 1, 4, 2 }, { -12, 1, 3, 2 }, { -6, 2, 4, 2 }, { -12, 1, 3, 2 }, { -1, -19, 1, 1 },
- { -4, -19, 1, 1 }, { -4, -20, 1, 1 }, { -4, -19, 1, 1 }, { 6, 9, 1, 2 }, { 6, 10, 1, 2 }, { 6, 9, 1, 2 },
- { 6, 10, 1, 2 }, { -29, -11, 3, 2 }, { -29, -9, 3, 2 }, { -29, -11, 3, 2 }, { -29, -9, 3, 2 }, { -5, -25, 1, 2 },
- { -5, -24, 1, 2 }, { -5, -25, 1, 2 }, { -5, -24, 1, 2 }, { 7, 12, 1, 2 }, { 7, 11, 1, 2 }, { -12, 3, 3, 1 },
- { -12, 2, 3, 1 }, { -13, -16, 1, 2 }, { -13, -15, 1, 2 },
-};
diff --git a/src/projectile/octorokBossProjectile.c b/src/projectile/octorokBossProjectile.c
index 659f748c..54ac6c32 100644
--- a/src/projectile/octorokBossProjectile.c
+++ b/src/projectile/octorokBossProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
#include "projectile.h"
@@ -114,10 +115,10 @@ void OctorokBossProjectile_Action1(Entity* this) {
this->field_0x78.HWORD--;
LinearMoveAngle(this, this->speed, this->direction);
CalculateEntityTileCollisions(this, this->direction >> 3, 0);
- if ((this->collisions & 0xee00) != 0) {
+ if ((this->collisions & (COL_WEST_ANY | COL_EAST_ANY)) != COL_NONE) {
this->direction = -this->direction;
}
- if ((this->collisions & 0xee) != 0) {
+ if ((this->collisions & (COL_NORTH_ANY | COL_SOUTH_ANY)) != COL_NONE) {
this->direction = -this->direction ^ 0x80;
}
if (this->direction == this->field_0xf) {
@@ -151,7 +152,7 @@ void OctorokBossProjectile_Action1(Entity* this) {
GetNextFrame(this);
if (GravityUpdate(this, 0x1800) != 0) {
CalculateEntityTileCollisions(this, this->direction >> 3, 0);
- if (this->collisions == 0) {
+ if (this->collisions == COL_NONE) {
LinearMoveAngle(this, (s32)this->speed, (u32)this->direction);
} else {
OctorokBossProjectile_Action2(this);
diff --git a/src/projectile/spiderWeb.c b/src/projectile/spiderWeb.c
index acfaeac7..52df2d19 100644
--- a/src/projectile/spiderWeb.c
+++ b/src/projectile/spiderWeb.c
@@ -9,51 +9,61 @@ typedef struct {
u8 direction;
} PACKED Struct_0812A074;
-extern void (*const SpiderWeb_Functions[])(Entity*);
-extern void (*const SpiderWeb_Actions[])(Entity*);
-extern const u8 gUnk_0812A03C[];
-extern const Hitbox* const gUnk_0812A04C[];
-extern void (*const SpiderWeb_SubActions[])(Entity*);
-extern const s8 gUnk_0812A064[];
-extern const s8 gUnk_0812A06C[];
-extern const Struct_0812A074 gUnk_0812A074[];
-extern const u16 gUnk_0812A084[];
-
+void SpiderWeb_OnTick(Entity*);
void sub_080AA6C0(Entity*);
void sub_080AAAA8(Entity*);
void sub_080AAA68(Entity*);
void sub_080AA9E0(Entity*);
+void sub_080AA78C(Entity*);
+void SpiderWeb_Init(Entity*);
+void SpiderWeb_Action1(Entity*);
+void SpiderWeb_Action2(Entity*);
+void SpiderWeb_Action3(Entity*);
+void SpiderWeb_SubAction0(Entity*);
+void SpiderWeb_SubAction1(Entity*);
void SpiderWeb(Entity* this) {
+ static void (*const SpiderWeb_Functions[])(Entity*) = {
+ SpiderWeb_OnTick, sub_080AA6C0, DeleteEntity, DeleteEntity, DeleteEntity, sub_080AA78C,
+ };
SpiderWeb_Functions[GetNextFunction(this)](this);
}
void SpiderWeb_OnTick(Entity* this) {
+ static void (*const SpiderWeb_Actions[])(Entity*) = {
+ SpiderWeb_Init,
+ SpiderWeb_Action1,
+ SpiderWeb_Action2,
+ SpiderWeb_Action3,
+ };
SpiderWeb_Actions[this->action](this);
}
void sub_080AA6C0(Entity* this) {
+ static const s8 typeSpritOffsets[] = {
+ -8, -4, 6, 1, 4, -11, -3, 3, -7, -3, 6, 4, -4, -11, 3, 3,
+ };
Entity* object;
if (this->bitfield == 0x87) {
this->action = 3;
- this->actionDelay = 0x5a;
+ this->actionDelay = 90;
COLLISION_OFF(this);
InitAnimationForceUpdate(this, this->type + 0x10);
object = CreateObject(OBJECT_2A, 3, 0);
if (object != NULL) {
object->type2 = 0x5a;
object->spritePriority.b0 = 3;
- object->spriteOffsetX = gUnk_0812A03C[this->type * 4];
- object->spriteOffsetY = gUnk_0812A03C[this->type * 4 + 1];
+ object->spriteOffsetX = typeSpritOffsets[this->type * 4];
+ object->spriteOffsetY = typeSpritOffsets[this->type * 4 + 1];
object->parent = this;
}
object = CreateObject(OBJECT_2A, 3, 0);
if (object != NULL) {
object->type2 = 0x5a;
object->spritePriority.b0 = 3;
- object->spriteOffsetX = gUnk_0812A03C[this->type * 4 + 2];
- object->spriteOffsetY = gUnk_0812A03C[this->type * 4 + 3];
+ object->spriteOffsetX = typeSpritOffsets[this->type * 4 + 2];
+ object->spriteOffsetY = typeSpritOffsets[this->type * 4 + 3];
object->parent = this;
}
} else {
@@ -79,10 +89,10 @@ void sub_080AA78C(Entity* this) {
this->subAction = 1;
InitAnimationForceUpdate(this, animationState + 8);
}
- if (sub_0806F520(this) != 0) {
+ if (sub_0806F520(this)) {
UpdateAnimationSingleFrame(this);
if ((this->frame & 0x10) != 0) {
- this->frame &= 0xef;
+ this->frame &= ~0x10;
EnqueueSFX(SFX_100);
}
if ((this->frame & ANIM_DONE) != 0) {
@@ -98,13 +108,19 @@ void sub_080AA78C(Entity* this) {
}
void SpiderWeb_Init(Entity* this) {
+ static const Hitbox* const typeHitboxes[] = {
+ &gUnk_080FD41C,
+ &gUnk_080FD424,
+ &gUnk_080FD42C,
+ &gUnk_080FD434,
+ };
if (CheckFlags(this->field_0x86.HWORD) != 0) {
DeleteThisEntity();
}
this->action = 1;
this->field_0x1c = 1;
this->field_0x16 = 1;
- this->hitbox = (Hitbox*)gUnk_0812A04C[this->type];
+ this->hitbox = (Hitbox*)typeHitboxes[this->type];
this->cutsceneBeh.HALF.LO = 0;
InitAnimationForceUpdate(this, this->type);
sub_080AAA68(this);
@@ -118,11 +134,18 @@ void SpiderWeb_Action1(Entity* this) {
}
void SpiderWeb_Action2(Entity* this) {
+ static void (*const SpiderWeb_SubActions[])(Entity*) = {
+ SpiderWeb_SubAction0,
+ SpiderWeb_SubAction1,
+ };
sub_0806FBB4(this);
SpiderWeb_SubActions[this->subAction - 5](this);
}
void SpiderWeb_SubAction0(Entity* this) {
+ static const s8 gUnk_0812A064[] = { 0, 17, -15, 4, 0, -11, 15, 4 };
+ static const s8 gUnk_0812A06C[] = { 0, 2, -2, 0, 0, -2, 2, 0 };
+
u32 tmp;
u16 x;
u16 y;
@@ -169,6 +192,8 @@ void SpiderWeb_Action3(Entity* this) {
}
void sub_080AA9E0(Entity* this) {
+ static const Struct_0812A074 gUnk_0812A074[] = { { 4, 0 }, { 5, 16 }, { 3, 8 }, { 5, 24 },
+ { 3, 16 }, { 5, 0 }, { 3, 24 }, { 5, 8 } };
s32 diff;
const Struct_0812A074* ptr;
@@ -200,7 +225,8 @@ void sub_080AA9E0(Entity* this) {
}
void sub_080AAA68(Entity* this) {
- SetTile(gUnk_0812A084[this->type], TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
+ static const u16 typeTiles[] = { 16419, 16421, 16422, 16420 };
+ SetTile(typeTiles[this->type], TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
}
void sub_080AAAA8(Entity* this) {
@@ -208,32 +234,3 @@ void sub_080AAAA8(Entity* this) {
RestorePrevTileEntity(TILE(this->x.HALF.HI, this->y.HALF.HI), this->collisionLayer);
DeleteThisEntity();
}
-
-void (*const SpiderWeb_Functions[])(Entity*) = {
- SpiderWeb_OnTick, sub_080AA6C0, DeleteEntity, DeleteEntity, DeleteEntity, sub_080AA78C,
-};
-void (*const SpiderWeb_Actions[])(Entity*) = {
- SpiderWeb_Init,
- SpiderWeb_Action1,
- SpiderWeb_Action2,
- SpiderWeb_Action3,
-};
-const u8 gUnk_0812A03C[] = {
- 248, 252, 6, 1, 4, 245, 253, 3, 249, 253, 6, 4, 252, 245, 3, 3,
-};
-
-const Hitbox* const gUnk_0812A04C[] = {
- &gUnk_080FD41C,
- &gUnk_080FD424,
- &gUnk_080FD42C,
- &gUnk_080FD434,
-};
-void (*const SpiderWeb_SubActions[])(Entity*) = {
- SpiderWeb_SubAction0,
- SpiderWeb_SubAction1,
-};
-const s8 gUnk_0812A064[] = { 0, 17, -15, 4, 0, -11, 15, 4 };
-const s8 gUnk_0812A06C[] = { 0, 2, -2, 0, 0, -2, 2, 0 };
-const Struct_0812A074 gUnk_0812A074[] = { { 4, 0 }, { 5, 16 }, { 3, 8 }, { 5, 24 },
- { 3, 16 }, { 5, 0 }, { 3, 24 }, { 5, 8 } };
-const u16 gUnk_0812A084[] = { 16419, 16421, 16422, 16420 };
diff --git a/src/projectile/stalfosProjectile.c b/src/projectile/stalfosProjectile.c
index 841a68e3..3f8f679d 100644
--- a/src/projectile/stalfosProjectile.c
+++ b/src/projectile/stalfosProjectile.c
@@ -38,7 +38,7 @@ void sub_080A9A34(Entity* this) {
}
void sub_080A9A64(Entity* this) {
- if ((this->subAction < 3) && (sub_0806F520(this) == 0)) {
+ if ((this->subAction < 3) && !sub_0806F520(this)) {
sub_080A9BA8(this);
}
StalfosProjectile_SubActions[this->subAction](this);
diff --git a/src/projectile/torchTrapProjectile.c b/src/projectile/torchTrapProjectile.c
index 5ff167c0..38503e89 100644
--- a/src/projectile/torchTrapProjectile.c
+++ b/src/projectile/torchTrapProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -39,7 +40,7 @@ void TorchTrapProjectile_Action1(Entity* this) {
void TorchTrapProjectile_Action2(Entity* this) {
GetNextFrame(this);
ProcessMovement3(this);
- if (this->collisions != 0) {
+ if (this->collisions != COL_NONE) {
DeleteThisEntity();
}
if (IsProjectileOffScreen(this)) {
diff --git a/src/projectile/v1DarkMagicProjectile.c b/src/projectile/v1DarkMagicProjectile.c
index aeca2aa3..8131c3d7 100644
--- a/src/projectile/v1DarkMagicProjectile.c
+++ b/src/projectile/v1DarkMagicProjectile.c
@@ -87,7 +87,7 @@ void sub_080AACE0(Entity* this) {
}
void sub_080AAD70(Entity* this) {
- if (sub_0806F520() == 0) {
+ if (!sub_0806F520(this)) {
this->health = 0;
}
V1DarkMagicProjectile_SubActions[this->subAction](this);
diff --git a/src/projectile/v2Projectile.c b/src/projectile/v2Projectile.c
index 3733945d..e2c86b53 100644
--- a/src/projectile/v2Projectile.c
+++ b/src/projectile/v2Projectile.c
@@ -62,7 +62,7 @@ void sub_080ABBF4(Entity* this) {
}
void sub_080ABC54(Entity* this) {
- if (sub_0806F520() == 0) {
+ if (!sub_0806F520(this)) {
CreateFx(this, FX_DEATH, 0);
DeleteThisEntity();
}
diff --git a/src/projectile/v3ElectricProjectile.c b/src/projectile/v3ElectricProjectile.c
index c52258cd..77308f1e 100644
--- a/src/projectile/v3ElectricProjectile.c
+++ b/src/projectile/v3ElectricProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "player.h"
#include "coord.h"
@@ -96,7 +97,7 @@ void V3ElectricProjectile_Action2(Entity* this) {
this->z.HALF.HI += 3;
}
ProcessMovement3(this);
- if (this->collisions != 0) {
+ if (this->collisions != COL_NONE) {
DeleteThisEntity();
}
GetNextFrame(this);
diff --git a/src/projectile/v3HandProjectile.c b/src/projectile/v3HandProjectile.c
index 4d4c55bf..ce11e1ef 100644
--- a/src/projectile/v3HandProjectile.c
+++ b/src/projectile/v3HandProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "player.h"
#include "functions.h"
@@ -20,7 +21,7 @@ void V3HandProjectile_OnTick(Entity* this) {
this->z.HALF.HI += 2;
}
ProcessMovement3(this);
- if (this->collisions != 0) {
+ if (this->collisions != COL_NONE) {
DeleteThisEntity();
}
GetNextFrame(this);
diff --git a/src/projectile/v3TennisBallProjectile.c b/src/projectile/v3TennisBallProjectile.c
index 455f67af..c487be01 100644
--- a/src/projectile/v3TennisBallProjectile.c
+++ b/src/projectile/v3TennisBallProjectile.c
@@ -1,4 +1,5 @@
#include "entity.h"
+#include "collision.h"
#include "enemy.h"
#include "functions.h"
@@ -62,7 +63,7 @@ void V3TennisBallProjectile_Action1(Entity* this) {
void V3TennisBallProjectile_Action2(Entity* this) {
ProcessMovement3(this);
- if (this->collisions != 0) {
+ if (this->collisions != COL_NONE) {
DeleteThisEntity();
}
GetNextFrame(this);
@@ -78,28 +79,28 @@ bool32 sub_080ACB40(Entity* this) {
Entity* tmp = ((Entity**)(r1_grandparent->myHeap))[7]->child;
if (tmp != this && child == tmp->child) {
- return 0;
+ return FALSE;
}
tmp = ((Entity**)(r1_grandparent->myHeap))[8]->child;
if (tmp != this && child == tmp->child) {
- return 0;
+ return FALSE;
}
tmp = ((Entity**)(r1_grandparent->myHeap))[9]->child;
if (tmp != this && child == tmp->child) {
- return 0;
+ return FALSE;
}
tmp = ((Entity**)(r1_grandparent->myHeap))[10]->child;
if (tmp != this && child == tmp->child) {
- return 0;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
void sub_080ACB90(Entity* this) {
diff --git a/src/projectile/winder.c b/src/projectile/winder.c
index ae1cb901..d15ce8a0 100644
--- a/src/projectile/winder.c
+++ b/src/projectile/winder.c
@@ -1,118 +1,133 @@
+#define NENT_DEPRECATED
+#include "collision.h"
#include "entity.h"
#include "asm.h"
#include "functions.h"
#include "common.h"
#include "projectile.h"
+#include "projectile/winder.h"
-extern void (*const Winder_Actions[])(Entity*);
extern s16 gUnk_080B4488[];
-static const u8 gUnk_0812A6BC[];
-static const u16 gUnk_0812A6C4[];
-void sub_080AB9DC(Entity*);
-bool32 sub_080AB9FC(Entity* this, u32 param_1);
+typedef enum {
+ /* 0 */ WINDER_TYPE_HEAD,
+ /* 4 */ WINDER_TYPE_TAIL = 4,
+} WinderType;
-void Winder(Entity* this) {
- Winder_Actions[this->action](this);
- sub_080AB9DC(this);
+void Winder_Init(WinderEntity* this);
+void Winder_Move(WinderEntity* this);
+
+void Winder_SetPositions(WinderEntity*);
+bool32 Winder_CheckForRailings(WinderEntity* this, u32 dir);
+
+void Winder(Entity* thisx) {
+ static void (*const Winder_Actions[])(WinderEntity*) = {
+ Winder_Init,
+ Winder_Move,
+ };
+ WinderEntity* this = (WinderEntity*)thisx;
+
+ Winder_Actions[super->action](this);
+ Winder_SetPositions(this);
}
-void Winder_Init(Entity* this) {
- Entity* entity;
- u16* puVar3;
- s32 index;
-
- this->action += 1;
- this->speed = 0x140;
- this->z.WORD = 0;
- if (this->type == 0) {
- this->direction = Random() & 0x18;
- this->parent = this;
+void Winder_Init(WinderEntity* this) {
+ Entity* nextSegment;
+ u16* posPtr;
+ s32 i;
+
+ super->action++;
+ super->speed = 0x140;
+ super->z.WORD = 0;
+ if (super->type == 0) {
+ super->direction = Random() & 0x18;
+ super->parent = super;
}
- InitializeAnimation(this, 0);
- if (this->type < 4) {
- entity = CreateProjectile(WINDER);
- entity->type = this->type + 1;
- entity->parent = this->parent;
- entity->child = this;
- CopyPosition(this, entity);
+ InitializeAnimation(super, 0);
+ if (super->type < WINDER_TYPE_TAIL) {
+ nextSegment = CreateProjectile(WINDER);
+ nextSegment->type = super->type + 1;
+ nextSegment->parent = super->parent;
+ nextSegment->child = super;
+ CopyPosition(super, nextSegment);
}
- puVar3 = &this->field_0x68.HWORD;
- for (index = 7; index >= 0; --index) {
- *puVar3 = this->x.HALF.HI;
- puVar3 += 1;
- *puVar3 = this->y.HALF.HI;
- puVar3 += 1;
+ posPtr = this->positions;
+ for (i = 0; i < WINDER_NUM_SEGMENTS; i++) {
+ *posPtr++ = super->x.HALF.HI;
+ *posPtr++ = super->y.HALF.HI;
}
}
-void sub_080AB950(Entity* this) {
- if (this->type == 0) {
+void Winder_Move(WinderEntity* this) {
+ static const u8 nextDirections[][2] = {
+ { DirectionEast, DirectionWest },
+ { DirectionNorth, DirectionSouth },
+ { DirectionEast, DirectionWest },
+ { DirectionNorth, DirectionSouth },
+ };
+ static const u16 collisionChecks[] = { COL_NORTH_ANY, COL_EAST_ANY, COL_SOUTH_ANY, COL_WEST_ANY };
+
+ if (super->type == WINDER_TYPE_HEAD) {
u8 dir;
- ProcessMovement0(this);
- dir = this->direction >> 3;
- if (((gUnk_0812A6C4)[dir] & this->collisions) || sub_080AB9FC(this, this->direction)) {
- this->direction = gUnk_0812A6BC[(Random() & 0x1) + (dir << 1)];
+
+ ProcessMovement0(super);
+
+ dir = super->direction >> 3;
+ if ((collisionChecks[dir] & super->collisions) || Winder_CheckForRailings(this, super->direction)) {
+ super->direction = nextDirections[dir][Random() & 0x1];
}
} else {
- Entity* child;
+ WinderEntity* child;
- if (this->parent == NULL) {
+ if (super->parent == NULL) {
DeleteThisEntity();
}
- if (this->parent->next == NULL) {
+ if (super->parent->next == NULL) {
DeleteThisEntity();
}
- child = this->child;
- if (child && child->next) {
- this->x.HALF.HI = child->field_0x68.HWORD;
- this->y.HALF.HI = child->field_0x6a.HWORD;
+ child = (WinderEntity*)super->child;
+ if ((child != NULL) && (child->base.next != NULL)) {
+ super->x.HALF.HI = child->positions[0];
+ super->y.HALF.HI = child->positions[1];
} else {
DeleteThisEntity();
}
}
- GetNextFrame(this);
+ GetNextFrame(super);
}
-void sub_080AB9DC(Entity* this) {
- MemCopy(&this->field_0x6c, &this->field_0x68, 0x1c);
- this->cutsceneBeh.HWORD = this->x.HALF.HI;
- this->field_0x86.HWORD = this->y.HALF.HI;
+void Winder_SetPositions(WinderEntity* this) {
+ //! @bug Undefined behaviour for source and destination to overlap in a memcpy. In this case it is okay because the
+ //! copy will always be sequential, incremental and in chunks of <= 4 bytes, so it will copy the contents of
+ //! positions[0] and positions[1] to positions[2] and positions[3], then that of positions[2] and positions[3] to
+ //! positions[4] and positions[5], and so on. A safer way to do this would be a manual loop as in Winder_Move.
+ MemCopy(&this->positions[2], &this->positions[0], sizeof(u16) * (ARRAY_COUNT(this->positions) - 2));
+
+ this->positions[2 * (WINDER_NUM_SEGMENTS - 1)] = super->x.HALF.HI;
+ this->positions[2 * (WINDER_NUM_SEGMENTS - 1) + 1] = super->y.HALF.HI;
}
-bool32 sub_080AB9FC(Entity* this, u32 dir) {
+bool32 Winder_CheckForRailings(WinderEntity* this, u32 dir) {
+ u32 tile;
u32 val;
- LayerStruct* layer = GetLayerByIndex(this->collisionLayer);
- u32 tmp;
- val = (((this->x.HALF.HI - gRoomControls.origin_x) >> 4) & 0x3f) |
- ((((this->y.HALF.HI - gRoomControls.origin_y) >> 4) & 0x3f) << 6);
- val += gUnk_080B4488[dir >> 3];
- tmp = layer->collisionData[val];
- if (tmp <= 0x1f) {
- return 0;
+ LayerStruct* layer = GetLayerByIndex(super->collisionLayer);
+ u32 collisionData;
+
+ tile = TILE(super->x.HALF.HI, super->y.HALF.HI);
+ tile += gUnk_080B4488[dir >> 3];
+ collisionData = layer->collisionData[tile];
+
+ if (collisionData <= 0x1F) {
+ return FALSE;
}
- if (tmp > 0x3f) {
- return 0;
+ if (collisionData > 0x3F) {
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-
-void (*const Winder_Actions[])(Entity*) = {
- Winder_Init,
- sub_080AB950,
-};
-const u8 gUnk_0812A6BC[] = {
- 8, 24, 0, 16, 8, 24, 0, 16,
-};
-const u16 gUnk_0812A6C4[] = {
- 0xe,
- 0xe000,
- 0xe0,
- 0xe00,
-};
diff --git a/src/room.c b/src/room.c
index b12dbea4..babc3f02 100644
--- a/src/room.c
+++ b/src/room.c
@@ -68,7 +68,7 @@ NONMATCH("asm/non_matching/LoadRoomEntity.inc", Entity* LoadRoomEntity(EntityDat
if (kind == 9)
return v5;
sub_0804AF0C(v5, dat);
- if (!v5->next)
+ if (v5->next == NULL)
return v5;
if ((dat->kind & 0x10) == 0) {
if ((dat->kind & 0x20) != 0) {
diff --git a/src/roomInit.c b/src/roomInit.c
index d0136ac0..709cbcff 100644
--- a/src/roomInit.c
+++ b/src/roomInit.c
@@ -177,69 +177,69 @@ void sub_unk1_CrenelMinishPaths_MelarisMine(void) {
sub_080580B0(34);
}
-u32 sub_unk3_MinishPaths1_ToMinishVillage(void) {
+u32 sub_unk3_MinishPaths_ToMinishVillage(void) {
return 1;
}
-void sub_StateChange_MinishPaths1_ToMinishVillage(void) {
+void sub_StateChange_MinishPaths_ToMinishVillage(void) {
sub_080575C8(30);
}
-void sub_unk1_MinishPaths1_ToMinishVillage(void) {
+void sub_unk1_MinishPaths_ToMinishVillage(void) {
sub_080575C8(30);
}
-u32 sub_unk3_MinishPaths1_CastorWilds(void) {
+u32 sub_unk3_MinishPaths_CastorWilds(void) {
return 1;
}
-void sub_StateChange_MinishPaths1_CastorWilds(void) {
+void sub_StateChange_MinishPaths_CastorWilds(void) {
sub_080575C8(33);
}
-void sub_unk1_MinishPaths1_CastorWilds(void) {
+void sub_unk1_MinishPaths_CastorWilds(void) {
sub_080575C8(33);
}
-u32 sub_unk3_MinishPaths1_HyruleTown(void) {
+u32 sub_unk3_MinishPaths_HyruleTown(void) {
return 1;
}
-void sub_StateChange_MinishPaths1_HyruleTown(void) {
+void sub_StateChange_MinishPaths_HyruleTown(void) {
sub_080575C8(31);
}
-void sub_unk1_MinishPaths1_HyruleTown(void) {
+void sub_unk1_MinishPaths_HyruleTown(void) {
sub_080575C8(31);
}
-u32 sub_unk3_MinishPaths1_LonLonRanch(void) {
+u32 sub_unk3_MinishPaths_LonLonRanch(void) {
return 1;
}
-void sub_StateChange_MinishPaths1_LonLonRanch(void) {
+void sub_StateChange_MinishPaths_LonLonRanch(void) {
sub_080575C8(32);
}
-void sub_unk1_MinishPaths1_LonLonRanch(void) {
+void sub_unk1_MinishPaths_LonLonRanch(void) {
sub_080575C8(32);
}
-u32 sub_unk3_MinishPaths1_MayorsCabin(void) {
+u32 sub_unk3_MinishPaths_MayorsCabin(void) {
return 1;
}
-extern EntityData Entities_MinishPaths1_MayorsCabin_gUnk_080D6138;
+extern EntityData Entities_MinishPaths_MayorsCabin_gUnk_080D6138;
-void sub_StateChange_MinishPaths1_MayorsCabin(void) {
+void sub_StateChange_MinishPaths_MayorsCabin(void) {
sub_080575C8(0x20);
if (gPlayerEntity.y.HALF.HI - gRoomControls.origin_y > 0x40)
- LoadRoomEntityList(&Entities_MinishPaths1_MayorsCabin_gUnk_080D6138);
+ LoadRoomEntityList(&Entities_MinishPaths_MayorsCabin_gUnk_080D6138);
}
-void sub_unk1_MinishPaths1_MayorsCabin(void) {
+void sub_unk1_MinishPaths_MayorsCabin(void) {
sub_080575C8(32);
}
@@ -921,11 +921,11 @@ u32 sub_unk3_Dojos_ToScarblade(void) {
void sub_StateChange_Dojos_ToScarblade(void) {
}
-u32 sub_unk3_GoronCave_StairsToCave(void) {
+u32 sub_unk3_GoronCave_Stairs(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave(void) {
+void sub_StateChange_GoronCave_Stairs(void) {
}
u32 sub_unk3_GoronCave_Main(void) {
@@ -1515,11 +1515,11 @@ void sub_StateChange_MinishHouseInteriors_HyruleFieldSouthwest(void) {
sub_0801AFE4();
}
-u32 sub_unk3_MinishHouseInteriors_HyruleFieldOutsideLinksHouse(void) {
+u32 sub_unk3_MinishHouseInteriors_SouthHyruleField(void) {
return 1;
}
-void sub_StateChange_MinishHouseInteriors_HyruleFieldOutsideLinksHouse(void) {
+void sub_StateChange_MinishHouseInteriors_SouthHyruleField(void) {
sub_0801AFE4();
}
@@ -1891,13 +1891,13 @@ u32 sub_unk3_MinishCracks_5(void) {
void sub_StateChange_MinishCracks_5(void) {
}
-u32 sub_unk3_MinishCracks_CastleWildsBowHole(void) {
+u32 sub_unk3_MinishCracks_CastorWildsBow(void) {
return 1;
}
extern EntityData gUnk_080DCB10;
-void sub_StateChange_MinishCracks_CastleWildsBowHole(void) {
+void sub_StateChange_MinishCracks_CastorWildsBow(void) {
if (!GetInventoryValue(ITEM_BOW)) {
LoadRoomEntityList(&gUnk_080DCB10);
}
@@ -3174,18 +3174,18 @@ void sub_StateChange_RoyalCrypt_Entrance(void) {
}
}
-u32 sub_unk3_PalaceOfWinds_0(void) {
+u32 sub_unk3_PalaceOfWinds_GyorgTornado(void) {
return 1;
}
-extern EntityData gUnk_additional_9_PalaceOfWinds_0;
+extern EntityData gUnk_additional_9_PalaceOfWinds_GyorgTornado;
extern EntityData gUnk_080E72C4;
-extern EntityData gUnk_additional_8_PalaceOfWinds_0;
+extern EntityData gUnk_additional_8_PalaceOfWinds_GyorgTornado;
-void sub_StateChange_PalaceOfWinds_0(void) {
+void sub_StateChange_PalaceOfWinds_GyorgTornado(void) {
Manager19_Main(NULL);
if (CheckGlobalFlag(LV5_CLEAR)) {
- LoadRoomEntityList(&gUnk_additional_9_PalaceOfWinds_0);
+ LoadRoomEntityList(&gUnk_additional_9_PalaceOfWinds_GyorgTornado);
}
if (!CheckLocalFlag(0x7b)) {
LoadRoomEntityList(&gUnk_080E72C4);
@@ -3193,402 +3193,402 @@ void sub_StateChange_PalaceOfWinds_0(void) {
SetGlobalFlag(LV5_CLEAR);
if (!GetInventoryValue(ITEM_WIND_ELEMENT)) {
SetPlayerControl(3);
- LoadRoomEntityList(&gUnk_additional_8_PalaceOfWinds_0);
+ LoadRoomEntityList(&gUnk_additional_8_PalaceOfWinds_GyorgTornado);
gArea.bgm = gArea.queued_bgm;
SoundReq(SONG_STOP_BGM);
}
}
}
-u32 sub_unk3_PalaceOfWinds_1(void) {
+u32 sub_unk3_PalaceOfWinds_BossKey(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_1(void) {
+void sub_StateChange_PalaceOfWinds_BossKey(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_2(void) {
+u32 sub_unk3_PalaceOfWinds_BeforeBallAndChainSoldiers(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_2(void) {
+void sub_StateChange_PalaceOfWinds_BeforeBallAndChainSoldiers(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_3(void) {
+u32 sub_unk3_PalaceOfWinds_GyorgBossDoor(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_3(void) {
+void sub_StateChange_PalaceOfWinds_GyorgBossDoor(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_4(void) {
+u32 sub_unk3_PalaceOfWinds_EastChestFromGyorgBossDoor(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_4(void) {
+void sub_StateChange_PalaceOfWinds_EastChestFromGyorgBossDoor(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_5(void) {
+u32 sub_unk3_PalaceOfWinds_MoblinAndWizzrobeFight(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_5(void) {
+void sub_StateChange_PalaceOfWinds_MoblinAndWizzrobeFight(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_6(void) {
+u32 sub_unk3_PalaceOfWinds_FourButtonStalfos(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_6(void) {
+void sub_StateChange_PalaceOfWinds_FourButtonStalfos(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_7(void) {
+u32 sub_unk3_PalaceOfWinds_FanAndKeyToBossKey(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_7(void) {
+void sub_StateChange_PalaceOfWinds_FanAndKeyToBossKey(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_8(void) {
+u32 sub_unk3_PalaceOfWinds_BallAndChainSoldiers(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_8(void) {
+void sub_StateChange_PalaceOfWinds_BallAndChainSoldiers(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_9(void) {
+u32 sub_unk3_PalaceOfWinds_BombarossaPath(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_9(void) {
+void sub_StateChange_PalaceOfWinds_BombarossaPath(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_10(void) {
+u32 sub_unk3_PalaceOfWinds_HoleToDarknut(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_10(void) {
+void sub_StateChange_PalaceOfWinds_HoleToDarknut(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_11(void) {
+u32 sub_unk3_PalaceOfWinds_ToBombarossaPath(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_11(void) {
+void sub_StateChange_PalaceOfWinds_ToBombarossaPath(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_12(void) {
+u32 sub_unk3_PalaceOfWinds_DarknutMiniboss(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_12(void) {
+void sub_StateChange_PalaceOfWinds_DarknutMiniboss(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_13(void) {
+u32 sub_unk3_PalaceOfWinds_BombWallInside(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_13(void) {
+void sub_StateChange_PalaceOfWinds_BombWallInside(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_14(void) {
+u32 sub_unk3_PalaceOfWinds_BombWallOutside(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_14(void) {
+void sub_StateChange_PalaceOfWinds_BombWallOutside(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_15(void) {
+u32 sub_unk3_PalaceOfWinds_CloudJumps(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_15(void) {
+void sub_StateChange_PalaceOfWinds_CloudJumps(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_16(void) {
+u32 sub_unk3_PalaceOfWinds_BlockMazeToBossDoor(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_16(void) {
+void sub_StateChange_PalaceOfWinds_BlockMazeToBossDoor(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_17(void) {
+u32 sub_unk3_PalaceOfWinds_CrackedFloorLakitu(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_17(void) {
+void sub_StateChange_PalaceOfWinds_CrackedFloorLakitu(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_18(void) {
+u32 sub_unk3_PalaceOfWinds_HeartPieceBridge(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_18(void) {
+void sub_StateChange_PalaceOfWinds_HeartPieceBridge(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_19(void) {
+u32 sub_unk3_PalaceOfWinds_FanBridge(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_19(void) {
+void sub_StateChange_PalaceOfWinds_FanBridge(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_20(void) {
+u32 sub_unk3_PalaceOfWinds_ToFanBridge(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_20(void) {
+void sub_StateChange_PalaceOfWinds_ToFanBridge(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_21(void) {
+u32 sub_unk3_PalaceOfWinds_RedWarpHall(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_21(void) {
+void sub_StateChange_PalaceOfWinds_RedWarpHall(void) {
}
-u32 sub_unk3_PalaceOfWinds_22(void) {
+u32 sub_unk3_PalaceOfWinds_PlatformCloneRide(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_22(void) {
+void sub_StateChange_PalaceOfWinds_PlatformCloneRide(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_23(void) {
+u32 sub_unk3_PalaceOfWinds_PitCornerAfterKey(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_23(void) {
+void sub_StateChange_PalaceOfWinds_PitCornerAfterKey(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_24(void) {
+u32 sub_unk3_PalaceOfWinds_CrowRide(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_24(void) {
+void sub_StateChange_PalaceOfWinds_CrowRide(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_25(void) {
+u32 sub_unk3_PalaceOfWinds_GratePlatformRide(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_25(void) {
+void sub_StateChange_PalaceOfWinds_GratePlatformRide(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_26(void) {
+u32 sub_unk3_PalaceOfWinds_PotPush(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_26(void) {
+void sub_StateChange_PalaceOfWinds_PotPush(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_27(void) {
+u32 sub_unk3_PalaceOfWinds_FloormasterLever(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_27(void) {
+void sub_StateChange_PalaceOfWinds_FloormasterLever(void) {
}
-u32 sub_unk3_PalaceOfWinds_28(void) {
+u32 sub_unk3_PalaceOfWinds_Map(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_28(void) {
+void sub_StateChange_PalaceOfWinds_Map(void) {
}
-u32 sub_unk3_PalaceOfWinds_29(void) {
+u32 sub_unk3_PalaceOfWinds_CornerToMap(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_29(void) {
+void sub_StateChange_PalaceOfWinds_CornerToMap(void) {
}
-u32 sub_unk3_PalaceOfWinds_30(void) {
+u32 sub_unk3_PalaceOfWinds_StairsAfterFloormaster(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_30(void) {
+void sub_StateChange_PalaceOfWinds_StairsAfterFloormaster(void) {
}
-u32 sub_unk3_PalaceOfWinds_31(void) {
+u32 sub_unk3_PalaceOfWinds_HoleToKinstoneWizzrobe(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_31(void) {
+void sub_StateChange_PalaceOfWinds_HoleToKinstoneWizzrobe(void) {
}
-u32 sub_unk3_PalaceOfWinds_32(void) {
+u32 sub_unk3_PalaceOfWinds_KeyArrowButton(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_32(void) {
+void sub_StateChange_PalaceOfWinds_KeyArrowButton(void) {
}
-u32 sub_unk3_PalaceOfWinds_33(void) {
+u32 sub_unk3_PalaceOfWinds_GratesTo3F(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_33(void) {
+void sub_StateChange_PalaceOfWinds_GratesTo3F(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_34(void) {
+u32 sub_unk3_PalaceOfWinds_SpinyFight(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_34(void) {
+void sub_StateChange_PalaceOfWinds_SpinyFight(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_35(void) {
+u32 sub_unk3_PalaceOfWinds_PeahatSwitch(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_35(void) {
+void sub_StateChange_PalaceOfWinds_PeahatSwitch(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_36(void) {
+u32 sub_unk3_PalaceOfWinds_WhirlwindBombarossa(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_36(void) {
+void sub_StateChange_PalaceOfWinds_WhirlwindBombarossa(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_37(void) {
+u32 sub_unk3_PalaceOfWinds_DoorToStalfosFirebar(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_37(void) {
+void sub_StateChange_PalaceOfWinds_DoorToStalfosFirebar(void) {
}
-u32 sub_unk3_PalaceOfWinds_38(void) {
+u32 sub_unk3_PalaceOfWinds_StalfosFireborHole(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_38(void) {
+void sub_StateChange_PalaceOfWinds_StalfosFireborHole(void) {
}
-u32 sub_unk3_PalaceOfWinds_39(void) {
+u32 sub_unk3_PalaceOfWinds_ShortcutDoorButtons(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_39(void) {
+void sub_StateChange_PalaceOfWinds_ShortcutDoorButtons(void) {
}
-u32 sub_unk3_PalaceOfWinds_40(void) {
+u32 sub_unk3_PalaceOfWinds_ToPeahatSwitch(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_40(void) {
+void sub_StateChange_PalaceOfWinds_ToPeahatSwitch(void) {
}
-u32 sub_unk3_PalaceOfWinds_41(void) {
+u32 sub_unk3_PalaceOfWinds_KinstoneWizzrobeFight(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_41(void) {
+void sub_StateChange_PalaceOfWinds_KinstoneWizzrobeFight(void) {
}
-u32 sub_unk3_PalaceOfWinds_42(void) {
+u32 sub_unk3_PalaceOfWinds_GibdoStairs(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_42(void) {
+void sub_StateChange_PalaceOfWinds_GibdoStairs(void) {
}
-u32 sub_unk3_PalaceOfWinds_43(void) {
+u32 sub_unk3_PalaceOfWinds_SpikeBarSmallKey(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_43(void) {
+void sub_StateChange_PalaceOfWinds_SpikeBarSmallKey(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_44(void) {
+u32 sub_unk3_PalaceOfWinds_RocCape(void) {
return 1;
}
extern EntityData gUnk_080EA09C;
-void sub_StateChange_PalaceOfWinds_44(void) {
+void sub_StateChange_PalaceOfWinds_RocCape(void) {
Manager19_Main(NULL);
if (!CheckLocalFlag(0x70)) {
LoadRoomEntityList(&gUnk_080EA09C);
}
}
-u32 sub_unk3_PalaceOfWinds_45(void) {
+u32 sub_unk3_PalaceOfWinds_FireBarGrates(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_45(void) {
+void sub_StateChange_PalaceOfWinds_FireBarGrates(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_46(void) {
+u32 sub_unk3_PalaceOfWinds_PlatformRideBombarossas(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_46(void) {
+void sub_StateChange_PalaceOfWinds_PlatformRideBombarossas(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_47(void) {
+u32 sub_unk3_PalaceOfWinds_BridgeAfterDarknut(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_47(void) {
+void sub_StateChange_PalaceOfWinds_BridgeAfterDarknut(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_48(void) {
+u32 sub_unk3_PalaceOfWinds_BridgeSwitchesCloneBlock(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_48(void) {
+void sub_StateChange_PalaceOfWinds_BridgeSwitchesCloneBlock(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_49(void) {
+u32 sub_unk3_PalaceOfWinds_EntranceRoom(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_49(void) {
+void sub_StateChange_PalaceOfWinds_EntranceRoom(void) {
Manager19_Main(NULL);
}
-u32 sub_unk3_PalaceOfWinds_50(void) {
+u32 sub_unk3_PalaceOfWinds_DarkCompassHall(void) {
return 1;
}
-void sub_StateChange_PalaceOfWinds_50(void) {
+void sub_StateChange_PalaceOfWinds_DarkCompassHall(void) {
}
u32 sub_unk3_PalaceOfWindsBoss_Main(void) {
@@ -3779,7 +3779,7 @@ void sub_StateChange_Dojos_ToGrimblade6(void) {
extern u32 gUnk_080EB604;
extern u32 gUnk_080EB5D4;
-u32 sub_unk3_DarkHyruleCastle_0(void) {
+u32 sub_unk3_DarkHyruleCastle_1FEntrance(void) {
if (CheckGlobalFlag(ENDING)) {
gRoomVars.field_0x6c[0] = &gUnk_080EB604;
gRoomVars.field_0x6c[2] = 0;
@@ -3796,7 +3796,7 @@ u32 sub_unk3_DarkHyruleCastle_0(void) {
return 1;
}
-void sub_StateChange_DarkHyruleCastle_0(void) {
+void sub_StateChange_DarkHyruleCastle_1FEntrance(void) {
if (CheckGlobalFlag(ENDING)) {
gArea.queued_bgm = gArea.bgm;
}
@@ -3816,42 +3816,42 @@ static void sub_0804D9B0(void) {
gArea.queued_bgm = gArea.bgm;
}
-u32 sub_unk3_DarkHyruleCastle_1(void) {
+u32 sub_unk3_DarkHyruleCastle_3FTopLeftTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToGrimblade7(void) {
}
-u32 sub_unk3_DarkHyruleCastle_2(void) {
+u32 sub_unk3_DarkHyruleCastle_3FTopRightTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToGrimblade8(void) {
}
-u32 sub_unk3_DarkHyruleCastle_3(void) {
+u32 sub_unk3_DarkHyruleCastle_3FBottomLeftTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToGrimblade9(void) {
}
-u32 sub_unk3_DarkHyruleCastle_4(void) {
+u32 sub_unk3_DarkHyruleCastle_3FBottomRightTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade0(void) {
}
-u32 sub_unk3_DarkHyruleCastle_5(void) {
+u32 sub_unk3_DarkHyruleCastle_3FKeatonHallToVaati(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade1(void) {
}
-u32 sub_unk3_DarkHyruleCastle_6(void) {
+u32 sub_unk3_DarkHyruleCastle_3FTripleDarknut(void) {
if (!CheckLocalFlag(0x77)) {
gRoomVars.field_0x6c[0] = 0;
gRoomVars.field_0x6c[2] = 0;
@@ -3863,7 +3863,7 @@ extern EntityData gUnk_080EB9F4;
extern EntityData gUnk_080EBAA4;
extern EntityData gUnk_080EBAF4;
-void sub_StateChange_DarkHyruleCastle_6(void) {
+void sub_StateChange_DarkHyruleCastle_3FTripleDarknut(void) {
if (!CheckLocalFlag(0x77)) {
LoadRoomEntityList(&gUnk_080EB9F4);
} else {
@@ -3878,173 +3878,173 @@ void sub_StateChange_DarkHyruleCastle_6(void) {
}
}
-u32 sub_unk3_DarkHyruleCastle_7(void) {
+u32 sub_unk3_DarkHyruleCastle_2FTopLeftTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade2(void) {
}
-u32 sub_unk3_DarkHyruleCastle_8(void) {
+u32 sub_unk3_DarkHyruleCastle_2FTopLeftCorner(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade3(void) {
}
-u32 sub_unk3_DarkHyruleCastle_9(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBossKey(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade4(void) {
}
-u32 sub_unk3_DarkHyruleCastle_10(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBlueWarp(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade5(void) {
}
-u32 sub_unk3_DarkHyruleCastle_11(void) {
+u32 sub_unk3_DarkHyruleCastle_2FTopRightCornerGhini(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade6(void) {
}
-u32 sub_unk3_DarkHyruleCastle_12(void) {
+u32 sub_unk3_DarkHyruleCastle_2FTopRightCornerTorches(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade7(void) {
}
-u32 sub_unk3_DarkHyruleCastle_13(void) {
+u32 sub_unk3_DarkHyruleCastle_2FTopRightTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade8(void) {
}
-u32 sub_unk3_DarkHyruleCastle_14(void) {
+u32 sub_unk3_DarkHyruleCastle_2FTopLeftDarknut(void) {
return 1;
}
extern EntityData gUnk_080EC2CC;
-void sub_StateChange_DarkHyruleCastle_14(void) {
+void sub_StateChange_DarkHyruleCastle_2FTopLeftDarknut(void) {
if (CheckLocalFlag(0x86) && !CheckLocalFlag(0x4c)) {
LoadRoomEntityList(&gUnk_080EC2CC);
}
}
-u32 sub_unk3_DarkHyruleCastle_15(void) {
+u32 sub_unk3_DarkHyruleCastle_2FSparks(void) {
return 1;
}
void sub_StateChange_Dojos_ToSplitblade9(void) {
}
-u32 sub_unk3_DarkHyruleCastle_16(void) {
+u32 sub_unk3_DarkHyruleCastle_2FTopRightDarknuts(void) {
return 1;
}
extern EntityData gUnk_080EC4E8;
-void sub_StateChange_DarkHyruleCastle_16(void) {
+void sub_StateChange_DarkHyruleCastle_2FTopRightDarknuts(void) {
if (CheckLocalFlag(0x86) && !CheckLocalFlag(0x4d)) {
LoadRoomEntityList(&gUnk_080EC4E8);
}
}
-u32 sub_unk3_DarkHyruleCastle_17(void) {
+u32 sub_unk3_DarkHyruleCastle_2FLeft(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade0(void) {
}
-u32 sub_unk3_DarkHyruleCastle_18(void) {
+u32 sub_unk3_DarkHyruleCastle_2FRight(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade1(void) {
}
-u32 sub_unk3_DarkHyruleCastle_19(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBottomLeftDarknuts(void) {
return 1;
}
extern EntityData gUnk_080EC820;
-void sub_StateChange_DarkHyruleCastle_19(void) {
+void sub_StateChange_DarkHyruleCastle_2FBottomLeftDarknuts(void) {
if (CheckLocalFlag(0x86) && !CheckLocalFlag(0x53)) {
LoadRoomEntityList(&gUnk_080EC820);
}
}
-u32 sub_unk3_DarkHyruleCastle_20(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBossDoor(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade2(void) {
}
-u32 sub_unk3_DarkHyruleCastle_21(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBottomRightDarknut(void) {
return 1;
}
extern EntityData gUnk_080ECA60;
-void sub_StateChange_DarkHyruleCastle_21(void) {
+void sub_StateChange_DarkHyruleCastle_2FBottomRightDarknut(void) {
if (CheckLocalFlag(0x86) && !CheckLocalFlag(0x56)) {
LoadRoomEntityList(&gUnk_080ECA60);
}
}
-u32 sub_unk3_DarkHyruleCastle_22(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBottomLeftCornerPuzzle(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade3(void) {
}
-u32 sub_unk3_DarkHyruleCastle_23(void) {
+u32 sub_unk3_DarkHyruleCastle_2FEntrance(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade4(void) {
}
-u32 sub_unk3_DarkHyruleCastle_24(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBottomLeftCorner(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade5(void) {
}
-u32 sub_unk3_DarkHyruleCastle_25(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBottomLeftTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade6(void) {
}
-u32 sub_unk3_DarkHyruleCastle_26(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBottomLeftGhini(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade7(void) {
}
-u32 sub_unk3_DarkHyruleCastle_27(void) {
+u32 sub_unk3_DarkHyruleCastle_3FTopRightTower7(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade8(void) {
}
-u32 sub_unk3_DarkHyruleCastle_28(void) {
+u32 sub_unk3_DarkHyruleCastle_B1Entrance(void) {
if (CheckLocalFlag(0x79)) {
gRoomVars.field_0x6c[2] = 0;
}
@@ -4053,7 +4053,7 @@ u32 sub_unk3_DarkHyruleCastle_28(void) {
extern EntityData gUnk_080ECFCC;
-void sub_StateChange_DarkHyruleCastle_28(void) {
+void sub_StateChange_DarkHyruleCastle_B1Entrance(void) {
if (CheckLocalFlag(0x79)) {
sub_0807BB98(0x90, 1, 1, 5);
LoadRoomEntityList(&gUnk_080ECFCC);
@@ -4061,14 +4061,14 @@ void sub_StateChange_DarkHyruleCastle_28(void) {
}
}
-u32 sub_unk3_DarkHyruleCastle_29(void) {
+u32 sub_unk3_DarkHyruleCastle_2FBottomRightTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToGreatblade9(void) {
}
-u32 sub_unk3_DarkHyruleCastle_30(void) {
+u32 sub_unk3_DarkHyruleCastle_1FTopLeftTower(void) {
return 1;
}
@@ -4077,7 +4077,7 @@ void sub_StateChange_Dojos_ToScarblade0(void) {
extern u32 gUnk_080ED1E4;
-u32 sub_unk3_DarkHyruleCastle_31(void) {
+u32 sub_unk3_DarkHyruleCastle_1FThroneRoom(void) {
if (CheckGlobalFlag(ENDING)) {
gRoomVars.field_0x6c[0] = &gUnk_080ED1E4;
gRoomVars.field_0x6c[2] = 0;
@@ -4085,160 +4085,160 @@ u32 sub_unk3_DarkHyruleCastle_31(void) {
return 1;
}
-void sub_StateChange_DarkHyruleCastle_31(void) {
+void sub_StateChange_DarkHyruleCastle_1FThroneRoom(void) {
if (CheckGlobalFlag(ENDING)) {
gArea.queued_bgm = gArea.bgm;
}
}
-u32 sub_unk3_DarkHyruleCastle_32(void) {
+u32 sub_unk3_DarkHyruleCastle_1FCompass(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade1(void) {
}
-u32 sub_unk3_DarkHyruleCastle_33(void) {
+u32 sub_unk3_DarkHyruleCastle_1FTopRightTower(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade2(void) {
}
-u32 sub_unk3_DarkHyruleCastle_34(void) {
+u32 sub_unk3_DarkHyruleCastle_1FBeforeThrone(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade3(void) {
}
-u32 sub_unk3_DarkHyruleCastle_35(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopTopLeft(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade4(void) {
}
-u32 sub_unk3_DarkHyruleCastle_36(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopTop(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade5(void) {
}
-u32 sub_unk3_DarkHyruleCastle_37(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopTopRight(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade6(void) {
}
-u32 sub_unk3_DarkHyruleCastle_38(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopLeft(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade7(void) {
}
-u32 sub_unk3_DarkHyruleCastle_39(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopRight(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade8(void) {
}
-u32 sub_unk3_DarkHyruleCastle_40(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopBottomLeft(void) {
return 1;
}
void sub_StateChange_Dojos_ToScarblade9(void) {
}
-u32 sub_unk3_DarkHyruleCastle_41(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopBottom(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave0(void) {
+void sub_StateChange_GoronCave_Stairs0(void) {
}
-u32 sub_unk3_DarkHyruleCastle_42(void) {
+u32 sub_unk3_DarkHyruleCastle_1FLoopBottomRight(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave1(void) {
+void sub_StateChange_GoronCave_Stairs1(void) {
}
-u32 sub_unk3_DarkHyruleCastle_43(void) {
+u32 sub_unk3_DarkHyruleCastle_1FBottomLeftTower(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave2(void) {
+void sub_StateChange_GoronCave_Stairs2(void) {
}
-u32 sub_unk3_DarkHyruleCastle_44(void) {
+u32 sub_unk3_DarkHyruleCastle_1FBottomRightTower(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave3(void) {
+void sub_StateChange_GoronCave_Stairs3(void) {
}
-u32 sub_unk3_DarkHyruleCastle_45(void) {
+u32 sub_unk3_DarkHyruleCastle_B1BelowThrone(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave4(void) {
+void sub_StateChange_GoronCave_Stairs4(void) {
}
-u32 sub_unk3_DarkHyruleCastle_46(void) {
+u32 sub_unk3_DarkHyruleCastle_B1BelowCompass(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave5(void) {
+void sub_StateChange_GoronCave_Stairs5(void) {
}
-u32 sub_unk3_DarkHyruleCastle_47(void) {
+u32 sub_unk3_DarkHyruleCastle_B1BeforeThrone(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave6(void) {
+void sub_StateChange_GoronCave_Stairs6(void) {
}
-u32 sub_unk3_DarkHyruleCastle_48(void) {
+u32 sub_unk3_DarkHyruleCastle_B1ToPrison(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave7(void) {
+void sub_StateChange_GoronCave_Stairs7(void) {
}
-u32 sub_unk3_DarkHyruleCastle_49(void) {
+u32 sub_unk3_DarkHyruleCastle_B1BombWall(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave8(void) {
+void sub_StateChange_GoronCave_Stairs8(void) {
}
-u32 sub_unk3_DarkHyruleCastle_50(void) {
+u32 sub_unk3_DarkHyruleCastle_B1Keatons(void) {
return 1;
}
-void sub_StateChange_GoronCave_StairsToCave9(void) {
+void sub_StateChange_GoronCave_Stairs9(void) {
}
-u32 sub_unk3_DarkHyruleCastle_51(void) {
+u32 sub_unk3_DarkHyruleCastle_B1ToPrisonFirebar(void) {
return 1;
}
void sub_StateChange_Ruins_Beanstalk0(void) {
}
-u32 sub_unk3_DarkHyruleCastle_52(void) {
+u32 sub_unk3_DarkHyruleCastle_B1Cannons(void) {
return 1;
}
void sub_StateChange_Ruins_Beanstalk1(void) {
}
-u32 sub_unk3_DarkHyruleCastle_53(void) {
+u32 sub_unk3_DarkHyruleCastle_B1Left(void) {
if (CheckLocalFlag(0x79)) {
gRoomVars.field_0x6c[2] = 0;
gRoomVars.field_0x6c[0] = 0;
@@ -4248,7 +4248,7 @@ u32 sub_unk3_DarkHyruleCastle_53(void) {
extern EntityData gUnk_080EE314;
-void sub_StateChange_DarkHyruleCastle_53(void) {
+void sub_StateChange_DarkHyruleCastle_B1Left(void) {
if (CheckLocalFlag(0x79)) {
sub_0807BB98(3, 2, 5, 1);
LoadRoomEntityList(&gUnk_080EE314);
@@ -4256,14 +4256,14 @@ void sub_StateChange_DarkHyruleCastle_53(void) {
}
}
-u32 sub_unk3_DarkHyruleCastle_54(void) {
+u32 sub_unk3_DarkHyruleCastle_B1Right(void) {
return 1;
}
void sub_StateChange_Ruins_Beanstalk2(void) {
}
-u32 sub_unk3_DarkHyruleCastle_55(void) {
+u32 sub_unk3_DarkHyruleCastle_B1Map(void) {
if (CheckLocalFlag(0x79)) {
gRoomVars.field_0x6c[2] = 0;
}
@@ -4272,7 +4272,7 @@ u32 sub_unk3_DarkHyruleCastle_55(void) {
extern EntityData gUnk_080EE5DC;
-void sub_StateChange_DarkHyruleCastle_55(void) {
+void sub_StateChange_DarkHyruleCastle_B1Map(void) {
if (CheckLocalFlag(0x79)) {
sub_0807BB98(0x392, 2, 2, 5);
LoadRoomEntityList(&gUnk_080EE5DC);
@@ -4280,26 +4280,26 @@ void sub_StateChange_DarkHyruleCastle_55(void) {
}
}
-u32 sub_unk3_DarkHyruleCastle_56(void) {
+u32 sub_unk3_DarkHyruleCastle_B2ToPrison(void) {
return 1;
}
void sub_StateChange_Ruins_Beanstalk3(void) {
}
-u32 sub_unk3_DarkHyruleCastle_57(void) {
+u32 sub_unk3_DarkHyruleCastle_B2Prison(void) {
return 1;
}
extern EntityData gUnk_080EE71C;
-void sub_StateChange_DarkHyruleCastle_57(void) {
+void sub_StateChange_DarkHyruleCastle_B2Prison(void) {
if (CheckLocalFlag(1)) {
LoadRoomEntityList(&gUnk_080EE71C);
}
}
-u32 sub_unk3_DarkHyruleCastle_58(void) {
+u32 sub_unk3_DarkHyruleCastle_B2Dropdown(void) {
return 1;
}
@@ -4950,13 +4950,13 @@ void sub_StateChange_HouseInteriors2_Dampe(void) {
}
}
-u32 sub_unk3_HouseInteriors2_Stockwell(void) {
+u32 sub_unk3_HouseInteriors2_StockwellLakeHouse(void) {
return 1;
}
extern EntityData gUnk_080F30CC;
-void sub_StateChange_HouseInteriors2_Stockwell(void) {
+void sub_StateChange_HouseInteriors2_StockwellLakeHouse(void) {
if ((GetInventoryValue(ITEM_QST_DOGFOOD) == 1) && !CheckGlobalFlag(BIN_DOGFOOD) &&
(gPlayerState.flags & PL_MINISH) == 0) {
LoadRoomEntityList(&gUnk_080F30CC);
@@ -5053,13 +5053,13 @@ u32 sub_unk3_HouseInteriors4_FarmHouse(void) {
void sub_StateChange_Ruins_LadderToTektites0(void) {
}
-u32 sub_unk3_HouseInteriors4_Mayor(void) {
+u32 sub_unk3_HouseInteriors4_MayorLakeCabin(void) {
return 1;
}
extern EntityData gUnk_080F3A48;
-void sub_StateChange_HouseInteriors4_Mayor(void) {
+void sub_StateChange_HouseInteriors4_MayorLakeCabin(void) {
if (!GetInventoryValue(ITEM_FLIPPERS) && CheckGlobalFlag(MIZUKAKI_START) && !GetInventoryValue(ITEM_QST_BOOK3)) {
LoadRoomEntityList(&gUnk_080F3A48);
}
@@ -5703,7 +5703,7 @@ void sub_StateChange_HyruleField_WesternWoodSouth(void) {
Manager18_Main(0);
}
-u32 sub_unk3_HyruleField_LinksHouseExterior(void) {
+u32 sub_unk3_HyruleField_SouthHyruleField(void) {
#if defined(JP) || defined(EU) || defined(DEMO_JP)
if (!CheckLocalFlag(0x6b)) {
#else
@@ -5719,7 +5719,7 @@ extern EntityData gUnk_080F70A8;
extern EntityData gUnk_080F70D8;
extern EntityData gUnk_080F7088;
-void sub_StateChange_HyruleField_LinksHouseExterior(void) {
+void sub_StateChange_HyruleField_SouthHyruleField(void) {
Manager18_Main(NULL);
#if defined(JP) || defined(EU) || defined(DEMO_JP)
if (!CheckLocalFlag(0x6b)) {
@@ -5740,31 +5740,31 @@ void sub_StateChange_HyruleField_LinksHouseExterior(void) {
}
}
-void sub_unk1_HyruleField_LinksHouseExterior(void) {
+void sub_unk1_HyruleField_SouthHyruleField(void) {
if ((gSave.windcrests & 0x40000000) == 0) {
LoadRoomEntityList(&gUnk_080F70D8);
}
}
-u32 sub_unk3_HyruleField_FromMinishWoods(void) {
+u32 sub_unk3_HyruleField_EasternHillsSouth(void) {
return 1;
}
-void sub_StateChange_HyruleField_FromMinishWoods(void) {
+void sub_StateChange_HyruleField_EasternHillsSouth(void) {
Manager18_Main(NULL);
}
-u32 sub_unk3_HyruleField_FromMinishWoodsNorth(void) {
+u32 sub_unk3_HyruleField_EasternHillsCenter(void) {
return 1;
}
-void sub_StateChange_HyruleField_FromMinishWoodsNorth(void) {
+void sub_StateChange_HyruleField_EasternHillsCenter(void) {
Manager18_Main(NULL);
}
extern u32 gUnk_080F7680;
-u32 sub_unk3_HyruleField_Farmers(void) {
+u32 sub_unk3_HyruleField_EasternHillsNorth(void) {
if (GetInventoryValue(ITEM_GUST_JAR) && !GetInventoryValue(ITEM_PACCI_CANE)) {
gRoomVars.field_0x6c[2] = &gUnk_080F7680;
}
@@ -5774,7 +5774,7 @@ u32 sub_unk3_HyruleField_Farmers(void) {
extern EntityData gUnk_080F7500;
extern EntityData gUnk_080F7550;
-void sub_StateChange_HyruleField_Farmers(void) {
+void sub_StateChange_HyruleField_EasternHillsNorth(void) {
Manager18_Main(NULL);
if (gSave.global_progress > 3) {
LoadRoomEntityList(&gUnk_080F7500);
@@ -6030,26 +6030,26 @@ void sub_0804F9C8(void) {
RestorePrevTileEntity(0x4d9, 1);
}
-u32 sub_unk3_HyruleField_OutsideCastleWest(void) {
+u32 sub_unk3_HyruleField_TrilbyHighlands(void) {
return 1;
}
extern EntityData gUnk_080F806C;
-void sub_StateChange_HyruleField_OutsideCastleWest(void) {
+void sub_StateChange_HyruleField_TrilbyHighlands(void) {
Manager18_Main(NULL);
if ((gSave.global_progress > 3) && CheckGlobalFlag(TINGLE_TALK1ST)) {
LoadRoomEntityList(&gUnk_080F806C);
}
}
-u32 sub_unk3_HyruleField_TrilbyHighlands(void) {
+u32 sub_unk3_HyruleField_WesternWoodsNorth(void) {
return 1;
}
extern EntityData gUnk_080F82E0;
-void sub_StateChange_HyruleField_TrilbyHighlands(void) {
+void sub_StateChange_HyruleField_WesternWoodsNorth(void) {
Manager18_Main(NULL);
#if defined(JP) || defined(EU) || defined(DEMO_JP)
if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(ITEM_RED_SWORD) && !CheckLocalFlag(0x9b)) {
@@ -6060,13 +6060,13 @@ void sub_StateChange_HyruleField_TrilbyHighlands(void) {
}
}
-u32 sub_unk3_HyruleField_PercysHouse(void) {
+u32 sub_unk3_HyruleField_WesternWoodsCenter(void) {
return 1;
}
extern EntityData gUnk_080F8430;
-void sub_StateChange_HyruleField_PercysHouse(void) {
+void sub_StateChange_HyruleField_WesternWoodsCenter(void) {
Manager18_Main(NULL);
if (CheckKinstoneFused(0x21) && !CheckLocalFlagByBank(0x200, 0x42)) {
LoadRoomEntityList(&gUnk_080F8430);
@@ -6133,25 +6133,25 @@ u32 sub_unk3_Caves_6(void) {
void sub_StateChange_Caves_6(void) {
}
-u32 sub_unk3_Caves_KeeseChest(void) {
+u32 sub_unk3_Caves_TrilbyKeeseChest(void) {
return 1;
}
-void sub_StateChange_Caves_KeeseChest(void) {
+void sub_StateChange_Caves_TrilbyKeeseChest(void) {
}
-u32 sub_unk3_Caves_FairyFountainTrilbyHighlands(void) {
+u32 sub_unk3_Caves_TrilbyFairyFountain(void) {
return 1;
}
-void sub_StateChange_Caves_FairyFountainTrilbyHighlands(void) {
+void sub_StateChange_Caves_TrilbyFairyFountain(void) {
}
-u32 sub_unk3_Caves_FairyFountainLinksHouse(void) {
+u32 sub_unk3_Caves_SouthHyruleFieldFairyFountain(void) {
return 1;
}
-void sub_StateChange_Caves_FairyFountainLinksHouse(void) {
+void sub_StateChange_Caves_SouthHyruleFieldFairyFountain(void) {
}
u32 sub_unk3_Caves_A(void) {
@@ -6204,31 +6204,31 @@ u32 sub_unk3_Caves_LonLonRanchWallet(void) {
void sub_StateChange_Caves_LonLonRanchWallet(void) {
}
-u32 sub_unk3_Caves_RupeeLinksHouse(void) {
+u32 sub_unk3_Caves_SouthHyruleFieldRupee(void) {
return 1;
}
-void sub_StateChange_Caves_RupeeLinksHouse(void) {
+void sub_StateChange_Caves_SouthHyruleFieldRupee(void) {
}
-u32 sub_unk3_Caves_RupeeTrilbyHighlands(void) {
+u32 sub_unk3_Caves_TrilbyRupee(void) {
return 1;
}
-void sub_StateChange_Caves_RupeeTrilbyHighlands(void) {
+void sub_StateChange_Caves_TrilbyRupee(void) {
}
-u32 sub_unk3_Caves_FairyFountainMoleMitts(void) {
+u32 sub_unk3_Caves_TrilbyMittsFairyFountain(void) {
return 1;
}
-void sub_StateChange_Caves_FairyFountainMoleMitts(void) {
+void sub_StateChange_Caves_TrilbyMittsFairyFountain(void) {
}
-u32 sub_unk3_Caves_KeeseChestSoutheastHyrule(void) {
+u32 sub_unk3_Caves_HillsKeeseChest(void) {
return 1;
}
-void sub_StateChange_Caves_KeeseChestSoutheastHyrule(void) {
+void sub_StateChange_Caves_HillsKeeseChest(void) {
}
u32 sub_unk3_Caves_BottleBusinessScrub(void) {
@@ -6245,11 +6245,11 @@ u32 sub_unk3_Caves_HeartPieceHallway(void) {
void sub_StateChange_Caves_HeartPieceHallway(void) {
}
-u32 sub_unk3_Caves_FairyFountainBoomerang(void) {
+u32 sub_unk3_Caves_NorthHyruleFieldFairyFountain(void) {
return 1;
}
-void sub_StateChange_Caves_FairyFountainBoomerang(void) {
+void sub_StateChange_Caves_NorthHyruleFieldFairyFountain(void) {
}
u32 sub_unk3_Caves_KinstoneBusinessScrub(void) {
@@ -6542,11 +6542,11 @@ u32 sub_unk3_TreeInteriors_HeartPiece(void) {
void sub_StateChange_TreeInteriors_HeartPiece(void) {
}
-u32 sub_unk3_TreeInteriors_StairsToBladeBrother(void) {
+u32 sub_unk3_TreeInteriors_Waveblade(void) {
return 1;
}
-void sub_StateChange_TreeInteriors_StairsToBladeBrother(void) {
+void sub_StateChange_TreeInteriors_Waveblade(void) {
}
u32 sub_unk3_TreeInteriors_14(void) {
@@ -6584,25 +6584,25 @@ u32 sub_unk3_TreeInteriors_BoomerangSoutheast(void) {
void sub_StateChange_TreeInteriors_BoomerangSoutheast(void) {
}
-u32 sub_unk3_TreeInteriors_HeartPieceSouthwestField(void) {
+u32 sub_unk3_TreeInteriors_WesternWoodsHeartPiece(void) {
return 1;
}
-void sub_StateChange_TreeInteriors_HeartPieceSouthwestField(void) {
+void sub_StateChange_TreeInteriors_WesternWoodsHeartPiece(void) {
}
-u32 sub_unk3_TreeInteriors_StairsToFairyFountain(void) {
+u32 sub_unk3_TreeInteriors_NorthHyruleFieldFairyFountain(void) {
return 1;
}
-void sub_StateChange_TreeInteriors_StairsToFairyFountain(void) {
+void sub_StateChange_TreeInteriors_NorthHyruleFieldFairyFountain(void) {
}
-u32 sub_unk3_TreeInteriors_StairsToWalletFairy(void) {
+u32 sub_unk3_TreeInteriors_MinishWoodsGreatFairy(void) {
return 1;
}
-void sub_StateChange_TreeInteriors_StairsToWalletFairy(void) {
+void sub_StateChange_TreeInteriors_MinishWoodsGreatFairy(void) {
}
u32 sub_unk3_TreeInteriors_1C(void) {
@@ -6612,11 +6612,11 @@ u32 sub_unk3_TreeInteriors_1C(void) {
void sub_StateChange_TreeInteriors_1C(void) {
}
-u32 sub_unk3_TreeInteriors_StairsToBusinessScrub(void) {
+u32 sub_unk3_TreeInteriors_MinishWoodsBusinessScrub(void) {
return 1;
}
-void sub_StateChange_TreeInteriors_StairsToBusinessScrub(void) {
+void sub_StateChange_TreeInteriors_MinishWoodsBusinessScrub(void) {
}
u32 sub_unk3_TreeInteriors_1E(void) {
@@ -6626,11 +6626,11 @@ u32 sub_unk3_TreeInteriors_1E(void) {
void sub_StateChange_TreeInteriors_1E(void) {
}
-u32 sub_unk3_TreeInteriors_1F(void) {
+u32 sub_unk3_TreeInteriors_UnusedHeartContainer(void) {
return 1;
}
-void sub_StateChange_TreeInteriors_1F(void) {
+void sub_StateChange_TreeInteriors_UnusedHeartContainer(void) {
}
extern u32 gUnk_080FAD48;
@@ -6793,11 +6793,11 @@ u32 sub_unk3_CrenelCaves_MushroomKeese(void) {
void sub_StateChange_CrenelCaves_MushroomKeese(void) {
}
-u32 sub_unk3_CrenelCaves_LadderToGreenWater(void) {
+u32 sub_unk3_CrenelCaves_LadderToSpringWater(void) {
return 1;
}
-void sub_StateChange_CrenelCaves_LadderToGreenWater(void) {
+void sub_StateChange_CrenelCaves_LadderToSpringWater(void) {
}
u32 sub_unk3_CrenelCaves_BombBusinessScrub(void) {
diff --git a/src/script.c b/src/script.c
index a6a4e36c..1bdf1468 100644
--- a/src/script.c
+++ b/src/script.c
@@ -349,7 +349,7 @@ void ExecuteScriptForEntity(Entity* entity, void (*postScriptCallback)(Entity*,
} else {
HandlePostScriptActions(entity, *piVar1);
}
- if (!entity->next) {
+ if (entity->next == NULL) {
DeleteThisEntity();
}
}
@@ -1884,7 +1884,7 @@ void sub_0807F78C(Entity* entity, ScriptExecutionContext* context) {
msg = GetSaleItemConfirmMessageID(item);
price = GetItemPrice(item);
MessageNoOverlap(msg, entity);
- gMessage.field_0x10 = (u16)price;
+ gMessage.rupees = (u16)price;
}
void sub_0807F7C4(Entity* entity, ScriptExecutionContext* context) {
@@ -1929,7 +1929,7 @@ void sub_0807F854(Entity* entity, ScriptExecutionContext* context) {
switch (idx) {
case 0:
case 1:
- gMessage.field_0x10 = value;
+ gMessage.rupees = value;
break;
case 2:
gMessage.field_0x14 = value;
diff --git a/src/scroll.c b/src/scroll.c
index e751a412..ba5986e4 100644
--- a/src/scroll.c
+++ b/src/scroll.c
@@ -7,23 +7,58 @@
#include "asm.h"
#include "common.h"
#include "fileselect.h"
+#include "screen.h"
extern void sub_08080BC4(void);
+extern void sub_080197D4(const void*);
+extern void sub_0807C8B0(u8*, u32, u32);
+extern void sub_0801AB08(u8*, u8*);
+extern void sub_0807C810();
+extern void DeleteSleepingEntities(void);
+extern void sub_0807BBE4();
+extern void sub_0807BC84();
+extern void sub_0805E248();
extern u8 gUpdateVisibleTiles;
-
-extern void (*const gUnk_0811E768[])(RoomControls*);
-
+extern u16 gUnk_0200B640;
+extern u32** gUnk_08109194[];
+extern u8 gMapDataTop[];
+extern u8 gMapDataBottom[];
+extern u8 gUnk_02022830[];
+extern u8 gUnk_020246B0[];
+
+void sub_0807FC64(RoomControls*);
void sub_0807FC7C(RoomControls*);
-void sub_080805F8(void);
-
-extern void (*const gUnk_0811E780[])(RoomControls*);
-
-extern void (*const gUnk_0811E794[])(RoomControls*);
+void sub_0807FDB0(RoomControls*);
+void sub_0807FEF0(RoomControls*);
+void sub_0807FF54(RoomControls*);
+void sub_0807FDC8(RoomControls*);
+void sub_0807FDE4(RoomControls*);
+void sub_0807FDF8(RoomControls*);
+void sub_0807FEC8(RoomControls*);
+void sub_0807FF08(RoomControls*);
+void sub_0807FF1C(RoomControls*);
+
+void sub_0807FF6C(RoomControls*);
+void sub_0807FFE4(RoomControls*);
+void sub_08080040(RoomControls*);
+void sub_08080108(RoomControls*);
+void sub_08080198(RoomControls*);
+void sub_080801BC(RoomControls*);
+void UpdateIsDiggingCave(void);
+u32 sub_080803D0();
+u32 sub_08080278();
+void sub_08080C80(u32*);
+void sub_08080368();
+void sub_08080B60(u8*);
extern u8 gMapDataTopSpecial[];
void UpdateScroll(void) {
+ static void (*const gUnk_0811E768[])(RoomControls*) = {
+ sub_0807FC64, sub_0807FC7C, sub_0807FDB0, NULL, sub_0807FEF0, sub_0807FF54,
+ };
+
gRoomControls.scroll_flags &= 0xfb;
gUnk_0811E768[gRoomControls.unk3](&gRoomControls);
}
@@ -33,12 +68,17 @@ void sub_0807FC64(RoomControls* controls) {
controls->reload_flags = 0;
controls->unk5 = 4;
sub_0807FC7C(controls);
- sub_080805F8();
+ UpdateIsDiggingCave();
}
ASM_FUNC("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomControls* controls))
void sub_0807FDB0(RoomControls* controls) {
+ static void (*const gUnk_0811E780[])(RoomControls*) = {
+ sub_0807FDC8,
+ sub_0807FDE4,
+ sub_0807FDF8,
+ };
gUnk_0811E780[controls->unk4](controls);
}
@@ -55,17 +95,70 @@ void sub_0807FDE4(RoomControls* controls) {
gUpdateVisibleTiles = 2;
}
-ASM_FUNC("asm/non_matching/scroll/sub_0807FDF8.inc", void sub_0807FDF8())
+void sub_0807FDF8(RoomControls* controls) {
+ u32 bVar1;
+ Entity* pEVar2;
+ int iVar3;
+
+ gUpdateVisibleTiles = 2;
+ controls->filler2[0]++;
+ switch (controls->scroll_direction) {
+ case 0:
+ controls->scroll_y -= 4;
+ pEVar2 = controls->camera_target;
+ if (pEVar2 == &gPlayerEntity) {
+ pEVar2->y.WORD = gPlayerEntity.y.WORD - 0x6000;
+ }
+ if (controls->filler2[0] == 0x28) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ case 1:
+ controls->scroll_x = controls->scroll_x + 4;
+ if (controls->camera_target == &gPlayerEntity) {
+ gPlayerEntity.x.WORD += 0x4000;
+ }
+ if (controls->filler2[0] == 0x3c) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ case 2:
+ controls->scroll_y = controls->scroll_y + 4;
+ pEVar2 = controls->camera_target;
+ if (pEVar2 == &gPlayerEntity) {
+ pEVar2->y.WORD = gPlayerEntity.y.WORD + 0x6000;
+ }
+ if (controls->filler2[0] == 0x28) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ case 3:
+ controls->scroll_x -= 4;
+ if (controls->camera_target == &gPlayerEntity) {
+ gPlayerEntity.x.WORD -= 0x4000;
+ }
+ if (controls->filler2[0] == 0x3c) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ }
+
+ controls->shake_duration = 0;
+ sub_08080BC4();
+}
void sub_0807FEC8(RoomControls* this) {
this->unk3 = 0;
- MemFill32(0xffffffff, gPlayerState.path_memory, 0x40);
+ 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;
}
void sub_0807FEF0(RoomControls* controls) {
- extern void (*const gUnk_0811E78C[])(RoomControls*);
+ static void (*const gUnk_0811E78C[])(RoomControls*) = {
+ sub_0807FF08,
+ sub_0807FF1C,
+ };
gUnk_0811E78C[controls->unk4](controls);
}
@@ -86,16 +179,95 @@ void sub_0807FF1C(RoomControls* controls) {
}
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);
}
-ASM_FUNC("asm/non_matching/scroll/sub_0807FF6C.inc", void sub_0807FF6C())
+void sub_0807FF6C(RoomControls* controls) {
+ controls->unk4 = 1;
+ gScreen.lcd.displayControl |= DISPCNT_WIN1_ON;
+ gScreen.controls.windowInsideControl = (u8)gScreen.controls.windowInsideControl | 0x1700;
+ gScreen.controls.windowOutsideControl = (gScreen.controls.windowOutsideControl & 0xff00) | 7;
+ gScreen.controls.window1HorizontalDimensions = 0xf0;
+ gScreen.controls.window1VerticalDimensions = 0xf0;
+ ResetPlayer();
+ ResetPlayerAnimationAndAction();
+ if (gUnk_03004030.isDiggingCave) {
+ gPlayerEntity.animationState = 4;
+ } else {
+ gPlayerEntity.animationState = 0;
+ }
+ sub_080809D4();
+}
-ASM_FUNC("asm/non_matching/scroll/sub_0807FFE4.inc", void sub_0807FFE4())
+void sub_0807FFE4(RoomControls* controls) {
+ controls->unk4 = 2;
+ controls->filler2[0] = sub_080803D0() + 6;
+ gUnk_0200B640 = sub_08080278();
+ sub_080197D4(*gUnk_08109194[gUnk_03004030.unk_00->unk_03]);
+ sub_0807C8B0(gMapDataTop, controls->width >> 4, controls->height >> 4);
+ sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4);
+}
-ASM_FUNC("asm/non_matching/scroll/sub_08080040.inc", void sub_08080040())
+void sub_08080040(RoomControls* controls) {
+ int iVar2;
+ int iVar3;
+ int uVar5;
+ int uVar6;
+ int iVar7;
+ int temp;
+
+ controls->filler2[0] -= 6;
+ controls->filler2[1] = (controls->filler2[0] << 1) / 3;
+ if (0x2a < controls->filler2[0]) {
+ iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x;
+ uVar6 = (iVar2 - controls->filler2[0]) + 8;
+ if (uVar6 < 0) {
+ uVar6 = 0;
+ }
+ iVar7 = iVar2 + controls->filler2[0] - 8;
+ if (0xf0 < iVar7) {
+ iVar7 = 0xf0;
+ }
+ temp = controls->camera_target->y.HALF.HI - controls->scroll_y;
+ uVar5 = (temp - controls->filler2[1]) + 8;
+ if (uVar5 < 0) {
+ uVar5 = 0;
+ }
+ iVar3 = temp + controls->filler2[1] - 8;
+ if (0xa0 < iVar3) {
+ iVar3 = 0xa0;
+ }
+ gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff);
+ gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff);
+ }
+ if (controls->filler2[0] == 0) {
+ controls->unk4 = 3;
+ DeleteSleepingEntities();
+ sub_0807C810();
+ sub_08080C80(*(gUnk_08109194[gUnk_03004030.unk_00->unk_03] + 1));
+ } else {
+ gUpdateVisibleTiles = 4;
+ }
+}
-ASM_FUNC("asm/non_matching/scroll/sub_08080108.inc", void sub_08080108())
+void sub_08080108(RoomControls* controls) {
+ controls->unk4 = 4;
+ MemCopy(gMapDataBottom, gMapDataBottom + 0x3000, 0x2000);
+ MemCopy(gMapDataTop, gMapDataTop + 0x3000, 0x2000);
+ sub_08080368();
+ gUnk_02034480.unk_00 = gUnk_0200B640;
+ MemCopy(gUnk_02022830, gUnk_020246B0, 0x1800);
+ sub_08080B60(gMapDataBottom - 4);
+ sub_08080B60(gMapDataTop - 4);
+ sub_0807BBE4();
+ sub_0807BC84();
+ sub_0805E248();
+ sub_0801AB08((u8*)&gMapDataBottomSpecial, gMapDataBottom - 4);
+ sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4);
+}
void sub_08080198(RoomControls* controls) {
controls->unk4 = 5;
@@ -103,35 +275,79 @@ void sub_08080198(RoomControls* controls) {
LoadRoom();
CallRoomProp5And7();
gUpdateVisibleTiles = 0;
- sub_080805F8();
+ UpdateIsDiggingCave();
}
-ASM_FUNC("asm/non_matching/scroll/sub_080801BC.inc", void sub_080801BC())
+void sub_080801BC(RoomControls* controls) {
+ int iVar2;
+ int iVar3;
+ int uVar5;
+ int uVar6;
+ int iVar7;
+ int temp;
+
+ controls->filler2[0] += 6;
+ controls->filler2[1] = (controls->filler2[0] << 1) / 3;
+ if (0x1e < controls->filler2[0]) {
+ iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x;
+ uVar6 = (iVar2 - controls->filler2[0]);
+ if (uVar6 < 0) {
+ uVar6 = 0;
+ }
+ iVar7 = iVar2 + controls->filler2[0];
+ if (0xf0 < iVar7) {
+ iVar7 = 0xf0;
+ }
+ temp = controls->camera_target->y.HALF.HI - controls->scroll_y;
+ uVar5 = (temp - controls->filler2[1]);
+ if (uVar5 < 0) {
+ uVar5 = 0;
+ }
+ iVar3 = temp + controls->filler2[1];
+ if (0xa0 < iVar3) {
+ iVar3 = 0xa0;
+ }
+ gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff);
+ gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff);
+ }
+ if (controls->filler2[2] == 0) {
+ controls->unk3 = 0;
+ controls->reload_flags = 0;
+ ResetSystemPriority();
+ gScreen.lcd.displayControl &= ~DISPCNT_WIN1_ON;
+ gScreen.controls.windowInsideControl &= 0xff;
+ gScreen.controls.windowOutsideControl &= 0xff00;
+ } else {
+ gUpdateVisibleTiles = 4;
+ controls->filler2[2] = 0;
+ }
+}
-ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", void sub_08080278())
+ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", u32 sub_08080278())
ASM_FUNC("asm/non_matching/scroll/sub_08080368.inc", void sub_08080368())
-ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", void sub_080803D0())
+ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", u32 sub_080803D0())
-void sub_080805F8(void) {
+void UpdateIsDiggingCave(void) {
switch (gRoomControls.area) {
- case 0xc:
- case 0x0f:
- case 0x13:
- case 0x14:
- case 0x16:
- case 0x17:
- case 0x19:
- gUnk_03004030.unk_08 = 1;
+ case AREA_LAKE_WOODS_CAVE:
+ case AREA_HYRULE_DIG_CAVES:
+ case AREA_DIG_CAVES:
+ case AREA_CRENEL_DIG_CAVE:
+ case AREA_VEIL_FALLS_DIG_CAVE:
+ case AREA_CASTOR_WILDS_DIG_CAVE:
+ case AREA_HYLIA_DIG_CAVES:
+ gUnk_03004030.isDiggingCave = 1;
return;
}
- gUnk_03004030.unk_08 = 0;
+ gUnk_03004030.isDiggingCave = 0;
}
void ClearTilemaps(void) {
+ // Is gRoomControls 4 bytes bigger?
MemClear(&gRoomControls, 0x38);
- MemClear(&gUnk_03004030, 0xc);
+ MemClear(&gUnk_03004030, sizeof(gUnk_03004030));
gRoomControls.filler3 = 0xffff;
gUnk_03004030.unk_0a = 0xff;
gUnk_02034480.unk_00 = 0;
@@ -265,10 +481,10 @@ void sub_080809D4(void) {
ASM_FUNC("asm/non_matching/scroll/UpdateDoorTransition.inc", void UpdateDoorTransition())
-ASM_FUNC("asm/non_matching/scroll/sub_08080B60.inc", void sub_08080B60())
+ASM_FUNC("asm/non_matching/scroll/sub_08080B60.inc", void sub_08080B60(u8* param_1))
ASM_FUNC("asm/non_matching/scroll/sub_08080BC4.inc", void sub_08080BC4())
-ASM_FUNC("asm/non_matching/scroll/sub_08080C80.inc", void sub_08080C80())
+ASM_FUNC("asm/non_matching/scroll/sub_08080C80.inc", void sub_08080C80(u32* param_1))
ASM_FUNC("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* a))
diff --git a/src/staffroll.c b/src/staffroll.c
new file mode 100644
index 00000000..2a9077b4
--- /dev/null
+++ b/src/staffroll.c
@@ -0,0 +1,326 @@
+#include "global.h"
+#include "room.h"
+#include "main.h"
+#include "save.h"
+#include "flags.h"
+#include "fileselect.h"
+#include "screen.h"
+#include "common.h"
+#include "menu.h"
+#include "game.h"
+#include "subtask.h"
+
+typedef struct {
+ /*0x00*/ Menu base;
+ s16 unk_10;
+ u16 unk_12;
+ u16 unk_14;
+ u8 unk_16;
+ u8 unk_17;
+ u8 unk_18;
+ u8 unk_19;
+ u8 bgmMusicStarted;
+ u8 unk_1b[0x14];
+ u8 unk_2f;
+} StaffrollMenu;
+#define gStaffrollMenu (*(StaffrollMenu*)&gMenu)
+
+const Font gUnk_08127280 = {
+ (u16*)0x02021f72, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 0, 0, 0, 0, 0, 5, 0, 1, 0
+};
+const Font gUnk_08127298 = {
+ (u16*)0x02021f90, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 0, 0, 0, 0, 0, 5, 0, 1, 0
+};
+const Font gUnk_081272B0 = {
+ (u16*)0x0202204e, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 1, 0, 0, 0, 0, 5, 0, 1, 0
+};
+const Font gUnk_081272C8 = {
+ (u16*)0x020222ce, (void*)0x0600c400, gTextGfxBuffer, 0, 61472, 240, 1, 0, 0, 0, 0, 5, 0, 1, 0
+};
+
+const Font* const gUnk_081272E0[] = {
+ &gUnk_08127280,
+ &gUnk_08127298,
+ &gUnk_081272B0,
+ &gUnk_081272C8,
+};
+
+// TODO figure out structure of gStaffrollMenu.base.field_0xc
+extern u8 gUnk_081272F0[];
+extern u8 gUnk_08127644[];
+extern u8 gUnk_08127998[];
+extern const u8 gUnk_08127CEC[];
+extern void (*const gUnk_08127D00[])(void);
+extern void (*const gUnk_08127D10[])(void);
+
+void sub_080A3954(void);
+
+void StaffrollTask(void) {
+ gRoomTransition.frameCount += 1;
+ gUnk_08127D00[gMain.state]();
+}
+
+void StaffrollTask_State0(void) {
+ gSave.unk6 = 1;
+ SetGlobalFlag(GAMECLEAR);
+ gMain.state = 1;
+ gStaffrollMenu.base.menuType = 0;
+ gStaffrollMenu.base.transitionTimer = 0xb4;
+ gStaffrollMenu.unk_16 = 5;
+ gStaffrollMenu.unk_17 = 4;
+ gStaffrollMenu.bgmMusicStarted = 0;
+ if (gSaveHeader->language >= 2) {
+ gStaffrollMenu.base.field_0xc = gUnk_08127998;
+ } else {
+ if (gSaveHeader->language == 1) {
+ gStaffrollMenu.base.field_0xc = gUnk_08127644;
+ } else {
+ gStaffrollMenu.base.field_0xc = gUnk_081272F0;
+ }
+ }
+ DispReset(0);
+ LoadPaletteGroup(0xb);
+ LoadPaletteGroup(0xc);
+ SetColor(0, 0);
+ gScreen.lcd.displayControl = 0x640;
+ gScreen.controls.layerFXControl = 0x2442;
+ gScreen.controls.alphaBlend = 0x1000;
+ gScreen.bg1.control = 0x1e4d;
+ gScreen.bg2.control = 0x1dc3;
+ InitSoundPlayingInfo();
+ ResetSystemPriority();
+ SetFade(5, 0x100);
+}
+
+void StaffrollTask_State1(void) {
+ gUnk_08127D10[gMenu.menuType]();
+}
+
+void StaffrollTask_State1MenuType0(void) {
+ gMenu.transitionTimer -= 1;
+ if (gMenu.transitionTimer == 0) {
+ sub_080A3954();
+ }
+}
+
+void StaffrollTask_State1MenuType1(void) {
+ if (gFadeControl.active == 0) {
+ const u8* ptr = &gUnk_08127CEC[gStaffrollMenu.unk_10 * 2];
+ LoadPaletteGroup(ptr[0]);
+ LoadGfxGroup(ptr[1]);
+ MemClear(&gBG1Buffer, 0x800);
+ gScreen.bg1.updated = 1;
+ gScreen.bg2.xOffset = gStaffrollMenu.unk_12;
+ gScreen.controls.alphaBlend = 0x1000;
+ gStaffrollMenu.base.menuType = 0;
+ if (gStaffrollMenu.bgmMusicStarted == 0) {
+ gStaffrollMenu.bgmMusicStarted = 1;
+ SoundReq(BGM_CREDITS);
+ }
+ SetFade(4, 8);
+ }
+}
+
+void StaffrollTask_State1MenuType2(void) {
+ u8 tmp;
+ switch (gStaffrollMenu.base.overlayType) {
+ case 0:
+ MemClear(&gBG1Buffer, 0x800);
+ sub_0805F46C(gStaffrollMenu.unk_10, (Font*)gUnk_081272E0[gStaffrollMenu.unk_19]);
+ gScreen.bg1.updated = 1;
+ gStaffrollMenu.base.overlayType++;
+ gStaffrollMenu.unk_18 = 0;
+ break;
+ case 1:
+ if (gFadeControl.active != 0) {
+ return;
+ }
+ if ((gRoomTransition.frameCount & 1) != 0) {
+ return;
+ }
+ tmp = ++gStaffrollMenu.unk_18;
+ gScreen.controls.alphaBlend = (0x10 - tmp) * 0x100 | tmp;
+ if (gStaffrollMenu.unk_18 >= 0x10) {
+ gStaffrollMenu.base.overlayType++;
+ }
+ break;
+ case 2:
+ gStaffrollMenu.base.transitionTimer--;
+ if (gStaffrollMenu.base.transitionTimer == 0) {
+ gStaffrollMenu.base.overlayType++;
+ }
+ break;
+ case 3:
+ if ((gRoomTransition.frameCount & 1) != 0) {
+ return;
+ }
+ tmp = --gStaffrollMenu.unk_18;
+ gScreen.controls.alphaBlend = (0x10 - tmp) * 0x100 | tmp;
+ if (gStaffrollMenu.unk_18 == 0) {
+ gStaffrollMenu.base.overlayType++;
+ }
+ break;
+ default:
+ if (gFadeControl.active == 0) {
+ gFadeControl.mask = 0xffffffff;
+ sub_080A3954();
+ }
+ break;
+ }
+}
+
+void StaffrollTask_State1MenuType3(void) {
+ gMenu.transitionTimer--;
+ if (gMenu.transitionTimer == 0) {
+ sub_080A3954();
+ SetFade(5, 8);
+ }
+}
+
+void StaffrollTask_State1MenuType4(void) {
+ gFadeControl.mask = 0xffff7fff;
+ SetFade(5, 4);
+ SetFadeProgress(gMenu.transitionTimer);
+ sub_080A3954();
+}
+
+void StaffrollTask_State1MenuType5(void) {
+ SetFade(4, 4);
+ SetFadeProgress(gMenu.transitionTimer);
+ sub_080A3954();
+}
+
+void StaffrollTask_State1MenuType6(void) {
+ if (gFadeControl.active == 0) {
+ MemClear(&gBG1Buffer, 0x800);
+ gScreen.bg1.updated = 1;
+ MemClear(&gBG2Buffer, 0x800);
+ gScreen.bg2.updated = 1;
+ gScreen.controls.alphaBlend = 0x1000;
+ gMenu.menuType = 0;
+ SetFade(4, 8);
+ }
+}
+
+void StaffrollTask_State1MenuType7(void) {
+ if (gFadeControl.active == 0) {
+ SetFade(7, 8);
+ gMain.state = 2;
+ }
+}
+
+void sub_080A3954(void) {
+ u16* puVar1;
+ u16* puVar2;
+ u16* puVar3;
+ u8* pbVar4;
+
+ puVar1 = (u16*)(gStaffrollMenu.base.field_0xc + 6);
+ puVar2 = (u16*)(gStaffrollMenu.base.field_0xc + 8);
+ puVar3 = (u16*)(gStaffrollMenu.base.field_0xc + 10);
+ pbVar4 = gStaffrollMenu.base.field_0xc + 1;
+ gStaffrollMenu.base.menuType = *gStaffrollMenu.base.field_0xc;
+ gStaffrollMenu.base.overlayType = 0;
+ gStaffrollMenu.unk_10 = *puVar1;
+ gStaffrollMenu.base.transitionTimer = *(u16*)(gStaffrollMenu.base.field_0xc + 4);
+ gStaffrollMenu.unk_12 = *puVar2;
+ gStaffrollMenu.unk_14 = *puVar3;
+ gStaffrollMenu.unk_19 = *pbVar4;
+ gStaffrollMenu.base.field_0xc += 0xc;
+}
+
+void StaffrollTask_State3(void) {
+ if (gFadeControl.active == 0) {
+ DoSoftReset();
+ }
+}
+
+void StaffrollTask_State2(void) {
+ SaveResult saveResult;
+ u32 choice;
+ u32 tmp;
+ switch (gStaffrollMenu.base.overlayType) {
+ case 0:
+ gStaffrollMenu.base.overlayType = 1;
+ gStaffrollMenu.base.transitionTimer = 0x1e;
+ gStaffrollMenu.base.field_0x3 = 0;
+ DispReset(1);
+ InitSoundPlayingInfo();
+ sub_080A4D34();
+ LoadPaletteGroup(10);
+ SetColor(0, 0);
+ LoadGfxGroup(4);
+ MemClear((void*)VRAM, 0x20);
+ SetPopupState(0, 0);
+ gScreen.lcd.displayControl |= 0x600;
+ gScreen.bg1.control = 0x1c01;
+ gScreen.bg2.control = 0x1d05;
+ gScreen.bg2.updated = 1;
+ SetFade(4, 8);
+ break;
+ case 1:
+ if (gFadeControl.active == 0) {
+ if (gStaffrollMenu.base.transitionTimer != 0) {
+ gStaffrollMenu.base.transitionTimer--;
+ } else {
+ choice = gStaffrollMenu.base.field_0x3;
+ switch (gInput.newKeys) {
+ case 0x40:
+ choice = 0;
+ break;
+ case 0x80:
+ choice = 1;
+ break;
+ case 1:
+ if (choice != 0) {
+ tmp = 4;
+ } else {
+ CreateDialogBox(8, 0);
+ tmp = 2;
+ }
+ gStaffrollMenu.base.overlayType = tmp;
+ gStaffrollMenu.base.transitionTimer = 0x3c;
+ SoundReq(SFX_TEXTBOX_SELECT);
+ break;
+ }
+ if (gStaffrollMenu.base.field_0x3 != choice) {
+ gStaffrollMenu.base.field_0x3 = choice;
+ SetPopupState(0, choice);
+ SoundReq(SFX_TEXTBOX_CHOICE);
+ }
+ }
+ }
+ break;
+ case 2:
+ saveResult = HandleSave(0);
+ gStaffrollMenu.base.field_0x0 = saveResult;
+ switch (saveResult) {
+ case SAVE_OK:
+ gStaffrollMenu.base.overlayType = 4;
+ break;
+ case SAVE_ERROR:
+ gStaffrollMenu.base.transitionTimer = 0x3c;
+ CreateDialogBox(9, 0);
+ gStaffrollMenu.base.overlayType = 3;
+ break;
+ }
+ break;
+ case 3:
+ if (gStaffrollMenu.base.transitionTimer != 0) {
+ gStaffrollMenu.base.transitionTimer--;
+ } else {
+ if ((gInput.newKeys & 0xb) != 0) {
+ gStaffrollMenu.base.overlayType = 1;
+ }
+ }
+ break;
+ case 4:
+ default:
+ gScreen.lcd.displayControl &= 0xfdff;
+ sub_08050384();
+ SetFade(7, 8);
+ gMain.state = 3;
+ gStaffrollMenu.base.overlayType = 0;
+ break;
+ }
+}
diff --git a/src/subtask2.c b/src/subtask2.c
index 47542862..f27faf5e 100644
--- a/src/subtask2.c
+++ b/src/subtask2.c
@@ -11,8 +11,6 @@
#include "main.h"
#include "message.h"
-extern void CreateDialogBox(u32, u32);
-
extern u8 gUnk_08128D38[];
extern u8 gUnk_08128D43[];
diff --git a/src/text.c b/src/text.c
index 01f8ab2e..10b504f8 100644
--- a/src/text.c
+++ b/src/text.c
@@ -4,6 +4,8 @@
#include "functions.h"
#include "asm.h"
#include "enemy.h"
+#include "message.h"
+#include "fileselect.h"
extern u16 gUnk_081092D4;
extern u8 gUnk_081094CE;
@@ -17,6 +19,8 @@ typedef struct {
extern VStruct gUnk_0810942E[];
extern u32 gUnk_0810926C[];
+extern u32* Translations[];
+extern u32 gUnk_08109244;
typedef struct {
u8 unk0;
@@ -24,6 +28,599 @@ typedef struct {
} UStruct;
void sub_0805F820(WStruct* r0, u32* r1);
+bool32 sub_0805EF40(Token* tok, const u8*);
+void sub_0805F440(Token*, u8*);
+u32 sub_0805F6A4(Token*, WStruct*);
+u32 GetCharacter(Token* tok);
+u32 GetFontStrWith(Token*, u32);
+int sub_0805F67C(short*, int, int);
+void sub_0805F918(u32, u32, void*);
+bool32 sub_0805F5CC(Font*, Token*, WStruct*);
+void sub_0805EEB4(Token*, u32);
+u32 sub_0805EF8C(Token*);
+u32 sub_0805EFB4(Token*);
+u32 sub_0805F9A0(u32);
+
+typedef struct {
+ u16 unk0;
+ s8 unk2;
+ s8 unk3;
+ u8 filler[0x4];
+ u16 unk8[4];
+ u16 unk10[4];
+} struct_gUnk_02034330;
+
+extern struct_gUnk_02034330 gUnk_02034330;
+extern WStruct gUnk_02036540[4];
+extern u32* gUnk_08109248[];
+extern u8* gUnk_08109230[];
+extern u32* gTranslations[];
+extern u32 gUnk_08109244;
+
+void sub_0805EEB4(Token* token, u32 textIndex) {
+ u32 langIndex;
+ u32* puVar2;
+ u8* puVar5;
+ int iVar3;
+ u32 uVar4;
+ u32 uVar6;
+ u32 uVar7;
+
+ token->textIndex = (u16)textIndex;
+ langIndex = gSaveHeader->language;
+ if (((1 < langIndex) && (textIndex >> 8 == 1)) && (textIndex < 0x119)) {
+ langIndex = 3;
+ }
+ puVar2 = gTranslations[langIndex];
+ iVar3 = puVar2[(u8)(textIndex >> 8)];
+ puVar2 = (u32*)((int)puVar2 + iVar3);
+ iVar3 = puVar2[(u8)textIndex];
+ uVar6 = *(gTranslations[langIndex]) >> 2;
+ uVar7 = *puVar2 >> 2;
+ uVar4 = 0;
+ if (((token->textIndex >> 8) >= uVar6) || ((u8)token->textIndex >= uVar7)) {
+ uVar4 = 1;
+ } else {
+ if (*(char*)((int)puVar2 + iVar3) == 0) {
+ uVar4 = 2;
+ }
+ }
+ switch (uVar4) {
+ case 1:
+ case 2:
+ puVar2 = &gUnk_08109244;
+ iVar3 = 0;
+ break;
+ }
+ puVar2 = (u32*)((int)puVar2 + iVar3);
+ sub_0805EF40(token, (u8*)puVar2);
+}
+
+bool32 sub_0805EF40(Token* token, const u8* param_2) {
+ if (token->unk00 != 0) {
+ if (6 < token->unk01) {
+ return 0;
+ }
+ token->unk01++;
+ }
+ token->buf[token->unk01] = param_2;
+ token->unk00 = 1;
+ return 1;
+}
+
+u32 sub_0805EF8C(Token* token) {
+ if (token->unk00 == 0) {
+ return 0;
+ }
+ return (token->buf[token->unk01]++)[0];
+}
+
+u32 sub_0805EFB4(Token* token) {
+ u32 rv = token->unk01;
+
+ if (token->unk01 != 0) {
+ token->unk01--;
+ } else {
+ token->unk00 = 0;
+ }
+ return rv;
+}
+
+u32 GetCharacter(Token* token) {
+ u32 uVar3;
+ u32 code;
+ u32 uVar6;
+ u8** ppuVar7;
+ int iVar8;
+
+ do {
+ code = sub_0805EF8C(token);
+ token->code = (u8)code;
+ iVar8 = 0;
+ switch (code) {
+ case 0:
+ iVar8 = sub_0805EFB4(token);
+ code = 0;
+ break;
+ case 1:
+ uVar6 = sub_0805EF8C(token);
+ token->param = (u16)uVar6;
+ code = 6;
+ if (uVar6 < 0xb) {
+ code = 5;
+ }
+ break;
+ case 2:
+ uVar3 = sub_0805EF8C(token);
+ token->param = uVar3;
+ code = 7;
+ break;
+ case 3:
+ uVar6 = sub_0805EF8C(token) << 8;
+ uVar6 += sub_0805EF8C(token);
+ token->param = uVar6;
+ code = 8;
+ break;
+ case 4:
+ uVar6 = sub_0805EF8C(token);
+ switch (uVar6) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 0xb:
+ case 0xc:
+ case 0xd:
+ case 0xe:
+ case 0xf:
+ code = 9;
+ break;
+ case 0x10:
+ uVar6 = sub_0805EF8C(token);
+ code = 10;
+ break;
+ case 0x11:
+ code = 2;
+ break;
+ case 0x12:
+ code = 3;
+ break;
+ case 0x13:
+ code = 4;
+ break;
+ case 0x14:
+ case 0x15:
+ code = 0xb;
+ // This is a comparison to 0 but couldn't make it do the bit trick
+ uVar6 = (-(uVar6 ^ 0x14) | (uVar6 ^ 0x14)) >> 0x1f;
+ }
+ token->param = (u16)uVar6;
+ break;
+ case 5:
+ uVar6 = sub_0805EF8C(token);
+ if (uVar6 == 0xff) {
+ uVar6 = 0;
+ } else {
+ uVar6 <<= 8;
+ uVar6 += sub_0805EF8C(token);
+ }
+ token->_6 = uVar6;
+ code = 0xc;
+ break;
+ case 6:
+ uVar6 = sub_0805EF8C(token);
+ switch (uVar6) {
+ case 0 ... 4:
+ ppuVar7 = (u8**)token->_c;
+ if (ppuVar7 == NULL) {
+ ppuVar7 = gUnk_08109230;
+ }
+ sub_0805EF40(token, ppuVar7[uVar6]);
+ break;
+ case 5:
+ uVar6 = sub_0805EF8C(token) << 8;
+ uVar6 += sub_0805EF8C(token);
+ sub_0805EEB4(token, uVar6);
+ break;
+ default:
+ break;
+ }
+ iVar8 = 1;
+ break;
+ case 7:
+ uVar6 = sub_0805EF8C(token) << 8;
+ uVar6 += sub_0805EF8C(token);
+ token->unk00 = 0;
+ token->unk01 = 0;
+ sub_0805EEB4(token, uVar6);
+ iVar8 = 1;
+ break;
+ case 8:
+ uVar3 = sub_0805EF8C(token);
+ token->param = uVar3;
+ code = 0xd;
+ break;
+ case 9:
+ uVar3 = sub_0805EF8C(token);
+ token->param = uVar3;
+ code = 0xe;
+ break;
+ case 10:
+ code = 1;
+ break;
+ case 0xb:
+ code = sub_0805EF8C(token);
+ code |= 0x400;
+ break;
+ case 0xc:
+ code = sub_0805EF8C(token);
+ code |= 0x700;
+ break;
+ case 0xd:
+ code = sub_0805EF8C(token);
+ code |= 0x500;
+ break;
+ case 0xe:
+ code = sub_0805EF8C(token);
+ code |= 0x600;
+ break;
+ case 0xf:
+ code = sub_0805EF8C(token);
+ code |= 0x300;
+ break;
+ default:
+ code += 0x100;
+ break;
+ }
+ } while (iVar8);
+
+ if (code >> 8 != 0) {
+ switch (token->unk05) {
+ case 0:
+ break;
+ case 1:
+ code = sub_0805F9A0(code);
+ break;
+ }
+ token->extended = (u16)code;
+ }
+ return code;
+}
+
+u32* sub_0805F25C(u32 param_1) {
+ u32 uVar1;
+
+ uVar1 = param_1 >> 8 & 0xf;
+ param_1 = param_1 & 0xff;
+ switch (uVar1) {
+ case 0:
+ case 1:
+ if (0x7f < param_1 && gSaveHeader->language != 0) {
+ param_1 = param_1 - 0x80;
+ uVar1 = 2;
+ }
+ break;
+ case 2:
+ case 3:
+ case 4:
+ break;
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ param_1 = param_1 << 1;
+ break;
+ }
+ return gUnk_08109248[uVar1] + param_1 * 0x10;
+}
+
+WStruct* sub_0805F2C8(void) {
+ u32 uVar2;
+
+ for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) {
+ if ((gUnk_02036540[uVar2].unk00) == 0) {
+ MemClear(&gUnk_02036540[uVar2], sizeof(WStruct));
+ gUnk_02036540[uVar2].unk00 = 1;
+ return &gUnk_02036540[uVar2];
+ }
+ }
+
+ return NULL;
+}
+
+void sub_0805F300(WStruct* param_1) {
+ u32 uVar2;
+
+ for (uVar2 = 0; uVar2 < ARRAY_COUNT(gUnk_02036540); uVar2++) {
+ if (&gUnk_02036540[uVar2] == param_1) {
+ MemClear(&gUnk_02036540[uVar2], sizeof(WStruct));
+ return;
+ }
+ }
+}
+
+u32 GetFontStrWith(Token* param_1, u32 param_2) {
+ u32 character;
+ u32* puVar2;
+ u32 uVar3;
+ u32 uVar4;
+ u16 uVar5;
+ u32 rv;
+ u32 r9;
+ Token token;
+ int local_28;
+ int local_24;
+
+ MemCopy(param_1, &token, sizeof(Token));
+ local_24 = 0;
+ local_28 = 0;
+ rv = 0;
+ uVar5 = 0;
+ do {
+ uVar4 = 0;
+ r9 = 1;
+ while (r9) {
+ character = GetCharacter(&token);
+ switch (character) {
+ case 0xc:
+ uVar4 += 8;
+ break;
+ case 0xb:
+ uVar5 = token.param;
+ break;
+ case 0:
+ case 1:
+ r9 = 0;
+ break;
+ case 2 ... 10:
+ case 0xd:
+ case 0xe:
+ break;
+ default:
+ if (uVar5 == 0) {
+ puVar2 = (u32*)sub_0805F25C(character);
+ if (4 < character >> 8) {
+ uVar3 = sub_0805F7A0(puVar2[0x10]);
+ uVar4 += (uVar3 >> 8);
+ }
+ uVar3 = sub_0805F7A0(*puVar2);
+ uVar4 += (uVar3 >> 8);
+ } else if (character >> 8 >= 5) {
+ uVar4 += 0x10;
+ } else {
+ uVar4 += 8;
+ }
+ if (token.unk05 == 1 && uVar4 > 1) {
+ uVar4--;
+ }
+ }
+ }
+ if (uVar4 > rv) {
+ rv = uVar4;
+ }
+ if (uVar4 != 0) {
+ local_28++;
+ } else {
+ local_24++;
+ }
+ } while ((param_2 != 0) && (character != 0));
+
+ if (param_2 != 0) {
+ return local_24 << 0x18 | local_28 << 0x10 | rv;
+ }
+ return rv;
+}
+
+void sub_0805F440(Token* param_1, u8* param_2) {
+ MemClear(param_1, sizeof(Token));
+ if ((u32)param_2 >= 0x10000) {
+ sub_0805EF40(param_1, param_2);
+ } else {
+ sub_0805EEB4(param_1, (u32)param_2);
+ }
+}
+
+u32 sub_0805F46C(u32 param_1, Font* param_2) {
+ u32 uVar1;
+ WStruct* pWVar4;
+ u32 uVar5;
+ u16* puVar6;
+ u32 uVar7;
+ u32 uVar8;
+ u16* puVar9;
+ u32 iVar10;
+ Token token;
+ Font font;
+ u32 fontStr;
+ u32 temp2;
+ u32 temp3;
+
+ pWVar4 = sub_0805F2C8();
+ if (pWVar4 != NULL) {
+ MemCopy(param_2, &font, sizeof(Font));
+ sub_0805F440(&token, (u8*)param_1);
+ token.unk05 = font.stylized & 3;
+ pWVar4->unk04 = font.stylized;
+ pWVar4->unk4 = font.width;
+ pWVar4->unk8 = font.buffer_loc;
+ pWVar4->charColor = font._15;
+ pWVar4->bgColor = font.fill_type;
+ if (font.draw_border) {
+ sub_0805F918(font.border_type, font.fill_type, font.gfx_dest);
+ font.gfx_dest = (void*)((int)font.gfx_dest + 0xe0);
+ fontStr = GetFontStrWith(&token, 1);
+ iVar10 = (fontStr >> 0x18) * (u32)font._16 + ((u8)((int)fontStr >> 0x10) << 1);
+ uVar8 = (u16)fontStr;
+ temp3 = uVar8;
+ if (font.width < (s32)temp3) {
+ temp3 = font.width;
+ }
+ uVar8 = (temp3 + 7);
+ temp2 = ~7;
+ uVar8 = font.sm_border ? uVar8 & temp2 : font.width;
+
+ puVar9 = font.dest;
+ font.dest += 0x20;
+
+ if (font.right_align) {
+ uVar8 = (uVar8 + 0xf) & ~0xf;
+ puVar9 -= (uVar8 >> 4) + 1;
+ } else {
+ font.dest += 1;
+ }
+ uVar8 = uVar8 >> 3;
+ param_1 = font.gfx_src;
+ DispMessageFrame(puVar9, uVar8, iVar10, param_1);
+ puVar9 = puVar9 + 1;
+ font.gfx_src = font.gfx_src + 7;
+ param_1 = font.gfx_src - 1;
+ while (iVar10-- > 0) {
+ puVar9 += 0x20;
+ puVar6 = puVar9;
+ for (uVar5 = uVar8; (int)uVar5-- > 0;) {
+ *puVar6++ = param_1;
+ }
+ }
+ }
+ MemClear(&gUnk_02034330, sizeof(gUnk_02034330));
+ while ((s16)sub_0805F5CC(&font, &token, pWVar4) != 0) {}
+ sub_0805F300(pWVar4);
+ }
+ return 0;
+}
+
+bool32 sub_0805F5CC(Font* param_1, Token* param_2, WStruct* param_3) {
+ u16 uVar2;
+ u32 uVar3;
+ int iVar4;
+ u16* puVar5;
+ u32 fontStr;
+
+ uVar3 = sub_0805F8F8(param_1->fill_type);
+ MemFill32(uVar3, param_1->buffer_loc, ((param_1->width + 7) & 0x1f8) << 3);
+ fontStr = GetFontStrWith(param_2, 0);
+ param_3->unk6 = param_1->right_align ? ((8 - ((fontStr + 1) >> 1)) & 7) : 0;
+
+ puVar5 = (u16*)sub_0805F6A4(param_2, param_3);
+ if (puVar5) {
+ iVar4 = (int)(param_3->unk6 + 7) / 8;
+ puVar5 = param_1->dest;
+ if (param_1->right_align) {
+ puVar5 -= (iVar4 + 1U) >> 1;
+ }
+ param_1->gfx_src = sub_0805F67C(puVar5, param_1->gfx_src, iVar4);
+ param_1->dest += 0x40;
+ iVar4 *= 0x40;
+ MemCopy(param_1->buffer_loc, param_1->gfx_dest, iVar4);
+ param_1->gfx_dest = (void*)((int)param_1->gfx_dest + iVar4);
+ } else {
+ if (param_2->code == 10) {
+ param_1->dest += param_1->_16 * 0x20;
+ }
+ }
+ return param_2->code > 0;
+}
+
+int sub_0805F67C(short* param_1, int param_2, int param_3) {
+ for (param_3--; param_3 != -1; param_3--) {
+ param_1[0] = param_2++;
+ param_1[0x20] = param_2++;
+ param_1++;
+ }
+ return param_2;
+}
+
+u32 sub_0805F6A4(Token* param_1, WStruct* param_2) {
+ u32 uVar1;
+ u32 uVar3;
+ int iVar4;
+ u32 r7;
+
+ iVar4 = 0;
+ r7 = 1;
+ do {
+ uVar1 = GetCharacter(param_1);
+ r7 = 1;
+ switch (uVar1) {
+ case 7:
+ if (param_1->param < 0xe) {
+ param_2->charColor = param_1->param;
+ }
+ break;
+ case 0:
+ case 1:
+ r7 = 0;
+ break;
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 8:
+ case 9:
+ case 10:
+ case 0xd:
+ case 0xe:
+ break;
+
+ case 0xc:
+ uVar3 = gUnk_02034330.unk2;
+ if (uVar3 < 4) {
+ gUnk_02034330.unk2 = uVar3 + 1;
+ gUnk_02034330.unk10[uVar3] = param_1->_6;
+ gUnk_02034330.unk8[uVar3] = param_2->unk6;
+ }
+ param_2->unk6 += 8;
+ iVar4 += 8;
+ break;
+ case 0xb:
+ param_2->unk1 = param_1->param;
+ break;
+ default:
+ iVar4 += sub_0805F7DC(uVar1, param_2);
+ if ((param_1->unk05 == 1) && (1 < param_2->unk6)) {
+ iVar4--;
+ param_2->unk6 = param_2->unk6 - 1;
+ }
+ break;
+ }
+ } while (r7);
+
+ return iVar4;
+}
+
+u32 sub_0805F76C(u8* param_1, WStruct* param_2) {
+ u32 uVar1;
+ Token local_38;
+
+ sub_0805F440(&local_38, param_1);
+ local_38.unk05 = param_2->unk04 & 3;
+ uVar1 = sub_0805F6A4(&local_38, param_2);
+ return uVar1;
+}
+
+u32 sub_0805F7A0(u32 param_1) {
+ u32 uVar1;
+ u32 uVar2;
+ u32 uVar3;
+
+ uVar1 = 0xf;
+ for (uVar2 = 0; uVar2 < 8; uVar2++) {
+ if (uVar1 != (param_1 & uVar1))
+ break;
+ uVar1 <<= 4;
+ }
+ for (uVar3 = uVar2; (uVar2 < 8 && (uVar1 != (param_1 & uVar1))); uVar1 <<= 4, uVar2++) {}
+ uVar2 -= uVar3;
+ return (uVar2 << 8) | uVar3;
+}
u32 sub_0805F7DC(u32 r0, WStruct* r1) {
u32 temp;
@@ -59,6 +656,7 @@ void sub_0805F820(WStruct* r0, u32* r1) {
u8* temp;
void* temp2;
VStruct* temp3;
+ u32 temp4;
if (r0->unk4 - r0->unk6 > 0) {
sub_08002724(r1, &gUnk_02036A58);
@@ -81,11 +679,12 @@ void sub_0805F820(WStruct* r0, u32* r1) {
puVar8 = &gUnk_02036A58 + uVar6;
temp2 = r0->unk8;
- temp = gUnk_0810942E[r0->unk3].filler0[r0->unk2 * 2];
+ temp = gUnk_0810942E[r0->bgColor].filler0[r0->charColor * 2];
uVar7 = r0->unk6;
r0->unk6 += uVar3;
- if (r0->unk0 / 16 != 1) {
+ temp4 = r0->unk04;
+ if (temp4 != 1) {
while (uVar3-- > 0) {
sub_080026C4(puVar8, temp2, temp, uVar7);
puVar8++;
diff --git a/src/title.c b/src/title.c
index f9c63410..3329f80e 100644
--- a/src/title.c
+++ b/src/title.c
@@ -79,7 +79,7 @@ static const SaveFile gDemoSave = {
.name = "\x97\x7f\xdd",
.saved_status = {
.area_next = AREA_DEEPWOOD_SHRINE,
- .room_next = 0xb,
+ .room_next = ROOM_DEEPWOOD_SHRINE_ENTRANCE,
.start_pos_x = 0xa8,
.start_pos_y = 0xc8,
.layer = 1,
diff --git a/src/ui.c b/src/ui.c
index 8927154d..eb4407d8 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -124,7 +124,7 @@ void DrawUIElements(void) {
}
}
-NONMATCH("asm/non_matching/ui/sub_0801C25C.inc", void sub_0801C25C(void)) {
+void sub_0801C25C(void) {
u32 uVar1;
s32 index;
u8 tmp;
@@ -133,8 +133,8 @@ NONMATCH("asm/non_matching/ui/sub_0801C25C.inc", void sub_0801C25C(void)) {
for (index = 0; index < MAX_UI_ELEMENTS; index++) {
element = &gUnk_0200AF00.elements[index];
if (((element->used) == 1) && ((element->unk_0_1) == 1)) {
- // TODO wrong bitfield access here
- if (element->unk_0_2 == 1) {
+ u8 temp = element->unk_0_2;
+ if (temp == 1) {
element->unk_0_2 = 2;
DmaSet(3, element->firstTile, element->unk_1a * 0x20 + 0x6010000, element->numTiles << 3 | 0x84000000);
}
@@ -151,7 +151,6 @@ NONMATCH("asm/non_matching/ui/sub_0801C25C.inc", void sub_0801C25C(void)) {
sub_0801C2F0(0x126, tmp);
}
}
-END_NONMATCH
ASM_FUNC("asm/non_matching/ui/sub_0801C2F0.inc", void sub_0801C2F0(u32 a, u32 b))
@@ -354,7 +353,7 @@ u32 sub_0801CC80(UIElement* element) {
ASM_FUNC("asm/non_matching/ui/ItemUIElement.inc", void ItemUIElement())
-NONMATCH("asm/non_matching/ui/TextUIElement.inc", void TextUIElement(UIElement* element)) {
+void TextUIElement(UIElement* element) {
UIElement* buttonUIElement;
u32 tmp;
extern struct_0200AF00* ptr;
@@ -362,25 +361,27 @@ NONMATCH("asm/non_matching/ui/TextUIElement.inc", void TextUIElement(UIElement*
UIElement* ptr2;
if (element->type2 == 9) {
- if (gUnk_0200AF00.unk_2f == 0) {
+ tmp = gUnk_0200AF00.unk_2f;
+ if (tmp == 0) {
switch (gArea.field_0x18) {
case 2:
- tmp1 = 0xb;
+ tmp = 0xb;
break;
case 3:
- tmp1 = 0xa;
+ tmp = 0xa;
break;
default:
- tmp1 = gUnk_0200AF00.unk_2c;
+ tmp = gUnk_0200AF00.unk_2c;
break;
}
- gUnk_0200AF00.unk_32 = tmp1;
}
+ gUnk_0200AF00.unk_32 = tmp;
}
tmp = gUnk_0200AF00.unk_30[element->buttonElementId];
element->unk_0_1 = 0;
if (tmp != 0) {
- sub_0801CAFC(element, tmp + gUnk_080C9044[((SaveHeader*)0x2000000)->language]);
+ tmp += gUnk_080C9044[((SaveHeader*)0x2000000)->language];
+ sub_0801CAFC(element, tmp);
buttonUIElement = FindUIElement(element->buttonElementId);
if (buttonUIElement != NULL) {
element->x = buttonUIElement->x;
@@ -389,7 +390,6 @@ NONMATCH("asm/non_matching/ui/TextUIElement.inc", void TextUIElement(UIElement*
}
}
}
-END_NONMATCH
UIElement* FindUIElement(u32 type) {
UIElement* element;