mirror of
https://github.com/zeldaret/mm.git
synced 2026-07-09 13:45:23 -04:00
z_kaleido_map.c OK and Documented (Pause Menu Map Page) + related icon_item statics (dungeon/field/jpn) (#1094)
* import pause menu map page * better owl-warp docs * fix func name * missed some owlwarps * fix merge from master * fix scene region code * PR Suggestions * add comment * add description of gWorldMapImageTex, thanks @EllipticEllipsis * clearup docs * missed a comma * bad formatter, drop comment * more cleanup
This commit is contained in:
+53
-56
@@ -96,7 +96,7 @@ u32 gGsFlagsShift[] = {
|
||||
};
|
||||
|
||||
// TODO: use symbols for these icon textures once textures are properly in C
|
||||
void* gItemIcons[] = {
|
||||
TexturePtr gItemIcons[] = {
|
||||
0x08000000, // ITEM_OCARINA
|
||||
0x08001000, // ITEM_BOW
|
||||
0x08002000, // ITEM_ARROW_FIRE
|
||||
@@ -249,7 +249,7 @@ u8 gItemSlots[] = {
|
||||
SLOT_LENS, // ITEM_LENS
|
||||
SLOT_HOOKSHOT, // ITEM_HOOKSHOT
|
||||
SLOT_SWORD_GREAT_FAIRY, // ITEM_SWORD_GREAT_FAIRY
|
||||
SLOT_BOTTLE_1, //
|
||||
SLOT_BOTTLE_1, // ITEM_LONGSHOT
|
||||
SLOT_BOTTLE_1, // ITEM_BOTTLE
|
||||
SLOT_BOTTLE_1, // ITEM_POTION_RED
|
||||
SLOT_BOTTLE_1, // ITEM_POTION_GREEN
|
||||
@@ -365,8 +365,8 @@ s16 gItemPrices[] = {
|
||||
};
|
||||
|
||||
// Used to map scene indexes to their region in Termina
|
||||
u16 gSceneIdsPerRegion[11][27] = {
|
||||
// Great Bay
|
||||
u16 gSceneIdsPerRegion[REGION_MAX][27] = {
|
||||
// REGION_GREAT_BAY
|
||||
{
|
||||
SCENE_30GYOSON,
|
||||
SCENE_LABO,
|
||||
@@ -378,15 +378,15 @@ u16 gSceneIdsPerRegion[11][27] = {
|
||||
SCENE_PIRATE,
|
||||
SCENE_35TAKI,
|
||||
SCENE_KINDAN2,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Zora Hall
|
||||
// REGION_ZORA_HALL
|
||||
{
|
||||
SCENE_33ZORACITY,
|
||||
SCENE_BANDROOM,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Romani Ranch
|
||||
// REGION_ROMANI_RANCH
|
||||
{
|
||||
SCENE_F01,
|
||||
SCENE_ROMANYMAE,
|
||||
@@ -394,17 +394,17 @@ u16 gSceneIdsPerRegion[11][27] = {
|
||||
SCENE_F01C,
|
||||
SCENE_F01_B,
|
||||
SCENE_KOEPONARACE,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Deku Palace
|
||||
// REGION_DEKU_PALACE
|
||||
{
|
||||
SCENE_22DEKUCITY,
|
||||
SCENE_DEKU_KING,
|
||||
SCENE_26SARUNOMORI,
|
||||
SCENE_DANPEI,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Southern Swamp
|
||||
// REGION_WOODFALL
|
||||
{
|
||||
SCENE_20SICHITAI,
|
||||
SCENE_20SICHITAI2,
|
||||
@@ -412,21 +412,18 @@ u16 gSceneIdsPerRegion[11][27] = {
|
||||
SCENE_WITCH_SHOP,
|
||||
SCENE_21MITURINMAE,
|
||||
SCENE_KINSTA1,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Clock Town
|
||||
// REGION_CLOCK_TOWN
|
||||
{
|
||||
SCENE_00KEIKOKU, SCENE_TENMON_DAI, SCENE_13HUBUKINOMITI,
|
||||
SCENE_24KEMONOMITI, SCENE_SYATEKI_MORI, SCENE_IKANAMAE,
|
||||
SCENE_TOWN, SCENE_SYATEKI_MIZU, SCENE_BOWLING,
|
||||
SCENE_TAKARAYA, SCENE_YADOYA, SCENE_SONCHONOIE,
|
||||
SCENE_MILK_BAR, SCENE_ICHIBA, SCENE_BOMYA,
|
||||
SCENE_AYASHIISHOP, SCENE_8ITEMSHOP, SCENE_DOUJOU,
|
||||
SCENE_POSTHOUSE, SCENE_TAKARAKUJI, SCENE_BACKTOWN,
|
||||
SCENE_CLOCKTOWER, SCENE_INSIDETOWER, SCENE_OKUJOU,
|
||||
SCENE_ALLEY, SCENE_DEKUTES, -1,
|
||||
SCENE_00KEIKOKU, SCENE_TENMON_DAI, SCENE_13HUBUKINOMITI, SCENE_24KEMONOMITI, SCENE_SYATEKI_MORI,
|
||||
SCENE_IKANAMAE, SCENE_TOWN, SCENE_SYATEKI_MIZU, SCENE_BOWLING, SCENE_TAKARAYA,
|
||||
SCENE_YADOYA, SCENE_SONCHONOIE, SCENE_MILK_BAR, SCENE_ICHIBA, SCENE_BOMYA,
|
||||
SCENE_AYASHIISHOP, SCENE_8ITEMSHOP, SCENE_DOUJOU, SCENE_POSTHOUSE, SCENE_TAKARAKUJI,
|
||||
SCENE_BACKTOWN, SCENE_CLOCKTOWER, SCENE_INSIDETOWER, SCENE_OKUJOU, SCENE_ALLEY,
|
||||
SCENE_DEKUTES, 0xFFFF,
|
||||
},
|
||||
// Snowhead
|
||||
// REGION_SNOWHEAD
|
||||
{
|
||||
SCENE_10YUKIYAMANOMURA,
|
||||
SCENE_10YUKIYAMANOMURA2,
|
||||
@@ -437,15 +434,15 @@ u16 gSceneIdsPerRegion[11][27] = {
|
||||
SCENE_GORON_HAKA,
|
||||
SCENE_17SETUGEN,
|
||||
SCENE_17SETUGEN2,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Ikana Graveyard
|
||||
// REGION_IKANA_GRAVEYARD
|
||||
{
|
||||
SCENE_BOTI,
|
||||
SCENE_DANPEI2TEST,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Ikana Canyon
|
||||
// REGION_IKANA_CANYON
|
||||
{
|
||||
SCENE_CASTLE,
|
||||
SCENE_IKNINSIDE,
|
||||
@@ -456,21 +453,21 @@ u16 gSceneIdsPerRegion[11][27] = {
|
||||
SCENE_REDEAD,
|
||||
SCENE_TOUGITES,
|
||||
SCENE_HAKASHITA,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Goron Village
|
||||
// REGION_GORON_VILLAGE
|
||||
{
|
||||
SCENE_11GORONNOSATO,
|
||||
SCENE_11GORONNOSATO2,
|
||||
SCENE_16GORON_HOUSE,
|
||||
SCENE_GORONSHOP,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
// Stone Tower
|
||||
// REGION_STONE_TOWER
|
||||
{
|
||||
SCENE_F40,
|
||||
SCENE_F41,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -553,9 +550,9 @@ s32 Inventory_IsMapVisible(s16 sceneId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
static u16 sSceneIdsPerTingleMap[6][12] = {
|
||||
static u16 sSceneIdsPerTingleMap[TINGLE_MAP_MAX][12] = {
|
||||
{
|
||||
// Clock Town Tingle Map
|
||||
// TINGLE_MAP_CLOCK_TOWN
|
||||
SCENE_00KEIKOKU,
|
||||
SCENE_BOTI,
|
||||
SCENE_13HUBUKINOMITI,
|
||||
@@ -566,20 +563,20 @@ static u16 sSceneIdsPerTingleMap[6][12] = {
|
||||
SCENE_BACKTOWN,
|
||||
SCENE_CLOCKTOWER,
|
||||
SCENE_ALLEY,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
{
|
||||
// Woodfall Tingle Map
|
||||
// TINGLE_MAP_WOODFALL
|
||||
SCENE_20SICHITAI,
|
||||
SCENE_20SICHITAI2,
|
||||
SCENE_21MITURINMAE,
|
||||
SCENE_22DEKUCITY,
|
||||
SCENE_DEKU_KING,
|
||||
SCENE_KINSTA1,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
{
|
||||
// Snowhead Tingle Map
|
||||
// TINGLE_MAP_SNOWHEAD
|
||||
SCENE_10YUKIYAMANOMURA,
|
||||
SCENE_10YUKIYAMANOMURA2,
|
||||
SCENE_11GORONNOSATO,
|
||||
@@ -590,20 +587,20 @@ static u16 sSceneIdsPerTingleMap[6][12] = {
|
||||
SCENE_GORONRACE,
|
||||
SCENE_17SETUGEN,
|
||||
SCENE_17SETUGEN2,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
{
|
||||
// Romani Ranch Tingle Map
|
||||
// TINGLE_MAP_ROMANI_RANCH
|
||||
SCENE_F01,
|
||||
SCENE_ROMANYMAE,
|
||||
SCENE_OMOYA,
|
||||
SCENE_F01C,
|
||||
SCENE_F01_B,
|
||||
SCENE_KOEPONARACE,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
{
|
||||
// Great Bay Tingle Map
|
||||
// TINGLE_MAP_GREAT_BAY
|
||||
SCENE_30GYOSON,
|
||||
SCENE_SINKAI,
|
||||
SCENE_31MISAKI,
|
||||
@@ -611,28 +608,28 @@ static u16 sSceneIdsPerTingleMap[6][12] = {
|
||||
SCENE_KAIZOKU,
|
||||
SCENE_33ZORACITY,
|
||||
SCENE_35TAKI,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
{
|
||||
// Stone Tower Tingle Map
|
||||
// TINGLE_MAP_STONE_TOWER
|
||||
SCENE_F40,
|
||||
SCENE_F41,
|
||||
SCENE_CASTLE,
|
||||
SCENE_IKANA,
|
||||
SCENE_REDEAD,
|
||||
-1,
|
||||
0xFFFF,
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
* Map visibility is achieved by purchasing a tingle map
|
||||
* Removing clouds from the World Map is achieved by purchasing a tingle map
|
||||
*/
|
||||
void Inventory_SetMapVisibility(s16 tingleIndex) {
|
||||
void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) {
|
||||
s16 i = 0;
|
||||
s16 index = 0;
|
||||
u16(*tingleMapSceneIds)[] = &sSceneIdsPerTingleMap[tingleIndex];
|
||||
|
||||
if ((tingleIndex >= 0) && (tingleIndex < 6)) {
|
||||
if ((tingleIndex >= 0) && (tingleIndex < TINGLE_MAP_MAX)) {
|
||||
while (true) {
|
||||
if ((*tingleMapSceneIds)[i] == 0xFFFF) {
|
||||
break;
|
||||
@@ -665,21 +662,21 @@ void Inventory_SetMapVisibility(s16 tingleIndex) {
|
||||
}
|
||||
|
||||
if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[0]) {
|
||||
gSaveContext.save.mapsVisible |= 3;
|
||||
gSaveContext.save.worldMapCloudVisibility |= 3;
|
||||
} else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[1]) {
|
||||
gSaveContext.save.mapsVisible |= 0x1C;
|
||||
gSaveContext.save.worldMapCloudVisibility |= 0x1C;
|
||||
} else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[2]) {
|
||||
gSaveContext.save.mapsVisible |= 0xE0;
|
||||
gSaveContext.save.worldMapCloudVisibility |= 0xE0;
|
||||
} else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[3]) {
|
||||
gSaveContext.save.mapsVisible |= 0x100;
|
||||
gSaveContext.save.worldMapCloudVisibility |= 0x100;
|
||||
} else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[4]) {
|
||||
gSaveContext.save.mapsVisible |= 0x1E00;
|
||||
gSaveContext.save.worldMapCloudVisibility |= 0x1E00;
|
||||
} else if ((*tingleMapSceneIds) == sSceneIdsPerTingleMap[5]) {
|
||||
gSaveContext.save.mapsVisible |= 0x6000;
|
||||
gSaveContext.save.worldMapCloudVisibility |= 0x6000;
|
||||
}
|
||||
}
|
||||
|
||||
XREG(95) = 0;
|
||||
R_MINIMAP_DISABLED = false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,13 +23,13 @@ void Setup_SetRegs(void) {
|
||||
XREG(77) = 0x3C;
|
||||
XREG(78) = 0x2F;
|
||||
XREG(79) = 0x62;
|
||||
XREG(87) = 0;
|
||||
R_PAUSE_OWLWARP_ALPHA = 0;
|
||||
XREG(88) = 0x56;
|
||||
XREG(89) = 0x258;
|
||||
XREG(90) = 0x1C2;
|
||||
XREG(91) = 0;
|
||||
XREG(94) = 0;
|
||||
XREG(95) = 0;
|
||||
R_REVERSE_FLOOR_INDEX = 0;
|
||||
R_MINIMAP_DISABLED = false;
|
||||
|
||||
YREG(32) = 0x50;
|
||||
YREG(33) = 0x3C;
|
||||
|
||||
+4
-3
@@ -861,10 +861,11 @@ void TitleCard_Draw(GameState* gameState, TitleCardContext* titleCtx) {
|
||||
|
||||
OPEN_DISPS(gameState->gfxCtx);
|
||||
|
||||
height = (width * height > TMEM_SIZE) ? TMEM_SIZE / width : height;
|
||||
spB4 = spB8 + (height * 4);
|
||||
if (width * height > TMEM_SIZE) {
|
||||
height = TMEM_SIZE / width;
|
||||
}
|
||||
|
||||
if (1) {}
|
||||
spB4 = spB8 + (height * 4);
|
||||
|
||||
OVERLAY_DISP = func_8012C014(OVERLAY_DISP);
|
||||
|
||||
|
||||
+12
-12
@@ -22,19 +22,19 @@ void func_800F4A10(PlayState* play) {
|
||||
pauseCtx->unk_27E = -40;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(pauseCtx->worldMapPoints); i++) {
|
||||
pauseCtx->worldMapPoints[i] = 0;
|
||||
pauseCtx->worldMapPoints[i] = false;
|
||||
}
|
||||
|
||||
if (pauseCtx->state == 1) {
|
||||
for (i = 0; i < 11; i++) {
|
||||
if ((gSaveContext.save.mapsVisited >> i) & 1) {
|
||||
pauseCtx->worldMapPoints[i] = 1;
|
||||
for (i = 0; i < REGION_MAX; i++) {
|
||||
if ((gSaveContext.save.regionsVisited >> i) & 1) {
|
||||
pauseCtx->worldMapPoints[i] = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = 9; i >= 0; i--) {
|
||||
for (i = OWL_WARP_STONE_TOWER; i >= OWL_WARP_GREAT_BAY_COAST; i--) {
|
||||
if ((gSaveContext.save.playerData.owlActivationFlags >> i) & 1) {
|
||||
pauseCtx->worldMapPoints[i] = 1;
|
||||
pauseCtx->worldMapPoints[i] = true;
|
||||
pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = i;
|
||||
}
|
||||
}
|
||||
@@ -57,9 +57,9 @@ void func_800F4A10(PlayState* play) {
|
||||
YREG(21) = -0x0622;
|
||||
YREG(22) = -0x0C44;
|
||||
YREG(23) = 0x0622;
|
||||
YREG(24) = -0x0622;
|
||||
YREG(25) = -0x005A;
|
||||
YREG(26) = -0x3840;
|
||||
R_PAUSE_WORLD_MAP_YAW = -0x622;
|
||||
R_PAUSE_WORLD_MAP_Y_OFFSET = -90;
|
||||
R_PAUSE_WORLD_MAP_DEPTH = -14400;
|
||||
}
|
||||
|
||||
void KaleidoSetup_Update(PlayState* play) {
|
||||
@@ -124,18 +124,18 @@ void KaleidoSetup_Init(PlayState* play) {
|
||||
pauseCtx->unk_20C = 936.0f;
|
||||
pauseCtx->unk_220 = -314.0f;
|
||||
|
||||
pauseCtx->cursorPoint[PAUSE_MAP] = XREG(94) + 3;
|
||||
pauseCtx->cursorPoint[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
|
||||
|
||||
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_RIGHT;
|
||||
pauseCtx->pageSwitchTimer = 0;
|
||||
|
||||
pauseCtx->cursorItem[PAUSE_ITEM] = PAUSE_ITEM_NONE;
|
||||
pauseCtx->cursorItem[PAUSE_MAP] = XREG(94) + 3;
|
||||
pauseCtx->cursorItem[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
|
||||
pauseCtx->cursorItem[PAUSE_QUEST] = PAUSE_ITEM_NONE;
|
||||
pauseCtx->cursorItem[PAUSE_MASK] = PAUSE_ITEM_NONE;
|
||||
|
||||
pauseCtx->cursorSlot[PAUSE_ITEM] = 0;
|
||||
pauseCtx->cursorSlot[PAUSE_MAP] = XREG(94) + 3;
|
||||
pauseCtx->cursorSlot[PAUSE_MAP] = R_REVERSE_FLOOR_INDEX + (DUNGEON_FLOOR_INDEX_4 - 1);
|
||||
|
||||
pauseCtx->cursorColorSet = 2;
|
||||
pauseCtx->unk_2A0 = -1;
|
||||
|
||||
@@ -245,14 +245,14 @@ void Map_Update(PlayState* play) {
|
||||
if (floor != -1) {
|
||||
gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].unk_14 |=
|
||||
gBitFlags[FLOOR_INDEX_MAX - floor];
|
||||
XREG(94) = FLOOR_INDEX_MAX - floor;
|
||||
R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - floor;
|
||||
if (interfaceCtx->mapRoomNum != sLastRoomNum) {
|
||||
sLastRoomNum = interfaceCtx->mapRoomNum;
|
||||
}
|
||||
}
|
||||
} else if (Map_IsInBossArea(play)) {
|
||||
func_80105294();
|
||||
XREG(94) = FLOOR_INDEX_MAX - func_80105318();
|
||||
R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - func_80105318();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-13
@@ -256,34 +256,33 @@ void func_8014CCB4(PlayState* play, s16* decodedBufPos, s32* offset, f32* arg3)
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_message/func_8014D304.s")
|
||||
|
||||
extern u16 D_801D0188[][9];
|
||||
extern s16 D_801D0250[];
|
||||
extern u16 D_801D0188[OWL_WARP_MAX][9];
|
||||
extern s16 D_801D0250[OWL_WARP_MAX];
|
||||
|
||||
void func_8014D62C(PlayState* play, s32* arg1, f32* arg2, s16* arg3) {
|
||||
MessageContext* msgCtx = &play->msgCtx;
|
||||
PauseContext* pauseCtx = &play->pauseCtx;
|
||||
s16 temp_s6;
|
||||
s16 stringLimit;
|
||||
s16 temp_s1 = *arg3;
|
||||
s32 temp_s2 = *arg1;
|
||||
f32 sp3C = *arg2;
|
||||
s16 phi_v0;
|
||||
s16 owlWarpId;
|
||||
s16 phi_s0;
|
||||
|
||||
if ((func_8010A0A4(play) != 0) || (play->sceneId == SCENE_SECOM)) {
|
||||
phi_v0 = 0xA;
|
||||
if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) {
|
||||
owlWarpId = OWL_WARP_ENTRANCE;
|
||||
} else {
|
||||
phi_v0 = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
|
||||
owlWarpId = pauseCtx->cursorPoint[PAUSE_WORLD_MAP];
|
||||
}
|
||||
stringLimit = D_801D0250[owlWarpId];
|
||||
|
||||
temp_s6 = D_801D0250[phi_v0];
|
||||
|
||||
for (phi_s0 = 0; phi_s0 < temp_s6; phi_s0++, temp_s1++, temp_s2 += 0x80) {
|
||||
msgCtx->decodedBuffer.wchar[temp_s1] = D_801D0188[phi_v0][phi_s0];
|
||||
Font_LoadChar(play, D_801D0188[phi_v0][phi_s0], temp_s2);
|
||||
for (phi_s0 = 0; phi_s0 < stringLimit; phi_s0++, temp_s1++, temp_s2 += 0x80) {
|
||||
msgCtx->decodedBuffer.wchar[temp_s1] = D_801D0188[owlWarpId][phi_s0];
|
||||
Font_LoadChar(play, D_801D0188[owlWarpId][phi_s0], temp_s2);
|
||||
}
|
||||
|
||||
temp_s1--;
|
||||
sp3C += (temp_s6 - 1) * (16.0f * msgCtx->unk12098);
|
||||
sp3C += (stringLimit - 1) * (16.0f * msgCtx->unk12098);
|
||||
|
||||
*arg3 = temp_s1;
|
||||
*arg1 = temp_s2;
|
||||
|
||||
+38
-26
@@ -17,31 +17,43 @@ u8 D_801D06F0[4][8] = { { "rupee(s)" }, //EN
|
||||
// rupeesTextLength
|
||||
u8 D_801D0710[4] = {8,8,5,8};
|
||||
|
||||
//TextArea
|
||||
char D_801D0714[11][16] = {
|
||||
"Great Bay Coast",
|
||||
"Zora Cape",
|
||||
"Snowhead",
|
||||
"Mountain Village",
|
||||
"Clock Town",
|
||||
"Milk Road",
|
||||
"Woodfall",
|
||||
"Southern Swamp",
|
||||
"Ikana Canyon",
|
||||
"Stone Tower",
|
||||
"Entrance"
|
||||
};
|
||||
// sOwlWarpText
|
||||
char D_801D0714[OWL_WARP_MAX][16] = {
|
||||
"Great Bay Coast", // OWL_WARP_GREAT_BAY_COAST
|
||||
"Zora Cape", // OWL_WARP_ZORA_CAPE
|
||||
"Snowhead", // OWL_WARP_SNOWHEAD
|
||||
"Mountain Village", // OWL_WARP_MOUNTAIN_VILLAGE
|
||||
"Clock Town", // OWL_WARP_CLOCK_TOWN
|
||||
"Milk Road", // OWL_WARP_MILK_ROAD
|
||||
"Woodfall", // OWL_WARP_WOODFALL
|
||||
"Southern Swamp", // OWL_WARP_SOUTHERN_SWAMP
|
||||
"Ikana Canyon", // OWL_WARP_IKANA_CANYON
|
||||
"Stone Tower", // OWL_WARP_STONE_TOWER
|
||||
"Entrance", // OWL_WARP_ENTRANCE
|
||||
};
|
||||
|
||||
//TextAreaLength
|
||||
s16 D_801D07C4[11] = {15,9,8,16,10,9,8,14,12,11,8};
|
||||
// sOwlWarpTextLength
|
||||
s16 D_801D07C4[OWL_WARP_MAX] = {
|
||||
15, // OWL_WARP_GREAT_BAY_COAST
|
||||
9, // OWL_WARP_ZORA_CAPE
|
||||
8, // OWL_WARP_SNOWHEAD
|
||||
16, // OWL_WARP_MOUNTAIN_VILLAGE
|
||||
10, // OWL_WARP_CLOCK_TOWN
|
||||
9, // OWL_WARP_MILK_ROAD
|
||||
8, // OWL_WARP_WOODFALL
|
||||
14, // OWL_WARP_SOUTHERN_SWAMP
|
||||
12, // OWL_WARP_IKANA_CANYON
|
||||
11, // OWL_WARP_STONE_TOWER
|
||||
8, // OWL_WARP_ENTRANCE
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
extern f32 D_801D0470[159];
|
||||
extern u8 D_801D06F0[4][8];
|
||||
extern u8 D_801D0710[4];
|
||||
extern u8 D_801D0714[11][16];
|
||||
extern s16 D_801D07C4[11];
|
||||
extern u8 D_801D0714[OWL_WARP_MAX][16];
|
||||
extern s16 D_801D07C4[OWL_WARP_MAX];
|
||||
|
||||
void Message_FindMessageNES(PlayState* play, u16 textId) {
|
||||
MessageContext* msgCtx = &play->msgCtx;
|
||||
@@ -244,28 +256,28 @@ void Message_LoadTimeNES(PlayState* play, u8 arg1, s32* offset, f32* arg3, s16*
|
||||
*arg3 = f;
|
||||
}
|
||||
|
||||
void Message_LoadAreaTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) {
|
||||
void Message_LoadOwlWarpTextNES(PlayState* play, s32* offset, f32* arg2, s16* decodedBufPos) {
|
||||
MessageContext* msgCtx = &play->msgCtx;
|
||||
s16 p = *decodedBufPos;
|
||||
s32 o = *offset;
|
||||
f32 f = *arg2;
|
||||
s16 i;
|
||||
u8 currentChar;
|
||||
s16 currentArea;
|
||||
s16 owlWarpId;
|
||||
s16 stringLimit;
|
||||
|
||||
if ((func_8010A0A4(play) != 0) || (play->sceneId == SCENE_SECOM)) {
|
||||
currentArea = 10;
|
||||
if (func_8010A0A4(play) || (play->sceneId == SCENE_SECOM)) {
|
||||
owlWarpId = OWL_WARP_ENTRANCE;
|
||||
} else {
|
||||
currentArea = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP];
|
||||
owlWarpId = play->pauseCtx.cursorPoint[PAUSE_WORLD_MAP];
|
||||
}
|
||||
stringLimit = D_801D07C4[currentArea];
|
||||
stringLimit = D_801D07C4[owlWarpId];
|
||||
|
||||
for (i = 0; i < stringLimit; i++) {
|
||||
msgCtx->decodedBuffer.schar[p] = D_801D0714[currentArea][i];
|
||||
msgCtx->decodedBuffer.schar[p] = D_801D0714[owlWarpId][i];
|
||||
currentChar = msgCtx->decodedBuffer.schar[p];
|
||||
if (currentChar != ' ') {
|
||||
Font_LoadCharNES(play, D_801D0714[currentArea][i], o);
|
||||
Font_LoadCharNES(play, D_801D0714[owlWarpId][i], o);
|
||||
o += FONT_CHAR_TEX_SIZE;
|
||||
}
|
||||
currentChar = msgCtx->decodedBuffer.schar[p];
|
||||
|
||||
+9
-8
@@ -468,8 +468,8 @@ void Scene_HeaderCmdAltHeaderList(PlayState* play, SceneCmd* cmd) {
|
||||
|
||||
// SceneTableEntry Header Command 0x17: Cutscene List
|
||||
void Scene_HeaderCmdCutsceneList(PlayState* play, SceneCmd* cmd) {
|
||||
play->csCtx.sceneCsCount = cmd->base.data1;
|
||||
play->csCtx.sceneCsList = Lib_SegmentedToVirtual(cmd->base.data2);
|
||||
play->csCtx.sceneCsCount = cmd->cutsceneList.sceneCsCount;
|
||||
play->csCtx.sceneCsList = Lib_SegmentedToVirtual(cmd->cutsceneList.segment);
|
||||
}
|
||||
|
||||
// SceneTableEntry Header Command 0x1B: Actor Cutscene List
|
||||
@@ -492,8 +492,8 @@ void Scene_HeaderCmdMiniMapCompassInfo(PlayState* play, SceneCmd* cmd) {
|
||||
func_8010565C(play, cmd->minimapChests.num, cmd->minimapChests.segment);
|
||||
}
|
||||
|
||||
// SceneTableEntry Header Command 0x1A: Sets Area Visited Flag
|
||||
void Scene_HeaderCmdSetAreaVisitedFlag(PlayState* play, SceneCmd* cmd) {
|
||||
// SceneTableEntry Header Command 0x19: Sets Region Visited Flag
|
||||
void Scene_HeaderCmdSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) {
|
||||
s16 j = 0;
|
||||
s16 i = 0;
|
||||
|
||||
@@ -502,7 +502,7 @@ void Scene_HeaderCmdSetAreaVisitedFlag(PlayState* play, SceneCmd* cmd) {
|
||||
i++;
|
||||
j = 0;
|
||||
|
||||
if (i == ARRAY_COUNT(gSceneIdsPerRegion)) {
|
||||
if (i == REGION_MAX) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -514,8 +514,9 @@ void Scene_HeaderCmdSetAreaVisitedFlag(PlayState* play, SceneCmd* cmd) {
|
||||
j++;
|
||||
}
|
||||
|
||||
if (i < ARRAY_COUNT(gSceneIdsPerRegion)) {
|
||||
gSaveContext.save.mapsVisited = (gBitFlags[i] | gSaveContext.save.mapsVisited) | gSaveContext.save.mapsVisited;
|
||||
if (i < REGION_MAX) {
|
||||
gSaveContext.save.regionsVisited =
|
||||
(gBitFlags[i] | gSaveContext.save.regionsVisited) | gSaveContext.save.regionsVisited;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,7 +562,7 @@ s32 Scene_ProcessHeader(PlayState* play, SceneCmd* header) {
|
||||
Scene_HeaderCmdEchoSetting,
|
||||
Scene_HeaderCmdCutsceneList,
|
||||
Scene_HeaderCmdAltHeaderList,
|
||||
Scene_HeaderCmdSetAreaVisitedFlag,
|
||||
Scene_HeaderCmdSetRegionVisitedFlag,
|
||||
Scene_HeaderCmdAnimatedMaterials,
|
||||
Scene_HeaderCmdActorCutsceneList,
|
||||
Scene_HeaderCmdMiniMap,
|
||||
|
||||
Reference in New Issue
Block a user