document some dungeon map

This commit is contained in:
DizzyEggg
2025-03-07 00:26:17 +01:00
parent bfbcea5f9f
commit 7dd904a428
12 changed files with 114 additions and 106 deletions

View File

@@ -428,7 +428,7 @@ _0800E030:
bl sub_8000728
cmp r0, 0x1
bne _0800E058
bl sub_8040238
bl LoadDungeonMapPalette
movs r0, 0
movs r1, 0
bl sub_803EAF0

View File

@@ -6828,7 +6828,7 @@ _08065062:
ldr r0, [r0]
str r0, [r1]
bl sub_803E13C
bl sub_8040238
bl LoadDungeonMapPalette
_08065088:
pop {r4}
pop {r0}

20
include/dungeon_map.h Normal file
View File

@@ -0,0 +1,20 @@
#ifndef GUARD_DUNGEON_MAP_H
#define GUARD_DUNGEON_MAP_H
extern bool8 gUnknown_202EE00;
extern bool8 gShowDungeonMap;
void SetDungeonMapToNotShown(void);
void OpenDungeonMapFile(void);
void InitDungeonMap(bool8 a0);
void CloseDungeonMapFile(void);
void LoadDungeonMapPalette(void);
void sub_80402AC(s32 x, s32 y);
void sub_8040788(void);
void ShowPlayerDotOnMap(void);
void ResetMapPlayerDotFrames(void);
void sub_8040A84(void);
void sub_8040ABC(bool8 a0);
void sub_8040B60(void);
#endif

View File

