mirror of
https://github.com/zeldaret/tmc
synced 2026-07-06 22:02:47 -04:00
aced0bef69
Now the 16x16 tiles are just called tiles and the 8x8 tiles are called subTiles.
163 lines
5.4 KiB
C
163 lines
5.4 KiB
C
/**
|
|
* @file worldEvent17.c
|
|
* @ingroup WorldEvents
|
|
*
|
|
* @brief World Event 17
|
|
*/
|
|
#include "fade.h"
|
|
#include "manager.h"
|
|
#include "menu.h"
|
|
#include "npc.h"
|
|
#include "room.h"
|
|
#include "script.h"
|
|
#include "subtask.h"
|
|
#include "manager/bombableWallManager.h"
|
|
#include "tiles.h"
|
|
|
|
// Called Goron Kinstone Fusion Script
|
|
void sub_08054EB8(Entity* this, ScriptExecutionContext* context) {
|
|
BombableWallManager* manager = (BombableWallManager*)GetEmptyManager();
|
|
if (manager != NULL) {
|
|
manager->base.kind = MANAGER;
|
|
manager->base.id = BOMBABLE_WALL_MANAGER;
|
|
manager->x = this->x.HALF.HI - gRoomControls.origin_x;
|
|
manager->y = (this->y.HALF.HI - gRoomControls.origin_y) - 0x10;
|
|
manager->layer = LAYER_BOTTOM;
|
|
#if defined(EU) || defined(JP) || defined(DEMO_JP)
|
|
manager->flag = 0x77;
|
|
#else
|
|
manager->flag = 0x79;
|
|
#endif
|
|
AppendEntityToList((Entity*)manager, 6);
|
|
}
|
|
}
|
|
|
|
void sub_08054EFC(Entity* this, ScriptExecutionContext* context) {
|
|
Entity* effect;
|
|
u32 tilePos = COORD_TO_TILE(this) - 0x40;
|
|
SetTile(SPECIAL_TILE_116, tilePos, LAYER_BOTTOM);
|
|
this->collisionLayer = LAYER_TOP;
|
|
UpdateSpriteForCollisionLayer(this);
|
|
effect = CreateFx(this, FX_BIG_EXPLOSION, 0);
|
|
if (effect != NULL) {
|
|
effect->y.HALF.HI -= 0x10;
|
|
SortEntityBelow(this, effect);
|
|
}
|
|
SoundReq(SFX_ITEM_BOMB_EXPLODE);
|
|
}
|
|
|
|
void sub_08054F64(Entity* this, ScriptExecutionContext* context) {
|
|
u32 tmp = this->type2;
|
|
if ((gActiveScriptInfo.syncFlags & tmp) != tmp) {
|
|
gActiveScriptInfo.commandSize = 0;
|
|
} else {
|
|
gActiveScriptInfo.syncFlags &= ~tmp;
|
|
gActiveScriptInfo.flags |= 1;
|
|
}
|
|
}
|
|
|
|
extern Script script_GoronKinstone;
|
|
const EntityData gUnk_080FEF48[] = {
|
|
{ NPC, 79, GORON, 0, 0, 0x88, 0x368, (u32)&script_GoronKinstone },
|
|
#if defined(USA) || defined(DEMO_USA)
|
|
// TODO 0x7c is a flag?
|
|
{ MANAGER, 15, MOVEABLE_OBJECT_MANAGER, 0, 0x10e82e00, 0xd8, 0x388, 0x7c1388 },
|
|
#else
|
|
{ MANAGER, 15, MOVEABLE_OBJECT_MANAGER, 0, 0x10e82e00, 0xd8, 0x388, 0x7a1388 },
|
|
#endif
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
extern Script script_Goron1Kinstone2;
|
|
extern Script script_Goron2Kinstone2;
|
|
const EntityData gUnk_080FEF78[] = {
|
|
{ NPC, 79, GORON, 0, 0, 0x68, 0x228, (u32)&script_Goron1Kinstone2 },
|
|
{ NPC, 79, GORON, 0, 0, 0x88, 0x288, (u32)&script_Goron2Kinstone2 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
extern Script script_Goron1Kinstone3;
|
|
extern Script script_Goron2Kinstone3;
|
|
extern Script script_Goron3Kinstone3;
|
|
const EntityData gUnk_080FEFA8[] = {
|
|
{ NPC, 79, GORON, 0, 4, 0x48, 0x178, (u32)&script_Goron1Kinstone3 },
|
|
{ NPC, 79, GORON, 0, 8, 0x68, 0x178, (u32)&script_Goron2Kinstone3 },
|
|
{ NPC, 79, GORON, 0, 2, 0x88, 0x1e8, (u32)&script_Goron3Kinstone3 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
extern Script script_Goron1Kinstone4;
|
|
extern Script script_Goron2Kinstone4;
|
|
extern Script script_Goron4Kinstone4;
|
|
const EntityData gUnk_080FEFE8[] = {
|
|
{ NPC, 79, GORON, 0, 4, 0x48, 0x178, (u32)&script_Goron1Kinstone4 },
|
|
{ NPC, 79, GORON, 0, 8, 0x68, 0x178, (u32)&script_Goron2Kinstone4 },
|
|
{ NPC, 79, GORON, 0, 16, 0x88, 0x178, (u32)&script_Goron2Kinstone4 },
|
|
{ NPC, 79, GORON, 0, 2, 0x88, 0x1e8, (u32)&script_Goron4Kinstone4 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
extern Script script_Goron1Kinstone5;
|
|
extern Script script_Goron2Kinstone5;
|
|
extern Script script_Goron5Kinstone5;
|
|
const EntityData gUnk_080FF038[] = {
|
|
{ NPC, 79, GORON, 0, 4, 0x28, 0xd8, (u32)&script_Goron1Kinstone5 },
|
|
{ NPC, 79, GORON, 0, 8, 0x48, 0xd8, (u32)&script_Goron2Kinstone5 },
|
|
{ NPC, 79, GORON, 0, 16, 0x68, 0xd8, (u32)&script_Goron2Kinstone5 },
|
|
{ NPC, 79, GORON, 0, 32, 0x88, 0xd8, (u32)&script_Goron2Kinstone5 },
|
|
{ NPC, 79, GORON, 0, 2, 0x98, 0x178, (u32)&script_Goron5Kinstone5 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
extern Script script_Goron1Kinstone6;
|
|
extern Script script_Goron2Kinstone6;
|
|
extern Script script_Goron6Kindstone6;
|
|
const EntityData gUnk_080FF098[] = {
|
|
{ NPC, 79, GORON, 0, 4, 0x28, 0xd8, (u32)&script_Goron1Kinstone6 },
|
|
{ NPC, 79, GORON, 0, 8, 0x48, 0xd8, (u32)&script_Goron2Kinstone6 },
|
|
{ NPC, 79, GORON, 0, 16, 0x68, 0xd8, (u32)&script_Goron2Kinstone6 },
|
|
{ NPC, 79, GORON, 0, 32, 0x88, 0xd8, (u32)&script_Goron2Kinstone6 },
|
|
{ NPC, 79, GORON, 0, 64, 0xa8, 0xd8, (u32)&script_Goron2Kinstone6 },
|
|
{ NPC, 79, GORON, 0, 2, 0x98, 0x178, (u32)&script_Goron6Kindstone6 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData* const gUnk_080FF108[] = {
|
|
gUnk_080FEF48, gUnk_080FEF78, gUnk_080FEFA8, gUnk_080FEFE8, gUnk_080FF038, gUnk_080FF098,
|
|
};
|
|
|
|
void WorldEvent_17_0(void);
|
|
void WorldEvent_17_1(void);
|
|
void (*const WorldEvent_17_Functions[])(void) = {
|
|
WorldEvent_17_0,
|
|
WorldEvent_17_1,
|
|
};
|
|
|
|
void WorldEvent_17(void) {
|
|
WorldEvent_17_Functions[gMenu.overlayType]();
|
|
}
|
|
|
|
void WorldEvent_17_0(void) {
|
|
u8* ptr;
|
|
u32 tmp;
|
|
|
|
ptr = gMenu.field_0xc;
|
|
LoadRoomEntityList(gUnk_080FF108[ptr[1]]);
|
|
if (ptr[1] != 0) {
|
|
tmp = 3;
|
|
} else {
|
|
tmp = 0;
|
|
}
|
|
sub_08055B70(gMenu.field_0x4, tmp, 0, 0);
|
|
gMenu.overlayType++;
|
|
gUpdateVisibleTiles = 1;
|
|
SetFade(FADE_INSTANT, 0x10);
|
|
gMenu.field_0xa = 0;
|
|
if (CheckLocalFlagByBank(FLAG_BANK_4, GORON_DOUKUTU_01_T1) && (ptr[2] == 0x2f)) {
|
|
gMenu.field_0xa = 1;
|
|
}
|
|
}
|
|
|
|
void WorldEvent_17_1(void) {
|
|
if (gMenu.field_0xa != 0) {
|
|
gMenu.field_0xa = 0;
|
|
SetTileType(TILE_TYPE_116, TILE_POS(7, 16), LAYER_BOTTOM);
|
|
}
|
|
}
|