From 2c680efa9169eaaddae97330fa3ea9586a273b57 Mon Sep 17 00:00:00 2001 From: mzxrules Date: Thu, 20 Jun 2024 21:21:37 -0400 Subject: z_map decompiled (#1032) * First batch of functions * more ok * z_map_data OK * More OKs, MinimapList ZAPD breaking change * func_80103A58 improvements, more OK * func_80106D5C and func_801091F0 decomped * func_801031D0 decomped and some fixes * house cleaning, more OKs more decomp * Even more OKs * func_80105C40 almost OK, more OKs * func_80108AF8 OK and more * All functions attempted * func_8010534C OK * Start documentation, rename DoorCtx * More OKs, split map_data.data, more doc * incremental clean-up, more function names * more function names * func_801068FC OK * old uncommitted changes * minor tweaks * implement easy fixes * more fixes * z_map_disp OK, implement more suggestions * delete utility program * migrate data * TransiActor ->TransitionActor * Major documentation pass * first pass of changes * warning fix attempt, revert ZFile.cpp * Fix FAKE match * Easy fixes * implement gDPLoadTextureBlock_Runtime * z_demo bss patch * Extract white square texture * Implement more suggestions * rework MapIndex/DungeonIndex * revert dungeonSceneIndex -> mapIndex in some spots, implement suggestions * more suggestions * minor nits * fix #include --- src/code/z_map_data.c | 699 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 621 insertions(+), 78 deletions(-) (limited to 'src/code/z_map_data.c') diff --git a/src/code/z_map_data.c b/src/code/z_map_data.c index a854a37e7..571613a0d 100644 --- a/src/code/z_map_data.c +++ b/src/code/z_map_data.c @@ -1,79 +1,622 @@ #include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801094A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801094C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801094F8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109528.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010954C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010956C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010958C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801095AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801095DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010960C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109630.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109650.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109670.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801096D4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109714.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109754.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801097C8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010983C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801098A0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109908.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109964.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_8010997C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801099AC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_801099DC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A00.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A20.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109A98.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109AD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109B38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109BA0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109BF4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109C38.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109CBC.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109D40.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109DD8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109E70.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109EF8.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_map_data/func_80109F78.s") +#include "z64map.h" +#include "assets/objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" + +typedef struct { + /* 0x0 */ u8 texWidth; + /* 0x1 */ u8 texHeight; + /* 0x2 */ s16 offsetX; + /* 0x4 */ s16 offsetY; + /* 0x6 */ u8 drawType; + /* 0x7 */ u8 colorIndex; + /* 0x8 */ s16 scale; +} MapSpriteInfo; // size = 0xA + +typedef struct { + /* 0x0 */ TexturePtr spriteTex; + /* 0x4 */ u8 width; + /* 0x5 */ u8 height; + /* 0x6 */ u8 offsetX; + /* 0x7 */ u8 offsetY; + /* 0x8 */ u8 drawType; + /* 0x9 */ u8 colorIndex; + /* 0xA */ s16 scale; +} MapSpriteInfo2; // size = 0xC + +static Color_RGBA8 sMapColorTable[] = { + { 255, 255, 255, 255 }, + { 0, 255, 255, 160 }, // Blue + { 100, 255, 255, 255 }, +}; + +static MapSpriteInfo2 sGameplayDangeonKeepInfo[5] = { + { gameplay_dangeon_keep_Tex_0022C8, 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0042C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0052C8, 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0032C8, 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { gameplay_dangeon_keep_Tex_0062C8, 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, +}; + +static MapSpriteInfo sMapGrandStaticInfo[98] = { + { 96, 85, 48, 42, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { 96, 85, 68, 42, MAPDATA_DRAW_0, 0, 20 }, { 96, 85, 48, 62, MAPDATA_DRAW_0, 0, 20 }, + { 96, 85, 68, 62, MAPDATA_DRAW_0, 0, 20 }, { 80, 72, 40, 35, MAPDATA_DRAW_1, 1, 52 }, + { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, + { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 49, MAPDATA_DRAW_3, 2, 20 }, + { 48, 44, 25, 23, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, + { 48, 46, 25, 24, MAPDATA_DRAW_3, 2, 20 }, { 64, 61, 32, 31, MAPDATA_DRAW_3, 2, 20 }, + { 96, 85, 49, 50, MAPDATA_DRAW_3, 2, 20 }, { 96, 85, 49, 62, MAPDATA_DRAW_3, 2, 20 }, + { 96, 85, 49, 43, MAPDATA_DRAW_3, 2, 20 }, { 48, 80, 21, 41, MAPDATA_DRAW_1, 1, 198 }, + { 32, 128, 17, 87, MAPDATA_DRAW_1, 1, 138 }, { 80, 53, 40, 27, MAPDATA_DRAW_1, 1, 54 }, + { 32, 81, 16, 15, MAPDATA_DRAW_3, 2, 20 }, { 80, 45, 35, 23, MAPDATA_DRAW_3, 2, 20 }, + { 64, 87, 36, 44, MAPDATA_DRAW_3, 2, 20 }, { 64, 51, 31, 23, MAPDATA_DRAW_3, 2, 20 }, + { 80, 79, 40, 40, MAPDATA_DRAW_3, 2, 20 }, { 96, 75, 36, 26, MAPDATA_DRAW_3, 2, 20 }, + { 48, 41, 24, 20, MAPDATA_DRAW_3, 2, 20 }, { 64, 45, 31, 20, MAPDATA_DRAW_3, 2, 20 }, + { 80, 52, 38, 28, MAPDATA_DRAW_3, 2, 20 }, { 48, 45, 23, 20, MAPDATA_DRAW_3, 2, 20 }, + { 48, 59, 25, 37, MAPDATA_DRAW_3, 2, 20 }, { 48, 60, 21, 38, MAPDATA_DRAW_3, 2, 20 }, + { 48, 81, 24, 40, MAPDATA_DRAW_3, 2, 20 }, { 48, 81, 24, 40, MAPDATA_DRAW_3, 2, 20 }, + { 80, 89, 41, 26, MAPDATA_DRAW_3, 2, 20 }, { 80, 53, 39, 26, MAPDATA_DRAW_3, 2, 20 }, + { 64, 78, 37, 36, MAPDATA_DRAW_3, 2, 20 }, { 64, 68, 33, 33, MAPDATA_DRAW_3, 2, 20 }, + { 48, 68, 23, 35, MAPDATA_DRAW_3, 2, 20 }, { 48, 36, 25, 17, MAPDATA_DRAW_3, 2, 20 }, + { 48, 25, 24, 12, MAPDATA_DRAW_3, 2, 20 }, { 64, 75, 24, 37, MAPDATA_DRAW_3, 2, 20 }, + { 32, 53, 17, 26, MAPDATA_DRAW_3, 2, 20 }, { 80, 62, 35, 27, MAPDATA_DRAW_1, 1, 105 }, + { 64, 76, 31, 31, MAPDATA_DRAW_1, 1, 133 }, { 96, 85, 47, 43, MAPDATA_DRAW_3, 2, 20 }, + { 80, 71, 48, 33, MAPDATA_DRAW_1, 1, 180 }, { 80, 87, 44, 44, MAPDATA_DRAW_1, 1, 72 }, + { 64, 65, 31, 36, MAPDATA_DRAW_1, 1, 57 }, { 48, 41, 28, 20, MAPDATA_DRAW_1, 1, 60 }, + { 64, 76, 17, 36, MAPDATA_DRAW_1, 1, 58 }, { 80, 60, 27, 22, MAPDATA_DRAW_1, 1, 83 }, + { 80, 47, 38, 23, MAPDATA_DRAW_1, 1, 69 }, { 80, 60, 40, 38, MAPDATA_DRAW_1, 1, 29 }, + { 48, 19, 17, 8, MAPDATA_DRAW_1, 1, 25 }, { 32, 99, 17, 16, MAPDATA_DRAW_1, 1, 88 }, + { 48, 69, 19, 28, MAPDATA_DRAW_1, 1, 76 }, { 48, 83, 34, 47, MAPDATA_DRAW_1, 1, 104 }, + { 80, 54, 45, 27, MAPDATA_DRAW_1, 1, 61 }, { 80, 92, 35, 50, MAPDATA_DRAW_1, 1, 60 }, + { 48, 75, 24, 37, MAPDATA_DRAW_3, 2, 20 }, { 64, 49, 32, 23, MAPDATA_DRAW_3, 2, 20 }, + { 64, 49, 25, 24, MAPDATA_DRAW_3, 2, 20 }, { 64, 52, 32, 24, MAPDATA_DRAW_3, 2, 34 }, + { 64, 49, 31, 24, MAPDATA_DRAW_3, 2, 34 }, { 32, 33, 18, 14, MAPDATA_DRAW_3, 2, 34 }, + { 48, 50, 25, 25, MAPDATA_DRAW_3, 2, 34 }, { 64, 52, 32, 25, MAPDATA_DRAW_3, 2, 34 }, + { 48, 35, 24, 18, MAPDATA_DRAW_3, 2, 34 }, { 64, 51, 32, 26, MAPDATA_DRAW_3, 2, 34 }, + { 48, 35, 24, 18, MAPDATA_DRAW_3, 2, 34 }, { 48, 53, 24, 28, MAPDATA_DRAW_3, 2, 34 }, + { 64, 53, 33, 25, MAPDATA_DRAW_3, 2, 34 }, { 64, 47, 31, 24, MAPDATA_DRAW_3, 2, 34 }, + { 64, 52, 32, 35, MAPDATA_DRAW_3, 2, 34 }, { 48, 48, 24, 23, MAPDATA_DRAW_3, 2, 34 }, + { 64, 87, 32, 26, MAPDATA_DRAW_3, 2, 34 }, { 48, 30, 24, 14, MAPDATA_DRAW_3, 2, 34 }, + { 80, 74, 40, 36, MAPDATA_DRAW_1, 1, 50 }, { 80, 87, 6, 41, MAPDATA_DRAW_1, 1, 42 }, + { 80, 56, 19, 27, MAPDATA_DRAW_1, 1, 40 }, { 80, 65, 25, 33, MAPDATA_DRAW_1, 1, 40 }, + { 16, 38, 8, 12, MAPDATA_DRAW_1, 1, 47 }, { 80, 78, 46, 33, MAPDATA_DRAW_1, 1, 142 }, + { 80, 55, 32, 29, MAPDATA_DRAW_1, 1, 155 }, { 80, 98, 67, 48, MAPDATA_DRAW_1, 1, 51 }, + { 80, 62, 47, 19, MAPDATA_DRAW_1, 1, 55 }, { 32, 123, 15, 83, MAPDATA_DRAW_1, 1, 140 }, + { 80, 60, 47, 14, MAPDATA_DRAW_1, 1, 170 }, { 48, 77, 18, 59, MAPDATA_DRAW_1, 1, 79 }, + { 80, 64, 35, 30, MAPDATA_DRAW_1, 1, 33 }, { 64, 50, 29, 22, MAPDATA_DRAW_1, 1, 40 }, + { 80, 65, 39, 5, MAPDATA_DRAW_1, 1, 37 }, { 32, 61, 8, 56, MAPDATA_DRAW_1, 1, 35 }, + { 80, 83, 37, 42, MAPDATA_DRAW_1, 1, 95 }, { 80, 27, 30, 21, MAPDATA_DRAW_1, 1, 134 }, + { 80, 23, 122, -18, MAPDATA_DRAW_1, 1, 53 }, { 80, 60, 27, 22, MAPDATA_DRAW_1, 1, 83 }, +}; + +static s32 D_801BF15C[5] = { + 0x50, 0x50, 0x8D, 0x50, 0x50, +}; + +static MapSpriteInfo sMapIStaticInfo[MAPDATA_MAP_I_MAX] = { + { 96, 85, 73, 67, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 73, 74, MAPDATA_DRAW_0, 0, 60 }, + { 96, 85, 80, 67, MAPDATA_DRAW_0, 0, 60 }, { 96, 85, 73, 67, MAPDATA_DRAW_0, 0, 60 }, + { 96, 85, 80, 74, MAPDATA_DRAW_0, 0, 60 }, { 32, 29, 17, 14, MAPDATA_DRAW_2, 0, 50 }, + { 32, 27, 16, 13, MAPDATA_DRAW_2, 0, 50 }, { 32, 30, 16, 15, MAPDATA_DRAW_2, 0, 50 }, + { 16, 32, 8, 20, MAPDATA_DRAW_2, 0, 50 }, { 16, 12, 8, 6, MAPDATA_DRAW_2, 0, 50 }, + { 32, 27, 16, 13, MAPDATA_DRAW_2, 0, 50 }, { 16, 14, 8, 7, MAPDATA_DRAW_2, 0, 50 }, + { 32, 19, 16, 9, MAPDATA_DRAW_2, 0, 50 }, { 32, 26, 16, 16, MAPDATA_DRAW_2, 0, 50 }, + { 16, 32, 8, 22, MAPDATA_DRAW_2, 0, 50 }, { 32, 27, 16, 13, MAPDATA_DRAW_2, 0, 50 }, + { 16, 35, 9, 5, MAPDATA_DRAW_2, 0, 45 }, { 32, 18, 14, 9, MAPDATA_DRAW_2, 0, 45 }, + { 32, 38, 18, 19, MAPDATA_DRAW_2, 0, 45 }, { 32, 21, 16, 9, MAPDATA_DRAW_2, 0, 45 }, + { 32, 34, 16, 17, MAPDATA_DRAW_2, 0, 45 }, { 48, 32, 19, 11, MAPDATA_DRAW_2, 0, 45 }, + { 32, 17, 16, 8, MAPDATA_DRAW_2, 0, 45 }, { 32, 17, 16, 7, MAPDATA_DRAW_2, 0, 45 }, + { 32, 21, 16, 11, MAPDATA_DRAW_2, 0, 45 }, { 32, 18, 16, 8, MAPDATA_DRAW_2, 0, 45 }, + { 16, 24, 9, 15, MAPDATA_DRAW_2, 0, 45 }, { 16, 25, 7, 16, MAPDATA_DRAW_2, 0, 45 }, + { 32, 35, 16, 17, MAPDATA_DRAW_2, 0, 45 }, { 16, 19, 5, 9, MAPDATA_DRAW_2, 0, 80 }, + { 32, 28, 17, 7, MAPDATA_DRAW_2, 0, 66 }, { 32, 16, 16, 8, MAPDATA_DRAW_2, 0, 66 }, + { 32, 24, 18, 11, MAPDATA_DRAW_2, 0, 66 }, { 32, 21, 16, 10, MAPDATA_DRAW_2, 0, 66 }, + { 16, 21, 8, 11, MAPDATA_DRAW_2, 0, 66 }, { 16, 10, 8, 4, MAPDATA_DRAW_2, 0, 66 }, + { 16, 7, 8, 3, MAPDATA_DRAW_2, 0, 66 }, { 32, 23, 13, 11, MAPDATA_DRAW_2, 0, 66 }, + { 16, 16, 8, 8, MAPDATA_DRAW_2, 0, 66 }, { 16, 17, 8, 7, MAPDATA_DRAW_2, 0, 50 }, + { 16, 23, 9, 10, MAPDATA_DRAW_2, 0, 66 }, { 16, 15, 8, 7, MAPDATA_DRAW_2, 0, 66 }, + { 32, 15, 15, 7, MAPDATA_DRAW_2, 0, 66 }, { 32, 17, 16, 8, MAPDATA_DRAW_2, 0, 90 }, + { 32, 16, 16, 8, MAPDATA_DRAW_2, 0, 90 }, { 16, 10, 8, 5, MAPDATA_DRAW_2, 0, 90 }, + { 16, 17, 8, 8, MAPDATA_DRAW_2, 0, 90 }, { 32, 17, 17, 8, MAPDATA_DRAW_2, 0, 90 }, + { 16, 11, 8, 5, MAPDATA_DRAW_2, 0, 90 }, { 32, 17, 15, 9, MAPDATA_DRAW_2, 0, 90 }, + { 16, 12, 8, 6, MAPDATA_DRAW_2, 0, 90 }, { 16, 18, 9, 9, MAPDATA_DRAW_2, 0, 90 }, + { 32, 17, 17, 8, MAPDATA_DRAW_2, 0, 90 }, { 32, 15, 16, 8, MAPDATA_DRAW_2, 0, 90 }, + { 16, 18, 9, 13, MAPDATA_DRAW_2, 0, 90 }, { 16, 16, 8, 7, MAPDATA_DRAW_2, 0, 90 }, + { 16, 30, 9, 8, MAPDATA_DRAW_2, 0, 90 }, { 16, 9, 9, 4, MAPDATA_DRAW_2, 0, 90 }, +}; + +static s32 sMapIForGameplayDangeonKeep[5] = { + 0x00, 0x01, 0x02, 0x03, 0x04, +}; + +static s32 sMapIForMapGrand[98] = { + MAPDATA_MAP_I_MAX, + 0x01, + 0x02, + 0x03, + 0x04, + MAPDATA_MAP_I_MAX, + 0x05, + 0x06, + 0x07, + 0x08, + 0x09, + 0x0A, + 0x0B, + 0x0C, + 0x0D, + 0x0E, + 0x0F, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x17, + 0x18, + 0x19, + 0x1A, + 0x1B, + 0x1C, + MAPDATA_MAP_I_MAX, + 0x1E, + 0x1F, + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + 0x27, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + 0x28, + 0x29, + 0x2A, + 0x2B, + 0x2C, + 0x2D, + 0x2E, + 0x2F, + 0x30, + 0x31, + 0x32, + 0x33, + 0x34, + 0x35, + 0x36, + 0x37, + 0x38, + 0x39, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, + MAPDATA_MAP_I_MAX, +}; + +void MapData_GetMapColor(s32 colorIndex, Color_RGBA8* color) { + *color = sMapColorTable[colorIndex]; +} + +void MapData_GetMapTexDimGameplayDangeonKeep(s32 mapId, s32* width, s32* height) { + *width = sGameplayDangeonKeepInfo[mapId].width; + *height = sGameplayDangeonKeepInfo[mapId].height; +} + +void MapData_GetMapTexOffsetGameplayDangeonKeep(s32 mapId, s32* offsetX, s32* offsetY) { + *offsetX = sGameplayDangeonKeepInfo[mapId].offsetX; + *offsetY = sGameplayDangeonKeepInfo[mapId].offsetY; +} + +void MapData_GetMapDrawTypeGameplayDangeonKeep(s32 mapId, s32* drawType) { + *drawType = sGameplayDangeonKeepInfo[mapId].drawType; +} + +u8 MapData_GetMapColorIndexGameplayDangeonKeep(s32 mapId) { + return sGameplayDangeonKeepInfo[mapId].colorIndex; +} + +s16 MapData_GetMapGameplayDangeonKeepScale(s32 mapId) { + return sGameplayDangeonKeepInfo[mapId].scale; +} + +TexturePtr MapData_GetMapTexGameplayDangeonKeep(s32 mapId) { + return sGameplayDangeonKeepInfo[mapId].spriteTex; +} + +void MapData_GetMapTexGameplayDangeonKeepDim(s32 mapId, s32* width, s32* height) { + *width = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth; + *height = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight; +} + +void MapData_GetMapTexGameplayDangeonKeepOffset(s32 mapId, s32* offsetX, s32* offsetY) { + *offsetX = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetX; + *offsetY = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].offsetY; +} + +void MapData_GetMapGrandDrawType(s32 mapId, s32* drawType) { + *drawType = sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].drawType; +} + +u8 MapData_GetMapGrandColorIndex(s32 mapId) { + return sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].colorIndex; +} + +s16 MapData_GetMapGrandScale(s32 mapId) { + return sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].scale; +} + +s32 MapData_MapGrandTexSizeTest(s32 mapId) { + s32 endMap = mapId - MAPDATA_MAP_GRAND; + s32 size = 0; + s32 i; + + for (i = 1; i < endMap + 1; i++) { + size += MapData_GetSizeOfMapGrandTex((i - 1) + MAPDATA_MAP_GRAND); + } + return size; +} + +s32 MapData_GetSizeOfMapGrandTex(s32 mapId) { + return (sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texWidth * + sMapGrandStaticInfo[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)].texHeight) / + 2; +} + +s32 MapData_MID_GetType(s32 mapId) { + if ((mapId >= 0) && (mapId < 5)) { + return MAPDATA_MID_GAMEPLAY_DANGEON_KEEP; + } + if ((mapId >= 0x100) && (mapId < 0x162)) { + return MAPDATA_MID_MAP_GRAND_STATIC; + } + return MAPDATA_MID_MAP_I_STATIC; +} + +void MapData_GetMapTexDim(s32 mapId, s32* width, s32* height) { + switch (MapData_MID_GetType(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + MapData_GetMapTexDimGameplayDangeonKeep(mapId, width, height); + return; + + case MAPDATA_MID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepDim(mapId, width, height); + return; + + default: + *width = *height = 0; + return; + } +} + +void MapData_GetMapTexOffset(s32 mapId, s32* offsetX, s32* offsetY) { + switch (MapData_MID_GetType(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + MapData_GetMapTexOffsetGameplayDangeonKeep(mapId, offsetX, offsetY); + return; + + case MAPDATA_MID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepOffset(mapId, offsetX, offsetY); + return; + + default: + *offsetX = *offsetY = 0; + return; + } +} + +void MapData_GetMapScale(s32 mapId, s32* scale) { + switch (MapData_MID_GetType(mapId)) { + default: + *scale = 0; + return; + + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + *scale = MapData_GetMapGameplayDangeonKeepScale(mapId); + return; + + case MAPDATA_MID_MAP_GRAND_STATIC: + *scale = MapData_GetMapGrandScale(mapId); + return; + } +} + +void MapData_GetDrawType(s32 mapId, s32* drawType) { + switch (MapData_MID_GetType(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + MapData_GetMapDrawTypeGameplayDangeonKeep(mapId, drawType); + return; + + case MAPDATA_MID_MAP_GRAND_STATIC: + MapData_GetMapGrandDrawType(mapId, drawType); + return; + + default: + *drawType = 0; + return; + } +} + +s32 MapData_GetMapColorIndex(s32 mapId) { + switch (MapData_MID_GetType(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + return MapData_GetMapColorIndexGameplayDangeonKeep(mapId); + + case MAPDATA_MID_MAP_GRAND_STATIC: + return MapData_GetMapGrandColorIndex(mapId); + + default: + return 0; + } +} + +s32 func_80109964(s32 arg0) { + return D_801BF15C[arg0]; +} + +void MapData_GetMapITexDim(s32 mapId, s32* width, s32* height) { + *width = sMapIStaticInfo[mapId].texWidth; + *height = sMapIStaticInfo[mapId].texHeight; +} + +void MapData_GetMapITexOffset(s32 mapId, s32* offsetX, s32* offsetY) { + *offsetX = sMapIStaticInfo[mapId].offsetX; + *offsetY = sMapIStaticInfo[mapId].offsetY; +} + +void MapData_GetMapIDrawType(s32 mapId, s32* drawType) { + *drawType = sMapIStaticInfo[mapId].drawType; +} + +u8 MapData_GetMapIColorIndex(s32 mapId) { + return sMapIStaticInfo[mapId].colorIndex; +} + +s16 MapData_GetMapIScale(s32 mapId) { + return sMapIStaticInfo[mapId].scale; +} + +s32 MapData_MapITexSizeTest(s32 mapId) { + s32 i; + s32 size = 0; + + for (i = 1; i < mapId + 1; i++) { + size += MapDisp_GetSizeOfMapITex(i - 1); + } + + return size; +} + +s32 MapDisp_GetSizeOfMapITex(s32 mapCompactId) { + return (sMapIStaticInfo[mapCompactId].texWidth * sMapIStaticInfo[mapCompactId].texHeight) / 2; +} + +s32 MapData_GetMapIId(s32 mapId) { + switch (MapData_MID_GetType(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + return sMapIForGameplayDangeonKeep[mapId]; + + case MAPDATA_MID_MAP_GRAND_STATIC: + return sMapIForMapGrand[MAPDATA_GET_MAP_GRAND_ID_FROM_MAP_ID(mapId)]; + + default: + return 0; + } +} + +s32 func_80109B38(s32 mapId) { + if (MapData_GetMapIId(mapId) != MAPDATA_MAP_I_MAX) { + return 1; + } + switch (MapData_MID_GetType(mapId)) { + case MAPDATA_MID_GAMEPLAY_DANGEON_KEEP: + return 2; + + case MAPDATA_MID_MAP_GRAND_STATIC: + return 0; + + default: + return 0; + } +} + +s32 MapData_GetMapCompactId(s32 mapId) { + s32 mapI = MapData_GetMapIId(mapId); + + if (mapI != MAPDATA_MAP_I_MAX) { + return mapI; + } + if ((mapId >= 0x100) && (mapId < 0x162)) { + return mapId - 0xC6; + } + return -1; +} + +s32 MapData_CPID_GetType(s32 mapCompactId) { + if (mapCompactId == -1) { + return MAPDATA_CPID_2; + } + if (mapCompactId < MAPDATA_MAP_I_MAX) { + return MAPDATA_CPID_MAP_I_STATIC; + } + if (mapCompactId >= MAPDATA_MAP_I_MAX) { + return MAPDATA_CPID_MAP_GRAND_STATIC; + } + return MAPDATA_CPID_2; +} + +// Unused +s32 func_80109C38(s32 mapCompactId) { + if (mapCompactId == -1) { + return 0; + } + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_MapGrandTexSizeTest(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + + case MAPDATA_CPID_MAP_I_STATIC: + return MapData_MapITexSizeTest(mapCompactId); + + case MAPDATA_CPID_2: + return 0; + + default: + return 0; + } +} + +s32 MapData_CPID_GetSizeOfMapTex(s32 mapCompactId) { + if (mapCompactId == -1) { + return 0; + } + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_GetSizeOfMapGrandTex(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + + case MAPDATA_CPID_MAP_I_STATIC: + return MapDisp_GetSizeOfMapITex(mapCompactId); + + case MAPDATA_CPID_2: + return 0; + + default: + return 0; + } +} + +void MapData_CPID_GetTexDim(s32 mapCompactId, s32* width, s32* height) { + if (mapCompactId == -1) { + *width = *height = 0; + return; + } + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepDim(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), width, + height); + return; + + case MAPDATA_CPID_MAP_I_STATIC: + MapData_GetMapITexDim(mapCompactId, width, height); + return; + + case MAPDATA_CPID_2: + default: + *width = *height = 0; + return; + } +} + +void MapData_CPID_GetTexOffset(s32 mapCompactId, s32* offsetX, s32* offsetY) { + if (mapCompactId == -1) { + *offsetX = *offsetY = 0; + return; + } + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + MapData_GetMapTexGameplayDangeonKeepOffset(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), offsetX, + offsetY); + return; + + case MAPDATA_CPID_MAP_I_STATIC: + MapData_GetMapITexOffset(mapCompactId, offsetX, offsetY); + return; + + case MAPDATA_CPID_2: + default: + *offsetX = *offsetY = 0; + return; + } +} + +// Unused +void MapData_CPID_GetDrawType(s32 mapCompactId, s32* drawType) { + if (mapCompactId == -1) { + *drawType = MAPDATA_DRAW_0; + return; + } + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + MapData_GetMapGrandDrawType(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId), drawType); + return; + + case MAPDATA_CPID_MAP_I_STATIC: + MapData_GetMapIDrawType(mapCompactId, drawType); + return; + + case MAPDATA_CPID_2: + default: + *drawType = MAPDATA_DRAW_0; + return; + } +} + +// Unused +u8 MapData_CPID_GetMapColorIndex(s32 mapCompactId) { + if (mapCompactId == -1) { + return 0; + } + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_GetMapGrandColorIndex(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + + case MAPDATA_CPID_MAP_I_STATIC: + return MapData_GetMapIColorIndex(mapCompactId); + + case MAPDATA_CPID_2: + default: + return 0; + } +} + +s16 MapData_CPID_GetMapScale(s32 mapCompactId) { + if (mapCompactId == -1) { + return 0; + } + switch (MapData_CPID_GetType(mapCompactId)) { + case MAPDATA_CPID_MAP_GRAND_STATIC: + return MapData_GetMapGrandScale(MAPDATA_GET_MAP_GRAND_ID_FROM_COMPACT_ID(mapCompactId)); + + case MAPDATA_CPID_MAP_I_STATIC: + return MapData_GetMapIScale(mapCompactId); + + case MAPDATA_CPID_2: + default: + return 0; + } +} -- cgit v1.2.3