@@ -348,9 +348,9 @@ struct UnkDungeonGlobal_unk1BBEC
bool8 *boolPtr;
};
struct UnkDungeonGlobal_1822C
struct DungeonMap
{
struct UnkDungeonGlobal_1822C_Sub unk1822C[UNK1822C_ARR_COUNT][UNK1822C_ARR_COUNT_2];
struct UnkDungeonGlobal_1822C_Sub dungeonMap[UNK1822C_ARR_COUNT][UNK1822C_ARR_COUNT_2];
bool8 unk1BA2C[UNK1822C_ARR_COUNT][UNK1822C_ARR_COUNT_2];
struct UnkDungeonGlobal_unk1BBEC unk1BBEC[40];
s32 unk1BDCC;
@@ -474,7 +474,7 @@ typedef struct Dungeon
/* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX];
/* 0x181E4 */ OpenedFile *paletFile;
/* 0x181E8 */ UnkDungeonGlobal_unk181E8_sub unk181e8;
/* 0x1822C */ struct UnkDungeonGlobal_1822C unk1822C;
/* 0x1822C */ struct DungeonMap dungeonMap;
/* 0x1BDD4 */ struct UnkStructDungeon1BDD4 unk1BDD4;
/* 0x1BE14 */ struct MessageLogString messageLogStrings[MESSAGE_LOG_STRINGS_COUNT];
/* 0x1C570 */ DungeonLocation unk1C570;

View File

@@ -6,6 +6,7 @@
#include "code_800E9A8.h"
#include "file_system.h"
#include "memory.h"
#include "dungeon_map.h"
EWRAM_INIT struct unkStruct_203B0CC *gUnknown_203B0CC = NULL;
@@ -19,7 +20,6 @@ extern s32 sub_800E2C0(u32);
extern s32 sub_8000728(void);
extern u32 sub_800E900(void);
extern void sub_8009BE4(void);
extern void sub_8040238(void);
extern void sub_800F204(void);
extern void sub_803EAF0(u32, u32);
extern struct unkStruct_800F18C *sub_800F18C(s32);
@@ -136,7 +136,7 @@ void sub_800DC14(s32 param_1)
if (preload->unk34 == 4) {
sub_8009BE4();
if (sub_8000728() == 1) {
sub_8040238();
LoadDungeonMapPalette();
sub_803EAF0(0,0);
sub_800CD64(0x8000,0);
}

View File

@@ -7,7 +7,7 @@
#include "code_800C9CC.h"
#include "code_80118A4.h"
#include "code_803E668.h"
#include "dungeon_map.h"
#include "bg_palette_buffer.h"
#include "bg_control.h"
#include "dungeon_music.h"
@@ -32,7 +32,6 @@ void sub_806CC10();
void sub_804522C();
void sub_803F9CC();
extern void xxx_call_update_bg_vram(void);
void sub_8040894();
void sub_803ECE0();
void sub_803EDF0();
void sub_800E90C();
@@ -82,7 +81,7 @@ void sub_803E490(u32 unused)
sub_8042E5C();
if(gUnknown_202EDD0 == 0 || gUnknown_202EDD0 == 3 || gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM)
sub_8040894();
ShowPlayerDotOnMap();
sub_803ECE0();
sub_803EDF0();

View File

@@ -9,12 +9,6 @@
#include "dungeon_music.h"
#include "file_system.h"
#include "play_time.h"
#include "cpu.h"
#include "dungeon.h"
#include "code_8009804.h"
#include "code_800E9E4.h"
#include "dungeon_util.h"
#include "code_804267C.h"
extern s32 gUnknown_80F6568[];
extern const char gUnknown_80F6604; // "zmappat"

View File

@@ -8,6 +8,7 @@
#include "code_806CD90.h"
#include "dungeon.h"
#include "dungeon_engine.h"
#include "dungeon_map.h"
#include "dungeon_leader.h"
#include "dungeon_message.h"
#include "dungeon_music.h"
@@ -22,7 +23,6 @@ extern const u32 gUnknown_80F680C[8];
extern const u16 gUnknown_80F682C[8];
extern const u8 *gPtrFeralFoundItemMessage[];
extern void sub_8040238(void);
extern void sub_804151C(Entity *pokemon, u32 r1, u8 r2);
extern void sub_804178C(u32);
extern void sub_80416A4(DungeonPos *r0, u32 r1, bool8 r2);
@@ -182,7 +182,7 @@ void sub_80426C8(u32 a0, u32 a1)
sub_803E46C(0x46);
sub_8042D7C();
sub_8040238();
LoadDungeonMapPalette();
sub_8052210(1);
}

View File

@@ -40,6 +40,7 @@
#include "constants/trap.h"
#include "dungeon_serializer.h"
#include "dungeon_config.h"
#include "dungeon_map.h"
extern void sub_800EE5C(s32);
extern void sub_800EF64(void);
@@ -255,17 +256,13 @@ extern void sub_8040094(u8 r0);
extern void sub_8068BDC(u8 r0);
extern s16 GetTurnLimit(u8 dungeon);
extern void sub_8041888(u8 param_1);
extern void sub_8040150(bool8 param_1);
extern void sub_803D4AC(void);
extern void sub_804513C(void);
extern void sub_8043CD8(void);
extern void sub_803E250(void);
extern void sub_8040130(void);
extern void sub_8040124(void);
extern void sub_803E830(void);
extern void sub_803E214(void);
extern void nullsub_56(void);
extern void sub_8040218(void);
extern void sub_8047104(void);
extern void sub_8068F28(void);
extern void sub_806C1D8(void);
@@ -415,8 +412,8 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
sub_8043CD8();
sub_80495E4();
sub_803E250();
sub_8040130();
sub_8040124();
OpenDungeonMapFile();
SetDungeonMapToNotShown();
sub_803F27C(1);
gUnknown_2026E4E = 2056;
sub_80095CC(1, 0x14);
@@ -589,7 +586,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
sub_8049840();
sub_803E178();
gDungeonBrightness = 0;
sub_8040124();
SetDungeonMapToNotShown();
sub_803EAF0(4, 0);
sub_8052210(0);
sub_803F27C(r6);
@@ -661,7 +658,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
}
sub_8040094(0);
sub_803EAF0(0, 0);
sub_8040150(r6);
InitDungeonMap(r6);
sub_8040A84();
gDungeon->unkB8 = NULL;
gDungeon->unk644.unk28 = 0;
@@ -745,7 +742,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
sub_8052740(0x4F);
}
sub_8040124();
SetDungeonMapToNotShown();
sub_803EAF0(1, 0);
gDungeon->unk181e8.unk18219 = 0;
gDungeon->unk181e8.unk18218 = 1;
@@ -915,7 +912,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
CloseDungeonPaletteFile();
sub_803E214();
nullsub_56();
sub_8040218();
CloseDungeonMapFile();
if (r8->unk7C == 1 || r8->unk7C == 4 || r8->unk7C == 2) {
sub_8047104();
}

