Document the CloseBattlePikeCurtain special

This commit is contained in:
sphericalice 2021-10-25 18:03:14 +01:00
parent 3834cc2957
commit 120e75d275
3 changed files with 29 additions and 11 deletions

View File

@ -352,6 +352,7 @@
#define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297 #define METATILE_InsideShip_IntactDoor_Bottom_Interior 0x297
// gTileset_BattlePike // gTileset_BattlePike
#define METATILE_BattlePike_CurtainFrames_Start 0x201
#define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A #define METATILE_BattlePike_Curtain_Stage0_Tile0 0x24A
#define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251 #define METATILE_BattlePike_Curtain_Stage0_Tile1 0x251
#define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252 #define METATILE_BattlePike_Curtain_Stage0_Tile2 0x252

View File

@ -36,6 +36,11 @@ struct Tileset
/*0x14*/ TilesetCB callback; /*0x14*/ TilesetCB callback;
}; };
// Tilesets do not actually have s strict width.
// This constant is simply used for the offset between rows of metatiles for
// large tiles, such as the Battle Pike's curtain tile.
#define TILESET_WIDTH 8
struct MapLayout struct MapLayout
{ {
/*0x00*/ s32 width; /*0x00*/ s32 width;

View File

@ -3931,13 +3931,18 @@ static void Task_LoopWingFlapSE(u8 taskId)
#undef playCount #undef playCount
#undef delay #undef delay
#define CURTAIN_HEIGHT 4
#define CURTAIN_WIDTH 3
#define tFrameTimer data
#define tCurrentFrame data[3]
void CloseBattlePikeCurtain(void) void CloseBattlePikeCurtain(void)
{ {
u8 taskId = CreateTask(Task_CloseBattlePikeCurtain, 8); u8 taskId = CreateTask(Task_CloseBattlePikeCurtain, 8);
gTasks[taskId].data[0] = 4; gTasks[taskId].tFrameTimer[0] = 4;
gTasks[taskId].data[1] = 4; gTasks[taskId].tFrameTimer[1] = 4;
gTasks[taskId].data[2] = 4; gTasks[taskId].tFrameTimer[2] = 4;
gTasks[taskId].data[3] = 0; gTasks[taskId].tCurrentFrame = 0;
} }
static void Task_CloseBattlePikeCurtain(u8 taskId) static void Task_CloseBattlePikeCurtain(u8 taskId)
@ -3945,19 +3950,21 @@ static void Task_CloseBattlePikeCurtain(u8 taskId)
u8 x, y; u8 x, y;
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;
data[data[3]]--; tFrameTimer[tCurrentFrame]--;
if (data[data[3]] == 0) if (tFrameTimer[tCurrentFrame] == 0)
{ {
for (y = 0; y < 4; y++) for (y = 0; y < CURTAIN_HEIGHT; y++)
{ {
for (x = 0; x < 3; x++) for (x = 0; x < CURTAIN_WIDTH; x++)
{ {
MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + 6, gSaveBlock1Ptr->pos.y + y + 4, x + 513 + y * 8 + data[3] * 32); MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + MAP_OFFSET - 1,
gSaveBlock1Ptr->pos.y + y + MAP_OFFSET - 3,
(x + METATILE_BattlePike_CurtainFrames_Start) + (y * TILESET_WIDTH) + (tCurrentFrame * CURTAIN_HEIGHT * TILESET_WIDTH));
} }
} }
DrawWholeMapView(); DrawWholeMapView();
data[3]++; tCurrentFrame++;
if (data[3] == 3) if (tCurrentFrame == 3)
{ {
DestroyTask(taskId); DestroyTask(taskId);
EnableBothScriptContexts(); EnableBothScriptContexts();
@ -3965,6 +3972,11 @@ static void Task_CloseBattlePikeCurtain(u8 taskId)
} }
} }
#undef CURTAIN_HEIGHT
#undef CURTAIN_WIDTH
#undef tFrameTimer
#undef tCurrentFrame
void GetBattlePyramidHint(void) void GetBattlePyramidHint(void)
{ {
gSpecialVar_Result = gSpecialVar_0x8004 / 7; gSpecialVar_Result = gSpecialVar_0x8004 / 7;