View File

@@ -9,6 +9,7 @@
#include "dungeon_pokemon_attributes.h"
#include "dungeon_random.h"
#include "dungeon_util.h"
#include "dungeon_map.h"
#include "pokemon.h"
#include "moves.h"
#include "items.h"
@@ -76,7 +77,6 @@ bool8 sub_80701A4(Entity *a0);
void sub_80647F0(Entity *a0);
void sub_805E738(Entity *a0);
void sub_803E708(s32 a0, s32 a1);
void sub_8040A78(void);
void sub_805E804(void);
void sub_8064BE0(void);
void sub_8075680(u32);
@@ -168,7 +168,7 @@ void DungeonHandlePlayerInput(void)
}
gDungeon->unk644.unk2F = 0;
sub_8040A78();
ResetMapPlayerDotFrames();
if (gDungeon->unk1 != 0) {
gDungeon->unk1 = 0;
if (!ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) {

View File

@@ -1,4 +1,5 @@
#include "global.h"
#include "dungeon_map.h"
#include "structs/dungeon_entity.h"
#include "structs/str_dungeon.h"
#include "dungeon_map_access.h"
@@ -29,32 +30,41 @@ extern bool8 DoesNotHaveShadedMap(void);
extern const u8 gUnknown_80F65F0[];
EWRAM_DATA u8 gUnknown_202EE00 = 0;
EWRAM_DATA u8 gUnknown_202EE01 = 0;
EWRAM_DATA static u8 gUnknown_202EE02 = 0;
EWRAM_DATA static OpenedFile *gUnknown_202EE04 = NULL;
struct UnkStruct1
{
u32 **unk0;
};
struct DungeonMapGfx
{
struct UnkStruct1 *gfx;
RGB *pal;
};
EWRAM_DATA bool8 gUnknown_202EE00 = FALSE;
EWRAM_DATA bool8 gShowDungeonMap = FALSE;
EWRAM_DATA static u8 sPlayerDotFrames = 0;
EWRAM_DATA static OpenedFile *sDungeonMapGfxFile = NULL;
EWRAM_DATA static void *gUnknown_202EE08 = NULL;
void sub_8040238(void);
void sub_8040124(void)
void SetDungeonMapToNotShown(void)
{
gUnknown_202EE01 = 0;
gShowDungeonMap = FALSE;
}
void sub_8040130(void)
void OpenDungeonMapFile(void)
{
gUnknown_202EE04 = OpenFileAndGetFileDataPtr(&gUnknown_80F6604, &gDungeonFileArchive);
sDungeonMapGfxFile = OpenFileAndGetFileDataPtr(&gUnknown_80F6604, &gDungeonFileArchive);
}
void sub_8040150(bool8 a0)
void InitDungeonMap(bool8 a0)
{
s32 i, j;
for (i = 0; i < UNK1822C_ARR_COUNT; i++) {
for (j = 0; j < UNK1822C_ARR_COUNT_2; j++) {
CpuClear(&gDungeon->unk1822C.unk1822C[i][j], sizeof(struct UnkDungeonGlobal_1822C_Sub));
gDungeon->unk1822C.unk1BA2C[i][j] = FALSE;
CpuClear(&gDungeon->dungeonMap.dungeonMap[i][j], sizeof(struct UnkDungeonGlobal_1822C_Sub));
gDungeon->dungeonMap.unk1BA2C[i][j] = FALSE;
}
}
@@ -63,21 +73,21 @@ void sub_8040150(bool8 a0)
gUnknown_203B410.y = 100;
}
gDungeon->unk1822C.unk1BDCC = 0;
gDungeon->unk1822C.unk1BDD0 = 1;
gDungeon->unk1822C.unk1BDD2 = 0;
gDungeon->dungeonMap.unk1BDCC = 0;
gDungeon->dungeonMap.unk1BDD0 = 1;
gDungeon->dungeonMap.unk1BDD2 = 0;
gUnknown_202EE00 = 1;
gUnknown_202EE08 = (void *) VRAM + 0x1700;
gUnknown_202EE01 = 1;
sub_8040238();
gShowDungeonMap = TRUE;
LoadDungeonMapPalette();
}
void sub_8040218(void)
void CloseDungeonMapFile(void)
{
if (gUnknown_202EE04 != NULL) {
CloseFile(gUnknown_202EE04);
if (sDungeonMapGfxFile != NULL) {
CloseFile(sDungeonMapGfxFile);
}
sub_8040124();
SetDungeonMapToNotShown();
}
// Used in Pmd's Blue version. Stores different Vram address in gUnknown_202EE08(maybe?), depending on TOP_MAP_AND_TEAM_NO_BOTTOM map option.
@@ -86,24 +96,13 @@ UNUSED static void nullsub_203(void)
}
struct UnkStruct1
{
u32 **unk0;
};
struct UnkPaletteFileData
{
struct UnkStruct1 *unk0;
RGB *pal;
};
void sub_8040238(void)
void LoadDungeonMapPalette(void)
{
s32 i;
if (gUnknown_202EE04 == NULL)
if (sDungeonMapGfxFile == NULL)
return;
if (!gUnknown_202EE01)
if (!gShowDungeonMap)
return;
for (i = 0; i < 16; i++) {
@@ -112,8 +111,8 @@ void sub_8040238(void)
nullsub_5(238, &gFontPalette[1]);
}
else {
SetBGPaletteBufferColorArray(i + 224, &((struct UnkPaletteFileData *)(gUnknown_202EE04->data))->pal[i]);
nullsub_5(i + 224, &((struct UnkPaletteFileData *)(gUnknown_202EE04->data))->pal[i]);
SetBGPaletteBufferColorArray(i + 224, &((struct DungeonMapGfx *)(sDungeonMapGfxFile->data))->pal[i]);
nullsub_5(i + 224, &((struct DungeonMapGfx *)(sDungeonMapGfxFile->data))->pal[i]);
}
}
}
@@ -140,9 +139,9 @@ void sub_80402AC(s32 x, s32 y)
dungeon = gDungeon;
r10 = TRUE;
if (gUnknown_202EE04 == NULL)
if (sDungeonMapGfxFile == NULL)
return;
if (!gUnknown_202EE01)
if (!gShowDungeonMap)
return;
if (sub_800EC74())
return;
@@ -353,10 +352,10 @@ void sub_80402AC(s32 x, s32 y)
yDiv2 = (yMinus / 2);
r3 = x - (xDiv2 * 2);
r3 += (yMinus - (yDiv2 * 2)) * 2;
dst = dungeon->unk1822C.unk1822C[yDiv2][xDiv2].arr;
dst = dungeon->dungeonMap.dungeonMap[yDiv2][xDiv2].arr;
{
struct UnkPaletteFileData *ptr = ((struct UnkPaletteFileData *)(&gUnknown_202EE04->data));
src = ptr->unk0->unk0[r6 * 4 + r3];
struct DungeonMapGfx *ptr = ((struct DungeonMapGfx *)(&sDungeonMapGfxFile->data));
src = ptr->gfx->unk0[r6 * 4 + r3];
}
dst[0] = (dst[0] & src[0]) | src[1];
@@ -368,19 +367,19 @@ void sub_80402AC(s32 x, s32 y)
dst[6] = (dst[6] & src[12]) | src[13];
dst[7] = (dst[7] & src[14]) | src[15];
if (!dungeon->unk1822C.unk1BDD1 && !dungeon->unk1822C.unk1BA2C[yDiv2][xDiv2]) {
if (!dungeon->dungeonMap.unk1BDD1 && !dungeon->dungeonMap.unk1BA2C[yDiv2][xDiv2]) {
s32 id;
dungeon->unk1822C.unk1BA2C[yDiv2][xDiv2] = TRUE;
id = dungeon->unk1822C.unk1BDCC;
dungeon->dungeonMap.unk1BA2C[yDiv2][xDiv2] = TRUE;
id = dungeon->dungeonMap.unk1BDCC;
if (id < 40) {
dungeon->unk1822C.unk1BBEC[id].ptr1 = gUnknown_202EE08 + ((xDiv2 + yDiv2 * 28) * 32);
dungeon->unk1822C.unk1BBEC[id].ptr2 = dst;
dungeon->unk1822C.unk1BBEC[id].boolPtr = &dungeon->unk1822C.unk1BA2C[yDiv2][xDiv2];
dungeon->unk1822C.unk1BDCC++;
dungeon->dungeonMap.unk1BBEC[id].ptr1 = gUnknown_202EE08 + ((xDiv2 + yDiv2 * 28) * 32);
dungeon->dungeonMap.unk1BBEC[id].ptr2 = dst;
dungeon->dungeonMap.unk1BBEC[id].boolPtr = &dungeon->dungeonMap.unk1BA2C[yDiv2][xDiv2];
dungeon->dungeonMap.unk1BDCC++;
}
else {
dungeon->unk1822C.unk1BDD1 = 1;
dungeon->dungeonMap.unk1BDD1 = 1;
}
}
}
@@ -391,14 +390,14 @@ void sub_8040788(void)
Dungeon *dungeon = gDungeon;
if (dungeon == NULL)
return;
if (!dungeon->unk1822C.unk1BDD0)
if (!dungeon->dungeonMap.unk1BDD0)
return;
if (sub_800EC74())
return;
if (!dungeon->unk1822C.unk1BDD1) {
for (i = 0; i < dungeon->unk1822C.unk1BDCC; i++) {
struct UnkDungeonGlobal_unk1BBEC *ptr = &dungeon->unk1822C.unk1BBEC[i];
if (!dungeon->dungeonMap.unk1BDD1) {
for (i = 0; i < dungeon->dungeonMap.unk1BDCC; i++) {
struct UnkDungeonGlobal_unk1BBEC *ptr = &dungeon->dungeonMap.unk1BBEC[i];
u32 *src = ptr->ptr2;
u32 *dst = ptr->ptr1;
@@ -418,9 +417,9 @@ void sub_8040788(void)
else {
void *dst, *src;
dungeon->unk1822C.unk1BDD1 = FALSE;
dungeon->dungeonMap.unk1BDD1 = FALSE;
dst = gUnknown_202EE08;
src = dungeon->unk1822C.unk1822C[0][0].arr;
src = dungeon->dungeonMap.dungeonMap[0][0].arr;
for (i = 0; i < DUNGEON_MAX_SIZE_X * 8; i += 8) {
if (gUnknown_202EDD0 == 0 || gUnknown_202EDD0 == 3) {
@@ -429,12 +428,12 @@ void sub_8040788(void)
dst += 0x100;
src += 0x100;
}
dungeon->unk1822C.unk1BDD2 = 1;
dungeon->dungeonMap.unk1BDD2 = 1;
}
dungeon->unk1822C.unk1BDCC = 0;
dungeon->dungeonMap.unk1BDCC = 0;
}
void sub_8040894(void)
void ShowPlayerDotOnMap(void)
{
if (gDungeon->unk181e8.unk18214)
return;
@@ -442,7 +441,7 @@ void sub_8040894(void)
return;
if (gUnknown_203B410.x >= 100)
return;
if ((++gUnknown_202EE02 & 8) == 0) {
if ((++sPlayerDotFrames & 8) == 0) {
SpriteOAM sprite = {0};
SpriteSetAffine1(&sprite, 0);
@@ -472,16 +471,16 @@ void sub_8040894(void)
}
}
void sub_8040A78(void)
void ResetMapPlayerDotFrames(void)
{
gUnknown_202EE02 = 0;
sPlayerDotFrames = 0;
}
void sub_8040A84(void)
{
s32 x, y;
gDungeon->unk1822C.unk1BDD1 = TRUE;
gDungeon->dungeonMap.unk1BDD1 = TRUE;
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
@@ -533,20 +532,20 @@ void sub_8040B60(void)
{
s32 x, y;
Dungeon *dungeon = gDungeon;
if (dungeon->unk1822C.unk1BDD2) {
if (dungeon->dungeonMap.unk1BDD2) {
#ifdef BUGFIX
for (y = 0; y < UNK1822C_ARR_COUNT; y++) {
for (x = 0; x < UNK1822C_ARR_COUNT_2; x++) {
dungeon->unk1822C.unk1BA2C[y][x] = FALSE;
dungeon->dungeonMap.unk1BA2C[y][x] = FALSE;
}
}
#else
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
dungeon->unk1822C.unk1BA2C[y][x] = FALSE;
dungeon->dungeonMap.unk1BA2C[y][x] = FALSE;
}
}
#endif // BUGFIX
dungeon->unk1822C.unk1BDD2 = FALSE;
dungeon->dungeonMap.unk1BDD2 = FALSE;
}
}

View File

@@ -1,5 +1,6 @@
#include "global.h"
#include "dungeon_message.h"
#include "dungeon_map.h"
#include "dungeon.h"
#include "structs/dungeon_entity.h"
#include "code_803E46C.h"
@@ -33,7 +34,6 @@ static bool8 sub_8052DC0(Entity *);
extern bool8 sub_8045888(Entity *pokemon);
extern void sub_805E804(void);
extern void sub_803EAF0(s32, s32);
extern void sub_8040238(void);
extern void sub_8083E28(void);
extern u32 sub_8014140(s32 a0, const void *a1);
extern void sub_8083D30(void);
@@ -44,7 +44,6 @@ extern void sub_8083CE0(u8 param_1);
extern u32 gUnknown_202EDD0;
extern u8 gUnknown_203B40C;
extern u8 gUnknown_202EE01;
extern s32 gUnknown_202EDCC;
extern const u8 gUnknown_80F7AE8[];
@@ -379,8 +378,8 @@ void DisplayDungeonMessage(struct MonDialogueSpriteInfo *monSpriteInfo, const u8
if (a2) {
sub_805E804();
sub_8040238();
if (gUnknown_202EE01) {
LoadDungeonMapPalette();
if (gShowDungeonMap) {
sub_803EAF0(0, 0);
}
else {
@@ -510,7 +509,7 @@ void DisplayDungeonDialogue(const struct DungeonDialogueStruct *dialogueInfo)
}
if (dialogueInfo->unk0 != 1 && dialogueInfo->unk0 != 3) {
sub_8040238();
LoadDungeonMapPalette();
sub_803EAF0(0, 0);
}
sub_803E708(8, 9);
@@ -556,7 +555,7 @@ bool32 DisplayDungeonYesNoMessage(struct MonDialogueSpriteInfo *monSpriteInfo, c
CloseFile(monPortrait.faceFile);
}
sub_8040238();
LoadDungeonMapPalette();
sub_803EAF0(0, 0);
if (chosenMenuIndex == 1)
@@ -599,7 +598,7 @@ s32 DisplayDungeonMenuMessage(struct MonDialogueSpriteInfo *monSpriteInfo, const
CloseFile(monPortrait.faceFile);
}
sub_8040238();
LoadDungeonMapPalette();
sub_803EAF0(0, 0);
return chosenMenuIndex;
}
@@ -786,7 +785,7 @@ void sub_8052FB8(const u8 *str)
ShowWindows(NULL, TRUE, TRUE);
sub_803E46C(9);
sub_8040238();
LoadDungeonMapPalette();
for (j = 0; j < 8; j++) {
SetBGPaletteBufferColorArray(240 + j, &gFontPalette[j]);
}