dungeon map documentation done

This commit is contained in:
DizzyEggg 2025-03-07 14:35:34 +01:00
parent ce798ff03e
commit 4734201c6d
35 changed files with 297 additions and 267 deletions

View File

@ -111,7 +111,7 @@ _0800070C: .4byte gLoadScreenBackgroundPaletteFileNames
_08000710: .4byte 0x00005b20
_08000714: .4byte gTitleMenuFileArchive
_08000718: .4byte gTitlePaletteFile
_0800071C: .4byte gUnknown_202B038
_0800071C: .4byte gBgTilemaps
_08000720: .4byte 0x06008000
_08000724: .4byte 0x00004b20
thumb_func_end LoadTitleScreen

View File

@ -142,7 +142,7 @@ _08009B6E:
adds r4, r1, 0
b _08009B82
.align 2, 0
_08009B74: .4byte gUnknown_202B038
_08009B74: .4byte gBgTilemaps
_08009B78: .4byte gUnknown_202D2A0
_08009B7C: .4byte 0x000003ff
_08009B80:
@ -264,6 +264,6 @@ _08009C36:
bx r0
.align 2, 0
_08009C54: .4byte gUnknown_202D2A0
_08009C58: .4byte gUnknown_202B038
_08009C58: .4byte gBgTilemaps
thumb_func_end sub_8009BE4

View File

@ -1108,7 +1108,7 @@ _08046644:
mov r4, sp
movs r2, 0x2
ldrsh r1, [r4, r2]
bl sub_80402AC
bl ShowDungeonMapAtPos
mov r0, sp
movs r3, 0
ldrsh r0, [r0, r3]

View File

@ -6426,7 +6426,7 @@ _08064D36:
bne _08064D4C
b _08064C14
_08064D4C:
bl sub_8040A84
bl ShowWholeRevealedDungeonMap
movs r0, 0
movs r1, 0
bl sub_803EAF0

View File

@ -917,7 +917,7 @@ _08069018:
ldrsh r0, [r2, r3]
movs r3, 0x6
ldrsh r1, [r2, r3]
bl sub_80402AC
bl ShowDungeonMapAtPos
movs r5, 0
adds r6, r7, 0
adds r6, 0xC8

View File

@ -107,7 +107,7 @@ _080A2BFC: .4byte 0x0000052c
_080A2C00: .4byte 0x00000534
_080A2C04: .4byte 0x00000554
_080A2C08: .4byte 0x00000536
_080A2C0C: .4byte gUnknown_202B038
_080A2C0C: .4byte gBgTilemaps
_080A2C10: .4byte 0x0000053c
_080A2C14: .4byte 0x0000054c
_080A2C18: .4byte 0x0000053a

View File

@ -1,7 +1,7 @@
#ifndef GUARD_DUNGEON_MAP_H
#define GUARD_DUNGEON_MAP_H
extern bool8 gUnknown_202EE00;
extern bool8 gShowMonsterDotsInDungeonMap;
extern bool8 gShowDungeonMap;
void SetDungeonMapToNotShown(void);
@ -9,12 +9,12 @@ 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 ShowDungeonMapAtPos(s32 x, s32 y);
void CopyDungeonMapToVram(void);
void ShowPlayerDotOnMap(void);
void ResetMapPlayerDotFrames(void);
void sub_8040A84(void);
void sub_8040ABC(bool8 a0);
void sub_8040B60(void);
void ShowWholeRevealedDungeonMap(void);
void UpdateBgTilemapForDungeonMap(bool8 a0);
void TryResetDungeonMapTilesScheduledForCopy(void);
#endif

View File

@ -52,6 +52,9 @@ enum SpawnFlags
SPAWN_FLAG_UNK7 = 1 << 7, // 0x80 - Not fully understood field. In the dungeon algorithm, it is set to true for all tiles in a Divider secondary structure room.
};
#define VISIBILITY_FLAG_REVEALED 1 // When using Luminous Orb - whole layout is shown, but grayed-out
#define VISIBILITY_FLAG_VISITED 2 // Tile was visited, show filled/white layout
// size: 0x18
typedef struct Tile
{

View File

@ -82,7 +82,7 @@ typedef struct UnkDungeonGlobal_unk181E8_sub
u8 priority; // x20
/* 0x18209 */ u8 visibilityRange; // x21 Dungeon light level.
/* 0x1820A */ bool8 blinded; // x22 Blacks out the screen when the player has the Blinker status.
bool8 unk1820B; // x23
bool8 allTilesRevealed; // x23
bool8 unk1820C; // x24
bool8 unk1820D; // x25
bool8 showAllFloorItems; // x26
@ -338,25 +338,27 @@ struct UnkDungeonGlobal_1822C_Sub
u32 arr[8];
};
#define UNK1822C_ARR_COUNT (DUNGEON_MAX_SIZE_Y / 2)
#define UNK1822C_ARR_COUNT_2 (DUNGEON_MAX_SIZE_X / 2)
#define DUNGEON_MAP_MAX_Y (DUNGEON_MAX_SIZE_Y / 2)
#define DUNGEON_MAP_MAX_X (DUNGEON_MAX_SIZE_X / 2)
struct UnkDungeonGlobal_unk1BBEC
struct DungeonMapVramCopy
{
u32 *ptr1;
u32 *ptr2;
u32 *vramPtr;
u32 *mapArrayPtr;
bool8 *boolPtr;
};
#define MAX_SCHEDULED_DUNGEON_MAP_COPIES 40
struct DungeonMap
{
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;
u8 unk1BDD0;
u8 unk1BDD1;
u8 unk1BDD2;
struct UnkDungeonGlobal_1822C_Sub perTile[DUNGEON_MAP_MAX_Y][DUNGEON_MAP_MAX_X];
bool8 tileScheduledForCopy[DUNGEON_MAP_MAX_Y][DUNGEON_MAP_MAX_X];
struct DungeonMapVramCopy vramCopies[MAX_SCHEDULED_DUNGEON_MAP_COPIES];
s32 scheduledVramCopiesCount;
bool8 copyToVram;
bool8 copyAllAtOnce;
bool8 resetTilesScheduledForCopy;
};
// size: 0x1CEDC

View File

@ -52,7 +52,13 @@ struct UnkDrawStringStruct
extern UnkTextStruct1 gUnknown_2027370[4];
extern u8 gUnknown_202749A[11];
extern bool8 gUnknown_20274A5;
extern u16 gUnknown_202B038[4][32][32]; // Usage points to these dimensions
// These should probably go to code_8009804.h
#define TILEMAP_TILE_NUM(num)(num & 0x3FF) // bits 0-9
#define TILEMAP_FLIP_HORIZONTAL(f)((f & 1) << 10) // bit 10
#define TILEMAP_FLIP_VERTICAL(f)((f & 1) << 11) // bit 11
#define TILEMAP_PAL(pal)((pal & 0xF) << 12) // bits 12-15
extern u16 gBgTilemaps[4][32][32]; // 4 bgs, 32x32 tiles, y dimension goes before x [bgId][y][x]
extern void (*gIwramTextFunc1)(s32 a0);
extern void (*gIwramTextFunc2)(s32 a0);
extern void (*gIwramTextFunc3)(s32 a0);

View File

@ -123,26 +123,26 @@ void sub_8009908(void)
gUnknown_202D23C = 0;
if (gUnknown_202D238[0] != 0) {
gUnknown_202D238[0] = 0;
CpuCopy(BG_SCREEN_ADDR(12), gUnknown_202B038[0], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(12), gBgTilemaps[0], BG_SCREEN_SIZE);
}
if (gUnknown_202D238[1] != 0) {
gUnknown_202D238[1] = 0;
CpuCopy(BG_SCREEN_ADDR(13), gUnknown_202B038[1], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(13), gBgTilemaps[1], BG_SCREEN_SIZE);
}
if (gUnknown_202D238[2] != 0) {
gUnknown_202D238[2] = 0;
CpuCopy(BG_SCREEN_ADDR(14), gUnknown_202B038[2], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(14), gBgTilemaps[2], BG_SCREEN_SIZE);
}
if (gUnknown_202D238[3] != 0) {
gUnknown_202D238[3] = 0;
CpuCopy(BG_SCREEN_ADDR(15), gUnknown_202B038[3], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(15), gBgTilemaps[3], BG_SCREEN_SIZE);
}
}
void sub_80099C0(void)
{
CpuCopy(BG_SCREEN_ADDR(12), gUnknown_202B038[0], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(13), gUnknown_202B038[1], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(12), gBgTilemaps[0], BG_SCREEN_SIZE);
CpuCopy(BG_SCREEN_ADDR(13), gBgTilemaps[1], BG_SCREEN_SIZE);
}
void SetFontsBaseColor(RGB a0)

View File

@ -36,8 +36,6 @@ void sub_803ECE0();
void sub_803EDF0();
void sub_800E90C();
void sub_8042E5C();
void sub_8040B60();
void sub_8040788();
void sub_800F7D0(DungeonPos *);
void sub_803E874(s32, s32);
void sub_803EAF0(s32, s32);
@ -107,13 +105,13 @@ void sub_803E490(u32 unused)
TransferBGPaletteBuffer();
sub_8009908();
xxx_call_update_bg_vram();
sub_8040788();
CopyDungeonMapToVram();
xxx_call_update_bg_sound_input();
gDungeon->unk181e8.unk18213 = 0;
UpdateDungeonMusic();
sub_8011860();
sub_8040B60();
TryResetDungeonMapTilesScheduledForCopy();
ResetSprites(FALSE);
nullsub_10(FALSE);
gUnknown_202EDD4--;

View File

@ -14,6 +14,7 @@
#include "dungeon_map_access.h"
#include "sprite.h"
#include "bg_control.h"
#include "dungeon_map.h"
#include "game_options.h"
#include "code_800558C.h"
#include "dungeon_range.h"
@ -54,15 +55,14 @@ extern u8 gUnknown_20274A5;
extern s32 gUnknown_202EDCC;
extern void sub_8040A84();
extern void ShowWholeRevealedDungeonMap();
extern void sub_8083D44(void);
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
extern void sub_80400D4(void);
extern void sub_8041888(u8 param_1);
extern void sub_80402AC(s32, s32);
extern void ShowDungeonMapAtPos(s32, s32);
void sub_803EC94(void);
void sub_8040ABC(u8 a0);
s32 sub_803EF90(s32 a0, u8 a1);
void sub_803F580(u8 a0);
void sub_803F7BC(void);
@ -279,14 +279,14 @@ void sub_803EAF0(u32 a0, u8 *a1)
sub_803EC94();
ShowWindows(NULL, TRUE, TRUE);
if (gUnknown_203B40C != 0) {
sub_8040A84();
sub_8040ABC(0);
ShowWholeRevealedDungeonMap();
UpdateBgTilemapForDungeonMap(FALSE);
}
break;
case 3:
ShowWindows(&gUnknown_80F62B0, TRUE, TRUE);
if (gUnknown_203B40C != 0) {
sub_8040ABC(1);
UpdateBgTilemapForDungeonMap(TRUE);
}
break;
case 6:
@ -690,7 +690,7 @@ void sub_803F27C(bool8 a0)
strPtr->unk1820D = FALSE;
strPtr->unk18211 = 0;
strPtr->showAllFloorItems = FALSE;
strPtr->unk1820B = 0;
strPtr->allTilesRevealed = 0;
strPtr->unk1820C = 0;
}
@ -742,7 +742,7 @@ bool8 sub_803F428(DungeonPos *pos)
Entity *cameraEntity = strPtr->cameraTarget;
if (abs(strPtr->cameraPos.x - pos->x) <= 6 && abs(strPtr->cameraPos.y - pos->y) <= 5) {
if (strPtr->unk1820B == 0 && strPtr->unk1820C == 0 && cameraEntity != NULL) {
if (strPtr->allTilesRevealed == 0 && strPtr->unk1820C == 0 && cameraEntity != NULL) {
return IsPositionActuallyInSight(&strPtr->cameraPos, pos);
}
return TRUE;
@ -795,7 +795,7 @@ void sub_803F508(Entity *a0)
sub_806CD90();
}
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
void sub_803F580(u8 a0)
@ -875,7 +875,7 @@ void sub_803F580(u8 a0)
if (before != strPtr->showInvisibleTrapsMonsters) {
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
sub_8041888(0);
}
@ -905,7 +905,7 @@ void sub_803F580(u8 a0)
for (i = 0; i < DUNGEON_MAX_POKEMON; i++) {
Entity *mon = gDungeon->activePokemon[i];
if (EntityIsValid(mon)) {
sub_80402AC(mon->pos.x, mon->pos.y);
ShowDungeonMapAtPos(mon->pos.x, mon->pos.y);
}
}
}
@ -921,7 +921,7 @@ void sub_803F7BC(void)
const Tile *tile = GetTile(strPtr->cameraPos.x, strPtr->cameraPos.y);
u32 roomId = tile->room;
if (strPtr->unk1820B != 0 || strPtr->unk1820C != 0 || strPtr->unk18217 != 0) {
if (strPtr->allTilesRevealed != 0 || strPtr->unk1820C != 0 || strPtr->unk18217 != 0) {
sub_8005838(NULL, 0);
}
else if (roomId == CORRIDOR_ROOM) {
@ -1010,7 +1010,7 @@ void sub_803F9CC(void)
if (!r5) {
for (i = 1; i < 30; i++) {
gUnknown_202B038[0][0][i] = 0;
gBgTilemaps[0][0][i] = 0;
}
sub_803F38C();
}
@ -1151,7 +1151,7 @@ void sub_803FB74(void)
nullsub_5(0xFF, &gFontPalette[15 + r6]);
}
arrPtr = gUnknown_202B038[0][0];
arrPtr = gBgTilemaps[0][0];
unkFloor = gDungeon->unk14 + gDungeon->unk644.dungeonLocation.floor;
if (strPtr->unk3A != unkFloor) {
strPtr->unk3A = unkFloor;
@ -1203,7 +1203,7 @@ void sub_803FB74(void)
}
for (i = 0; i < 12; i++) {
gUnknown_202B038[0][0][18 + i] = (0x2CC + i) | 0xF000;
gBgTilemaps[0][0][18 + i] = (0x2CC + i) | 0xF000;
}
}

View File

@ -17,7 +17,7 @@ extern struct FileArchive gDungeonFileArchive;
extern void sub_803F7BC(void);
extern void sub_803F580(u32);
extern void sub_8040A84();
extern void ShowWholeRevealedDungeonMap();
extern const char *gUnknown_80FD040; // It became brighter on the floor
@ -27,19 +27,19 @@ void HandleLuminousOrbAction(Entity *pokemon)
int XCoord;
int YCoord;
gDungeon->unk181e8.unk1820B = 1;
gDungeon->unk181e8.allTilesRevealed = TRUE;
for(YCoord = 0; YCoord < DUNGEON_MAX_SIZE_Y; YCoord++)
{
for(XCoord = 0; XCoord < DUNGEON_MAX_SIZE_X; XCoord++)
{
Tile *mapTile = GetTileMut(XCoord, YCoord);
mapTile->spawnOrVisibilityFlags |= 1;
mapTile->spawnOrVisibilityFlags |= VISIBILITY_FLAG_REVEALED;
}
}
sub_803F580(0);
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
LogMessageByIdWithPopupCheckUser(pokemon, gUnknown_80FD040);
}

View File

@ -288,7 +288,7 @@ extern void sub_8071DA4(Entity *);
extern void sub_803E748(void);
extern void sub_8083D68(void);
extern void sub_803E7C8(void);
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
extern void sub_807E5AC(void);
extern void TriggerWeatherAbilities(void);
extern void sub_807E88C(void);
@ -432,7 +432,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
}
if (!r6) {
gDungeon->unk181e8.unk1820B = 1;
gDungeon->unk181e8.allTilesRevealed = 1;
gDungeon->unk181e8.unk1820C = 1;
if (gDungeon->unk644.unk34 == 1) {
gDungeon->unk644.dungeonLocation.id = r8->unk14.unk0;
@ -659,7 +659,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
sub_8040094(0);
sub_803EAF0(0, 0);
InitDungeonMap(r6);
sub_8040A84();
ShowWholeRevealedDungeonMap();
gDungeon->unkB8 = NULL;
gDungeon->unk644.unk28 = 0;
gDungeon->unk644.unk29 = 0;
@ -683,7 +683,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
}
else {
sub_803F4A0(GetLeader());
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
}

View File

@ -220,7 +220,7 @@ bool8 sub_8045804(Entity *ent)
if (!saveTyping->showInvisibleTrapsMonsters && monInfo->invisibleClassStatus.status == STATUS_INVISIBLE)
return FALSE;
if (saveTyping->unk1820B || saveTyping->unk1820D)
if (saveTyping->allTilesRevealed || saveTyping->unk1820D)
return TRUE;
if (camTarget != NULL)

View File

@ -81,7 +81,7 @@ void sub_805E804(void);
void sub_8064BE0(void);
void sub_8075680(u32);
void sub_8094C88(void);
void sub_8040A84(void);
void ShowWholeRevealedDungeonMap(void);
void sub_8047158(void);
void sub_806A914(u8 a0, u8 a1, u8 a2);
void sub_8044C10(u8 a0);
@ -118,7 +118,6 @@ extern bool8 sub_8071A8C(Entity *pokemon);
extern void sub_80643AC(Entity *pokemon);
extern u8 sub_8062F90(Entity *, u32, u32, u32, u32);
extern u8 gUnknown_202EE00;
extern Entity *gLeaderPointer;
extern const u8 *gUnknown_80F8A84;
@ -424,15 +423,15 @@ void DungeonHandlePlayerInput(void)
}
// SELECT button
if (!gDungeon->unk181e8.blinded && gGameOptionsRef->mapOption != 6 && gRealInputs.pressed & SELECT_BUTTON) {
if (!gDungeon->unk181e8.blinded && gGameOptionsRef->mapOption != TOP_MAP_AND_TEAM_NO_BOTTOM && gRealInputs.pressed & SELECT_BUTTON) {
s32 prevMapOption = gGameOptionsRef->mapOption;
gUnknown_202EE00 = 1;
gShowMonsterDotsInDungeonMap = TRUE;
gDungeon->unk181e8.inFloorMapMode = TRUE;
if (!sub_8094C48()) {
sub_8094C88();
}
sub_8052210(1);
sub_8040A84();
ShowWholeRevealedDungeonMap();
SetBGOBJEnableFlags(0x1E);
sub_803E708(0xA, 0x2F);
while (1) {
@ -443,14 +442,14 @@ void DungeonHandlePlayerInput(void)
break;
if (gRealInputs.pressed & A_BUTTON) {
gUnknown_202EE00 = (gUnknown_202EE00 == 0) ? 1 : 0; // Flip
sub_8040A84();
gShowMonsterDotsInDungeonMap = (gShowMonsterDotsInDungeonMap == FALSE) ? TRUE : FALSE; // Flip
ShowWholeRevealedDungeonMap();
}
}
gDungeon->unk181e8.inFloorMapMode = FALSE;
gGameOptionsRef->mapOption = prevMapOption;
gUnknown_202EE00 = 1;
sub_8040A84();
gShowMonsterDotsInDungeonMap = TRUE;
ShowWholeRevealedDungeonMap();
SetBGOBJEnableFlags(0);
sub_803E46C(0x2F);
sub_803E46C(0x2F);

View File

@ -21,7 +21,7 @@ extern DungeonPos gPlayerDotMapPosition;
extern DungeonPos gUnknown_202EE0C;
s32 sub_806A4DC(EntityInfo *info);
bool8 sub_8070F80(Entity * pokemon, s32 direction);
void sub_80402AC(s32, s32);
void ShowDungeonMapAtPos(s32, s32);
void sub_80694C0(Entity *target,s32 x,int y,char param_4)
{
@ -44,7 +44,7 @@ void sub_80694C0(Entity *target,s32 x,int y,char param_4)
if (tile2->monster == target) {
tile2->monster = NULL;
}
sub_80402AC((target->pos).x,(target->pos).y);
ShowDungeonMapAtPos((target->pos).x,(target->pos).y);
}
(target->prevPos).x = (target->pos).x;
(target->prevPos).y = (target->pos).y;
@ -60,7 +60,7 @@ void sub_80694C0(Entity *target,s32 x,int y,char param_4)
gUnknown_202EE0C.y = y;
gDungeon->unk1 = 0;
}
sub_80402AC(x,y);
ShowDungeonMapAtPos(x,y);
switch(param_4)
{

View File

@ -80,7 +80,7 @@ extern void sub_8042EC8(Entity *a0, s32 a1);
extern Entity *sub_804550C(s16 a);
extern Entity *sub_80453AC(s16 id);
extern void sub_803F580(s32);
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
extern void sub_806B678(void);
extern void EntityUpdateStatusSprites(Entity *);
extern Entity *sub_80696A8(Entity *a0);
@ -543,7 +543,7 @@ void sub_806A6E8(Entity *entity)
else {
if (info->heldItem.id == ITEM_X_RAY_SPECS || info->unk64 == ITEM_X_RAY_SPECS) {
sub_803F580(1);
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
}
sub_807AA30();

View File

@ -147,7 +147,7 @@ extern u8 *gUnknown_80FBF28[];
extern u8 *gUnknown_80FBF68[];
extern u8 *gUnknown_80FBF84[];
extern void sub_8040A84();
extern void ShowWholeRevealedDungeonMap();
extern void EntityUpdateStatusSprites(Entity *);
extern void sub_8042A74(Entity *r0);
extern void sub_807EC28(bool8);
@ -372,7 +372,7 @@ void BlindTarget(Entity *pokemon, Entity *target)
TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FB7F4);
sub_803E46C(0x31);
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
else
{
@ -399,7 +399,7 @@ void CrossEyeVisionTarget(Entity *pokemon, Entity *target)
entityInfo->blinkerClassStatus.turns = CalculateStatusTurns(target,gCrossEyedTurnRange, TRUE) + 1;
sub_803F580(0x1);
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
else
{
@ -425,7 +425,7 @@ void RestoreVisionTarget(Entity *pokemon, Entity *target)
TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FB880);
sub_803E46C(0x31);
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
else
{
@ -1508,7 +1508,7 @@ void SendEyesightEndMessage(Entity * pokemon,Entity * target)
if (entityInfo->isTeamLeader) {
sub_803E46C(0x31);
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
}

View File

@ -60,7 +60,7 @@ EWRAM_INIT u32 gUnknown_203B444[3] = {0x28, 0x28, 0x50};
void sub_804EB30();
bool8 ExposeTrap(s32 x, s32 y);
void sub_8040A84();
void ShowWholeRevealedDungeonMap();
void sub_8049ED4();
void sub_806A5B8(Entity *);
u8 sub_8045888(Entity *);
@ -76,7 +76,7 @@ bool8 sub_808384C(DungeonPos *, DungeonPos *);
u8 sub_8083660(DungeonPos *);
void sub_80460F8(DungeonPos *, Item *, u32);
void sub_80462AC(Entity * ,u32, u32, u8, u32);
extern void sub_80402AC(s32, s32);
extern void ShowDungeonMapAtPos(s32, s32);
void BlowAwayTarget(Entity *pokemon, Entity *target, u32 direction)
{
@ -385,7 +385,7 @@ void sub_807D3CC(Entity *param_1)
}
if (flag) {
LogMessageByIdWithPopupCheckUser(param_1,*gUnknown_80FD2F8); // All traps were exposed
sub_8040A84();
ShowWholeRevealedDungeonMap();
sub_8049ED4();
}
else {
@ -503,7 +503,7 @@ void HandleTrawlOrbAction(Entity *user, Entity *target)
for (i = 0; i < itemsCount; i++) {
if (EntityIsValid(&itemEntities[i])) {
sub_80461C8(&itemEntities[i].pos, 1);
sub_80402AC(itemEntities[i].pos.x, itemEntities[i].pos.y);
ShowDungeonMapAtPos(itemEntities[i].pos.x, itemEntities[i].pos.y);
itemVelocity[i].x = (((targetTilePos[i].x * 24 + 4) * 256) - itemEntities[i].pixelPos.x) / 60;
itemVelocity[i].y = (((targetTilePos[i].y * 24 + 4) * 256) - itemEntities[i].pixelPos.y) / 60;
}
@ -534,7 +534,7 @@ void HandleTrawlOrbAction(Entity *user, Entity *target)
for (i = 0; i < itemsCount; i++) {
if (targetTilePos[i].x >= 0) {
sub_80460F8(&targetTilePos[i], GetItemData(&itemEntities[i]), 1);
sub_80402AC(targetTilePos[i].x, targetTilePos[i].y);
ShowDungeonMapAtPos(targetTilePos[i].x, targetTilePos[i].y);
hasTrawled = TRUE;
}
}
@ -652,7 +652,7 @@ void HandleDroughtOrbAction(Entity *pokemon, Entity *target) {
}
gDungeon->unk644.unk2C = 1;
sub_806CF60();
sub_8040A84();
ShowWholeRevealedDungeonMap();
sub_8049ED4();
}
@ -757,7 +757,7 @@ void HandleOneRoomOrb(Entity *pokemon, Entity *target) {
sub_804AAD4();
sub_8049884();
sub_806CF60();
sub_8040A84();
ShowWholeRevealedDungeonMap();
sub_8049ED4();
LogMessageByIdWithPopupCheckUser(pokemon,*gUnknown_80FD3A0);
sub_803E708(0x28,0x2b);
@ -861,7 +861,7 @@ void HandleExplosion(Entity *pokemon,Entity *target,DungeonPos *param_3,s32 para
sub_8049BB0(x,y);
}
}
sub_8040A84();
ShowWholeRevealedDungeonMap();
sub_8049ED4();
}
}

View File

@ -14,7 +14,7 @@
#include "structs/str_806B7F8.h"
extern const DungeonPos gUnknown_80F4598[];
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
struct unkData_8107234
{
@ -32,7 +32,7 @@ void sub_80847D4(void)
gDungeon->unk3A0D = 0;
gDungeon->unk1356C = 0;
sub_8040A84();
ShowWholeRevealedDungeonMap();
for(index = 0; index < 0x3e7 && gUnknown_8107234[index].unk0[0] != 0; index++) {
fixedRoomNumber = gDungeon->fixedRoomNumber;
if (fixedRoomNumber - 0x1c < 0x16) {

View File

@ -374,7 +374,7 @@ extern void BgColorCallNullsub4(void);
extern void sub_8085EB0(void);
extern void sub_8049884(void);
extern void sub_8049B8C(void);
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
extern void sub_8086A54(Entity *);
extern void ResetMonEntityData(EntityInfo *, u32);
extern void sub_808BBA8(Entity * );
@ -3721,7 +3721,7 @@ void sub_808B1CC(u8 itemID)
sub_80460F8(&pos,&item,1);
}
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
void SetupRegiFacingDirection(Entity *regiEntity)
@ -3812,7 +3812,7 @@ void sub_808B3E4(u8 param_1, u8 param_2, u8 param_3)
sub_808B50C();
}
gDungeon->unk1356C = uVar1;
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
}
}
@ -4181,7 +4181,7 @@ void CreateJirachiWishWarpTile(void)
sub_8049884();
sub_8049B8C();
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
void EnableJirachiWishWarpTile(void)
@ -4197,7 +4197,7 @@ void EnableJirachiWishWarpTile(void)
sub_8049884();
sub_8049B8C();
sub_8049ED4();
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
u8 JirachiFriendAreaSearch(void)

View File

@ -24,7 +24,7 @@ extern void sub_80416E0(PixelPos *r0, u32, bool8);
extern void sub_80855E4(void *);
extern void PlaySoundEffect(u32);
extern void sub_804178C(u32);
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
static void MusicBoxCreation(void);
static u8 sub_8046D70(void);
@ -157,7 +157,7 @@ void MusicBoxCreation(void)
sub_803E708(10,0x41);
sub_804178C(1);
gDungeon->unk1356C = 0;
sub_8040A84();
ShowWholeRevealedDungeonMap();
}
}

View File

@ -41,11 +41,11 @@ struct DungeonMapGfx
RGB *pal;
};
EWRAM_DATA bool8 gUnknown_202EE00 = FALSE;
EWRAM_DATA bool8 gShowMonsterDotsInDungeonMap = 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;
EWRAM_DATA static void *sDungeonMapVramDst = NULL;
void SetDungeonMapToNotShown(void)
{
@ -61,10 +61,10 @@ 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->dungeonMap.dungeonMap[i][j], sizeof(struct UnkDungeonGlobal_1822C_Sub));
gDungeon->dungeonMap.unk1BA2C[i][j] = FALSE;
for (i = 0; i < DUNGEON_MAP_MAX_Y; i++) {
for (j = 0; j < DUNGEON_MAP_MAX_X; j++) {
CpuClear(&gDungeon->dungeonMap.perTile[i][j], sizeof(struct UnkDungeonGlobal_1822C_Sub));
gDungeon->dungeonMap.tileScheduledForCopy[i][j] = FALSE;
}
}
@ -73,11 +73,11 @@ void InitDungeonMap(bool8 a0)
gPlayerDotMapPosition.y = 100;
}
gDungeon->dungeonMap.unk1BDCC = 0;
gDungeon->dungeonMap.unk1BDD0 = 1;
gDungeon->dungeonMap.unk1BDD2 = 0;
gUnknown_202EE00 = 1;
gUnknown_202EE08 = (void *) VRAM + 0x1700;
gDungeon->dungeonMap.scheduledVramCopiesCount = 0;
gDungeon->dungeonMap.copyToVram = TRUE;
gDungeon->dungeonMap.resetTilesScheduledForCopy = FALSE;
gShowMonsterDotsInDungeonMap = TRUE;
sDungeonMapVramDst = (void *) VRAM + 0x1700;
gShowDungeonMap = TRUE;
LoadDungeonMapPalette();
}
@ -90,7 +90,7 @@ void CloseDungeonMapFile(void)
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.
// Used in Pmd's Blue version. Stores different Vram address in sDungeonMapVramDst(maybe?), depending on TOP_MAP_AND_TEAM_NO_BOTTOM map option.
UNUSED static void nullsub_203(void)
{
@ -117,7 +117,29 @@ void LoadDungeonMapPalette(void)
}
}
void sub_80402AC(s32 x, s32 y)
enum {
MAP_GFX_NOTHING,
MAP_GFX_UNK1, // Appears to be nothing too
MAP_GFX_ENEMY,
MAP_GFX_ITEM,
MAP_GFX_TRAP,
MAP_GFX_SPECIAL_STAIRS,
MAP_GFX_STAIRS,
MAP_GFX_WONDER_TILE,
MAP_GFX_PLAYER,
MAP_GFX_WHITE_SQUARE, // Possibly unused? It's like Stairs, but white instead of blue
MAP_GFX_ALLY,
MAP_GFX_GREEN_DOT, // Used when hallucinating
};
#define MAP_GFX_TERRAIN_TILES_VISITED 0x10
#define MAP_GFX_TERRAIN_TILES_REVEALED 0x20
#define MAP_GFX_TERRAIN_LINE_UP 0x1
#define MAP_GFX_TERRAIN_LINE_RIGHT 0x2
#define MAP_GFX_TERRAIN_LINE_DOWN 0x4
#define MAP_GFX_TERRAIN_LINE_LEFT 0x8
void ShowDungeonMapAtPos(s32 x, s32 y)
{
s32 yAdd = 0;
const Tile *tile;
@ -127,17 +149,17 @@ void sub_80402AC(s32 x, s32 y)
bool8 hallucinating;
bool8 showItems;
bool8 showHiddenTraps;
bool8 r0;
bool8 allTilesRevealed;
bool8 var_24;
bool8 r7;
s32 r6;
bool8 tileKnown;
s32 mapGfxType;
s32 xDiv2, yDiv2;
u32 *src, *dst;
bool8 r10;
bool8 lookForMapObject;
s32 r3, yMinus;
dungeon = gDungeon;
r10 = TRUE;
lookForMapObject = TRUE;
if (sDungeonMapGfxFile == NULL)
return;
@ -169,17 +191,17 @@ void sub_80402AC(s32 x, s32 y)
blinded = gDungeon->unk181e8.blinded;
showHiddenTraps = gDungeon->unk181e8.showInvisibleTrapsMonsters;
showItems = gDungeon->unk181e8.showAllFloorItems;
r0 = gDungeon->unk181e8.unk1820B;
allTilesRevealed = gDungeon->unk181e8.allTilesRevealed;
if (blinded) {
r7 = tile->spawnOrVisibilityFlags & 1;
tileKnown = tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_REVEALED;
var_24 = FALSE;
}
else {
if (r0) {
r7 = TRUE;
if (allTilesRevealed) {
tileKnown = TRUE;
}
else {
r7 = tile->spawnOrVisibilityFlags & 1;
tileKnown = tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_REVEALED;
}
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
@ -191,159 +213,159 @@ void sub_80402AC(s32 x, s32 y)
}
if (sub_8094C48() && !gDungeon->unk1356C) {
r6 = 0;
mapGfxType = MAP_GFX_NOTHING;
if (!blinded) {
Entity *entity = tile->monster;
if (entity != NULL) {
s32 entType = GetEntityType(entity);
if (gUnknown_202EE00 && entType == ENTITY_MONSTER && sub_8045804(entity)) {
if (gShowMonsterDotsInDungeonMap && entType == ENTITY_MONSTER && sub_8045804(entity)) {
EntityInfo *entInfo = GetEntInfo(entity);
if (IsExperienceLocked(entInfo->joinedAt.id) || entInfo->monsterBehavior == 1 || entInfo->monsterBehavior == 4) {
r6 = 10;
mapGfxType = MAP_GFX_ALLY;
}
else {
if (entInfo->isNotTeamMember) {
r6 = 2;
mapGfxType = MAP_GFX_ENEMY;
}
else if (entInfo->isTeamLeader) {
gPlayerDotMapPosition.x = x;
gPlayerDotMapPosition.y = y;
if (gDungeon->unk181e8.inFloorMapMode) {
r6 = 8;
mapGfxType = MAP_GFX_PLAYER;
}
}
else {
r6 = 10;
mapGfxType = MAP_GFX_ALLY;
}
}
r10 = FALSE;
lookForMapObject = FALSE;
}
}
}
if (r10 && !blinded) {
if (lookForMapObject && !blinded) {
Entity *entity = tile->object;
if (entity != NULL) {
s32 entType = GetEntityType(entity);
if (!r7) {
r6 = 0;
if (!tileKnown) {
mapGfxType = MAP_GFX_NOTHING;
if (entType == ENTITY_ITEM) {
if ((showItems || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) {
r6 = 3;
mapGfxType = MAP_GFX_ITEM;
}
}
r10 = FALSE;
lookForMapObject = FALSE;
}
else {
if (entType == ENTITY_TRAP) {
if (entity->isVisible || showHiddenTraps) {
Trap *trap = GetTrapData(entity);
r6 = gUnknown_80F65F0[trap->id];
r10 = FALSE;
mapGfxType = gUnknown_80F65F0[trap->id];
lookForMapObject = FALSE;
}
}
}
if (r10) {
if (lookForMapObject) {
if (entType == ENTITY_ITEM) {
if ((showItems || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) {
r6 = 3;
r10 = FALSE;
mapGfxType = MAP_GFX_ITEM;
lookForMapObject = FALSE;
}
}
}
if (r10) {
if (lookForMapObject) {
if (terrainType != TERRAIN_TYPE_NORMAL) {
r6 = 0;
r10 = FALSE;
mapGfxType = MAP_GFX_NOTHING;
lookForMapObject = FALSE;
}
}
}
else {
if (!r7) {
if (!tileKnown) {
if (var_24 && (tile->terrainType & TERRAIN_TYPE_STAIRS)) {
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
r6 = 6;
mapGfxType = MAP_GFX_STAIRS;
}
else {
r6 = 5;
mapGfxType = MAP_GFX_SPECIAL_STAIRS;
}
r10 = FALSE;
lookForMapObject = FALSE;
}
}
else {
if ((tile->terrainType & TERRAIN_TYPE_STAIRS)) {
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
r6 = 6;
mapGfxType = MAP_GFX_STAIRS;
}
else {
r6 = 5;
mapGfxType = MAP_GFX_SPECIAL_STAIRS;
}
r10 = FALSE;
lookForMapObject = FALSE;
}
}
}
}
if (!r10) {
if (!lookForMapObject) {
if (hallucinating) {
if (r6 != 0) {
r6 = 11;
if (mapGfxType != MAP_GFX_NOTHING) {
mapGfxType = MAP_GFX_GREEN_DOT;
}
}
}
if (r6 == 0) {
if (!r7) {
r6 = 1;
if (mapGfxType == MAP_GFX_NOTHING) {
if (!tileKnown) {
mapGfxType = 1;
}
else if (terrainType != TERRAIN_TYPE_NORMAL) {
r6 = 1;
mapGfxType = 1;
}
else {
s32 r4 = 1 | 2 | 4 | 8;
s32 terrainLine = MAP_GFX_TERRAIN_LINE_UP | MAP_GFX_TERRAIN_LINE_RIGHT | MAP_GFX_TERRAIN_LINE_DOWN | MAP_GFX_TERRAIN_LINE_LEFT;
if (y < DUNGEON_MAX_SIZE_Y - 1) {
const Tile *adjacentTile = GetTile(x, y + 1);
if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) {
r4 &= ~(1);
terrainLine &= ~(MAP_GFX_TERRAIN_LINE_UP);
}
}
if (y >= 1) {
const Tile *adjacentTile = GetTile(x, y - 1);
if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) {
r4 &= ~(4);
terrainLine &= ~(MAP_GFX_TERRAIN_LINE_DOWN);
}
}
if (x < DUNGEON_MAX_SIZE_X - 1) {
const Tile *adjacentTile = GetTile(x + 1, y);
if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) {
r4 &= ~(2);
terrainLine &= ~(MAP_GFX_TERRAIN_LINE_RIGHT);
}
}
if (x >= 1) {
const Tile *adjacentTile = GetTile(x - 1, y);
if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) {
r4 &= ~(8);
terrainLine &= ~(MAP_GFX_TERRAIN_LINE_LEFT);
}
}
r6 = (s16) r4;
if (tile->spawnOrVisibilityFlags & 2) {
r6 = (s16) (r6 + 16);
mapGfxType = (s16) terrainLine;
if (tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_VISITED) {
mapGfxType = (s16) (mapGfxType + MAP_GFX_TERRAIN_TILES_VISITED);
}
else {
r6 = (s16) (r6 + 32);
mapGfxType = (s16) (mapGfxType + MAP_GFX_TERRAIN_TILES_REVEALED);
}
}
}
// Not possible on GBA.
if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) {
r6 = (s16) (r6 + 128);
mapGfxType = (s16) (mapGfxType + 128);
}
else if (DoesNotHaveShadedMap() == TRUE) {
r6 = (s16) (r6 + 64);
mapGfxType = (s16) (mapGfxType + 64);
}
}
else {
r6 = 1;
mapGfxType = 1;
gPlayerDotMapPosition.x = 100;
}
@ -352,10 +374,10 @@ void sub_80402AC(s32 x, s32 y)
yDiv2 = (yMinus / 2);
r3 = x - (xDiv2 * 2);
r3 += (yMinus - (yDiv2 * 2)) * 2;
dst = dungeon->dungeonMap.dungeonMap[yDiv2][xDiv2].arr;
dst = dungeon->dungeonMap.perTile[yDiv2][xDiv2].arr;
{
struct DungeonMapGfx *ptr = ((struct DungeonMapGfx *)(&sDungeonMapGfxFile->data));
src = ptr->gfx->unk0[r6 * 4 + r3];
src = ptr->gfx->unk0[mapGfxType * 4 + r3];
}
dst[0] = (dst[0] & src[0]) | src[1];
@ -367,39 +389,39 @@ 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->dungeonMap.unk1BDD1 && !dungeon->dungeonMap.unk1BA2C[yDiv2][xDiv2]) {
if (!dungeon->dungeonMap.copyAllAtOnce && !dungeon->dungeonMap.tileScheduledForCopy[yDiv2][xDiv2]) {
s32 id;
dungeon->dungeonMap.unk1BA2C[yDiv2][xDiv2] = TRUE;
id = dungeon->dungeonMap.unk1BDCC;
if (id < 40) {
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++;
dungeon->dungeonMap.tileScheduledForCopy[yDiv2][xDiv2] = TRUE;
id = dungeon->dungeonMap.scheduledVramCopiesCount;
if (id < MAX_SCHEDULED_DUNGEON_MAP_COPIES) {
dungeon->dungeonMap.vramCopies[id].vramPtr = sDungeonMapVramDst + ((xDiv2 + yDiv2 * DUNGEON_MAP_MAX_X) * sizeof(struct UnkDungeonGlobal_1822C_Sub));
dungeon->dungeonMap.vramCopies[id].mapArrayPtr = dst;
dungeon->dungeonMap.vramCopies[id].boolPtr = &dungeon->dungeonMap.tileScheduledForCopy[yDiv2][xDiv2];
dungeon->dungeonMap.scheduledVramCopiesCount++;
}
else {
dungeon->dungeonMap.unk1BDD1 = 1;
dungeon->dungeonMap.copyAllAtOnce = TRUE;
}
}
}
void sub_8040788(void)
void CopyDungeonMapToVram(void)
{
s32 i;
Dungeon *dungeon = gDungeon;
if (dungeon == NULL)
return;
if (!dungeon->dungeonMap.unk1BDD0)
if (!dungeon->dungeonMap.copyToVram)
return;
if (sub_800EC74())
return;
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;
if (!dungeon->dungeonMap.copyAllAtOnce) {
for (i = 0; i < dungeon->dungeonMap.scheduledVramCopiesCount; i++) {
struct DungeonMapVramCopy *ptr = &dungeon->dungeonMap.vramCopies[i];
u32 *src = ptr->mapArrayPtr;
u32 *dst = ptr->vramPtr;
if (gUnknown_202EDD0 == 0 || gUnknown_202EDD0 == 3) {
*dst++ = *src++;
@ -417,9 +439,9 @@ void sub_8040788(void)
else {
void *dst, *src;
dungeon->dungeonMap.unk1BDD1 = FALSE;
dst = gUnknown_202EE08;
src = dungeon->dungeonMap.dungeonMap[0][0].arr;
dungeon->dungeonMap.copyAllAtOnce = FALSE;
dst = sDungeonMapVramDst;
src = dungeon->dungeonMap.perTile[0][0].arr;
for (i = 0; i < DUNGEON_MAX_SIZE_X * 8; i += 8) {
if (gUnknown_202EDD0 == 0 || gUnknown_202EDD0 == 3) {
@ -428,9 +450,9 @@ void sub_8040788(void)
dst += 0x100;
src += 0x100;
}
dungeon->dungeonMap.unk1BDD2 = 1;
dungeon->dungeonMap.resetTilesScheduledForCopy = TRUE;
}
dungeon->dungeonMap.unk1BDCC = 0;
dungeon->dungeonMap.scheduledVramCopiesCount = 0;
}
void ShowPlayerDotOnMap(void)
@ -476,24 +498,24 @@ void ResetMapPlayerDotFrames(void)
sPlayerDotFrames = 0;
}
void sub_8040A84(void)
void ShowWholeRevealedDungeonMap(void)
{
s32 x, y;
gDungeon->dungeonMap.unk1BDD1 = TRUE;
gDungeon->dungeonMap.copyAllAtOnce = TRUE;
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
sub_80402AC(x, y);
ShowDungeonMapAtPos(x, y);
}
}
}
void sub_8040ABC(bool8 a0)
void UpdateBgTilemapForDungeonMap(bool8 a0)
{
s32 id, count1, count2;
s32 i, j;
u16 val;
u16 tilemapValue;
if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) {
count1 = 15;
@ -508,44 +530,44 @@ void sub_8040ABC(bool8 a0)
count2 = 3;
}
val = 0xE0B8;
tilemapValue = TILEMAP_TILE_NUM(0xB8) | TILEMAP_PAL(14);
id = 1;
for (i = 0; i < count1; i++) {
u16 *ptr = &gUnknown_202B038[0][id][1];
u16 *ptr = &gBgTilemaps[0][id][1];
for (j = 0; j < 28; j++) {
*ptr++ = val++;
*ptr++ = tilemapValue++;
}
id++;
}
for (i = 0; i < count2; i++) {
u16 *ptr = &gUnknown_202B038[0][id][1];
u16 *ptr = &gBgTilemaps[0][id][1];
for (j = 0; j < 28; j++) {
*ptr++ = 0xE000;
*ptr++ = TILEMAP_TILE_NUM(0) | TILEMAP_PAL(14);
}
id++;
}
}
// BUG: Overflowing into unk1BBEC. They forgot that the array size is max X/Y divided by two...
void sub_8040B60(void)
// BUG: Overflowing into vramCopies. They forgot that the array size is max X/Y divided by two...
void TryResetDungeonMapTilesScheduledForCopy(void)
{
s32 x, y;
Dungeon *dungeon = gDungeon;
if (dungeon->dungeonMap.unk1BDD2) {
if (dungeon->dungeonMap.resetTilesScheduledForCopy) {
#ifdef BUGFIX
for (y = 0; y < UNK1822C_ARR_COUNT; y++) {
for (x = 0; x < UNK1822C_ARR_COUNT_2; x++) {
dungeon->dungeonMap.unk1BA2C[y][x] = FALSE;
for (y = 0; y < DUNGEON_MAP_MAX_Y; y++) {
for (x = 0; x < DUNGEON_MAP_MAX_X; x++) {
dungeon->dungeonMap.tileScheduledForCopy[y][x] = FALSE;
}
}
#else
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
dungeon->dungeonMap.unk1BA2C[y][x] = FALSE;
dungeon->dungeonMap.tileScheduledForCopy[y][x] = FALSE;
}
}
#endif // BUGFIX
dungeon->dungeonMap.unk1BDD2 = FALSE;
dungeon->dungeonMap.resetTilesScheduledForCopy = FALSE;
}
}

View File

@ -37,7 +37,7 @@ EWRAM_DATA Tile gOutOfBoundsTileData = {0};
EWRAM_INIT const Tile *gCurTilesetOobTile = {NULL};
extern u8 sub_8043CE4(u32);
extern void sub_80402AC(s32, s32);
extern void ShowDungeonMapAtPos(s32, s32);
extern int sprintf(char *, const char *, ...);
const Tile *GetTile(s32 x, s32 y)
@ -503,7 +503,7 @@ void sub_8049ED4(void)
for (j = 0; j < 23; j++) {
y &= 0x1F;
gUnknown_202B038[3][y][x] = *src;
gBgTilemaps[3][y][x] = *src;
src += 3;
y++;
r8++;
@ -618,7 +618,7 @@ void sub_804A1F0(s32 a0, s32 a1)
for (i = 0; i < 23; i++) {
x &= 0x1F;
y &= 0x1F;
gUnknown_202B038[3][y][x] = *src;
gBgTilemaps[3][y][x] = *src;
src += 3;
y++;
r8++;
@ -719,7 +719,7 @@ void sub_804A49C(s32 a0, s32 a1)
for (i = 0; i < 31; i++) {
x &= 0x1F;
y &= 0x1F;
gUnknown_202B038[3][y][x] = *src;
gBgTilemaps[3][y][x] = *src;
src++;
x++;
r9++;
@ -833,7 +833,7 @@ void sub_804A728(DungeonPos *pos, s32 a1, u8 a2, u8 a3)
for (j = 0; j < 21; j++) {
x &= 0x1F;
y &= 0x1F;
gUnknown_202B038[2][y][x] = *src;
gBgTilemaps[2][y][x] = *src;
src += 3;
y++;
var_34++;
@ -893,7 +893,7 @@ void sub_804AA60(void)
{
for(j = 0; j < 0x20; j++)
{
gUnknown_202B038[2][i][j] = 0;
gBgTilemaps[2][i][j] = 0;
}
}
sub_80098F8(2);
@ -1023,7 +1023,7 @@ void sub_804AC20(DungeonPos *pos)
for (x = xMin; x <= xMax; x++) {
tile = GetTileMut(x,y);
tile->spawnOrVisibilityFlags |= 3;
sub_80402AC(x,y);
ShowDungeonMapAtPos(x,y);
}
}
}

View File

@ -735,7 +735,7 @@ void sub_8052FB8(const u8 *str)
{
s32 i;
for (i = 1; i < 30; i++) {
gUnknown_202B038[0][0][i] = 0;
gBgTilemaps[0][0][i] = 0;
}
}

View File

@ -450,7 +450,7 @@ static void WriteDungeonVisibility(DataSerializer *seri)
WriteU8(seri, gDungeon->unk181e8.priority);
WriteU8(seri, gDungeon->unk181e8.visibilityRange);
WriteBool8(seri, gDungeon->unk181e8.blinded);
WriteBool8(seri, gDungeon->unk181e8.unk1820B);
WriteBool8(seri, gDungeon->unk181e8.allTilesRevealed);
WriteBool8(seri, gDungeon->unk181e8.unk1820C);
WriteBool8(seri, gDungeon->unk181e8.unk1820D);
WriteBool8(seri, gDungeon->unk181e8.showAllFloorItems);
@ -847,7 +847,7 @@ static void ReadDungeonVisibility(DataSerializer *seri)
gDungeon->unk181e8.priority = ReadU8(seri);
gDungeon->unk181e8.visibilityRange = ReadU8(seri);
gDungeon->unk181e8.blinded = ReadBool8(seri);
gDungeon->unk181e8.unk1820B = ReadBool8(seri);
gDungeon->unk181e8.allTilesRevealed = ReadBool8(seri);
gDungeon->unk181e8.unk1820C = ReadBool8(seri);
gDungeon->unk181e8.unk1820D = ReadBool8(seri);
gDungeon->unk181e8.showAllFloorItems = ReadBool8(seri);

View File

@ -153,8 +153,8 @@ void FriendAreasMap_UpdateBg(void)
x1 &= 0x1F;
y1 &= 0x1F;
gUnknown_202B038[2][y1][x1] = gFriendAreasMapPtr->unk2014[y2][x2];
gUnknown_202B038[3][y1][x1] = gFriendAreasMapPtr->unk14[y2][x2];
gBgTilemaps[2][y1][x1] = gFriendAreasMapPtr->unk2014[y2][x2];
gBgTilemaps[3][y1][x1] = gFriendAreasMapPtr->unk14[y2][x2];
x2++;
x1++;
}

View File

@ -140,7 +140,7 @@ extern void nullsub_84(Entity *);
extern void nullsub_85(Entity *);
extern void sub_803F580(u32);
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
extern void sub_8041D9C(Entity *);
extern void sub_8041DB0(Entity *pokemon);
extern void sub_8041CA8(Entity *);
@ -713,7 +713,7 @@ void HandleScannerOrb(Entity* pokemon, Entity* target)
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0], target, 0);
TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FAEA0); // Item locations became evident
sub_803F580(0);
sub_8040A84();
ShowWholeRevealedDungeonMap();
EntityUpdateStatusSprites(target);
}
}
@ -738,7 +738,7 @@ void HandleStairsOrb(Entity* pokemon, Entity* target)
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FAEC8);
sub_803F580(0);
sub_8040A84();
ShowWholeRevealedDungeonMap();
EntityUpdateStatusSprites(target);
}
}
@ -758,7 +758,7 @@ void HandleRadarOrb(Entity* pokemon, Entity* target)
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FAFAC);
sub_803F580(0);
sub_8040A84();
ShowWholeRevealedDungeonMap();
EntityUpdateStatusSprites(target);
}
}

View File

@ -43,7 +43,7 @@ extern void sub_8068FE0(Entity *, u32, Entity *r2);
extern void sub_806F370(Entity *r0, Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
extern void sub_807FC3C(DungeonPos *, u32, u32);
extern void sub_8042A64(DungeonPos *);
extern void sub_8040A84(void);
extern void ShowWholeRevealedDungeonMap(void);
extern void sub_80498A8(s32, s32);
extern void sub_8042A54(DungeonPos *);
extern void sub_8049BB0(s32, s32);
@ -954,7 +954,7 @@ bool8 TrapbustOrbAction(Entity * pokemon,Entity * target, Move *move, s32 param_
}
if (foundTrap) {
TryDisplayDungeonLoggableMessage3(pokemon, target, *gUnknown_80FD1B0);
sub_8040A84();
ShowWholeRevealedDungeonMap();
sub_8049ED4();
}
else {
@ -1106,7 +1106,7 @@ bool8 FillInOrbAction(Entity *pokemon,Entity *target, Move *move, s32 param_4)
else {
TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FD0B8);
}
sub_8040A84();
ShowWholeRevealedDungeonMap();
sub_8049ED4();
return filledInTile;
}

View File

@ -39,7 +39,7 @@ EWRAM_DATA static s32 sUnknown_202B024 = 0;
EWRAM_DATA static s32 sCharHeight[2] = {0};
EWRAM_DATA static u32 sTextShadowMask = 0; // Some text color info is stored; retrieve via "& 0xF"
EWRAM_DATA static u8 sDrawTextShadow = 0;
EWRAM_DATA ALIGNED(4) u16 gUnknown_202B038[4][32][32] = {0};
EWRAM_DATA ALIGNED(4) u16 gBgTilemaps[4][32][32] = {0};
IWRAM_DATA static s16 gUnknown_3000E94[161] = {0};
@ -190,12 +190,12 @@ void LoadCharmaps(void)
sCharacterSpacing = 0;
for (i = 0; i < 20; i++) {
gUnknown_202B038[0][i][0] = 0xf279;
gUnknown_202B038[1][i][0] = 0xf27a;
gBgTilemaps[0][i][0] = 0xf279;
gBgTilemaps[1][i][0] = 0xf27a;
for (j = 1; j < 32; j++) {
gUnknown_202B038[0][i][j] = 0;
gUnknown_202B038[1][i][j] = 0xf27a;
gBgTilemaps[0][i][j] = 0;
gBgTilemaps[1][i][j] = 0xf27a;
}
}
@ -297,7 +297,7 @@ static void SaveUnkTextStructAndXXX_8006438(const Windows *a0, bool8 a1, bool8 a
sUnknown_202AFC0.id[i] = a0->id[i];
if (a0->id[i].width) {
sub_8006554(gUnknown_2027370, (u32 *)VRAM, sUnknown_20274B4, &gUnknown_202B038[0][0][0], gUnknown_80B8804[i], &a0->id[i], a1, r9, a3, 0);
sub_8006554(gUnknown_2027370, (u32 *)VRAM, sUnknown_20274B4, &gBgTilemaps[0][0][0], gUnknown_80B8804[i], &a0->id[i], a1, r9, a3, 0);
sub_80089AC(&a0->id[i], a3);
r9 += a0->id[i].width * a0->id[i].unk10;
}
@ -1471,8 +1471,8 @@ void sub_8007334(s32 a0)
for (i = 0; i < textStructPtr->unk6; i++) {
s32 id = textStructPtr->unk0;
for (j = 0; j < textStructPtr->unk4; j++) {
gUnknown_202B038[0][r6][id] &= ~0x3ff;
gUnknown_202B038[0][r6][id] |= r5;
gBgTilemaps[0][r6][id] &= ~0x3ff;
gBgTilemaps[0][r6][id] |= r5;
id++;
r5++;
}
@ -2278,7 +2278,7 @@ static void sub_8007D00(UnkTextStruct1 *a0, u32 a1, s32 x, s32 y, s32 a4, s32 co
void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6)
{
sub_8007E64(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6);
sub_8007E64(gUnknown_2027370, gBgTilemaps[0], a0, a1, a2, a3, a4, a5, a6);
}
UNUSED static void nullsub_160(void)
@ -2355,7 +2355,7 @@ static u32 FlipPixelsHorizontally(u32 a0)
UNUSED static void sub_8007FEC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6)
{
sub_8008030(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6);
sub_8008030(gUnknown_2027370, gBgTilemaps[0], a0, a1, a2, a3, a4, a5, a6);
}
UNUSED static void nullsub_161(void)
@ -2459,7 +2459,7 @@ UNUSED static void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id)
void DisplayMonPortraitSprite(s32 a0, const u8 *compressedData, s32 a2)
{
DisplayMonPortrait(gUnknown_2027370, gUnknown_202B038[0], a0, compressedData, a2);
DisplayMonPortrait(gUnknown_2027370, gBgTilemaps[0], a0, compressedData, a2);
}
UNUSED static void nullsub_162(void)
@ -2550,7 +2550,7 @@ static void DisplayMonPortraitFlipped(UnkTextStruct1 *a0, s32 a1, const u8 *comp
UNUSED static void sub_8008468(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 a6)
{
sub_80084A4(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a6);
sub_80084A4(gUnknown_2027370, gBgTilemaps[0], a0, a1, a2, a3, a4, a6);
}
UNUSED static void nullsub_164(void)
@ -3083,14 +3083,14 @@ UNUSED static bool8 sub_8008DA8(void)
UNUSED static void sub_8008DAC(s32 a0, s32 a1, s32 a2)
{
gUnknown_202B038[0][a1][a0] = a2;
gBgTilemaps[0][a1][a0] = a2;
gUnknown_20274A5 = TRUE;
}
void sub_8008DC8(s32 a0, s32 a1, u16 a2, s32 a3)
{
gUnknown_202B038[0][a1][a0] = a2;
gUnknown_202B038[1][a1][a0] = a3;
gBgTilemaps[0][a1][a0] = a2;
gBgTilemaps[1][a1][a0] = a3;
gUnknown_20274A5 = TRUE;
}
@ -3106,7 +3106,7 @@ UNUSED static void sub_8008DF4(s32 a0, s32 a1, u8 *a2)
if (r1 >= 97 && r1 <= 122) {
r1 -= 32;
}
gUnknown_202B038[0][a1][a0] = 0xF000 | (r1 + 0x258);
gBgTilemaps[0][a1][a0] = 0xF000 | (r1 + 0x258);
a2++;
a0++;
}
@ -3128,7 +3128,7 @@ UNUSED static void sub_8008E58(s32 a0, s32 a1, u8 *a2, s32 a3)
if (r1 >= 97 && r1 <= 122) {
r1 -= 32;
}
gUnknown_202B038[0][a1][a0] = 0xF000 | (r1 + 0x258);
gBgTilemaps[0][a1][a0] = 0xF000 | (r1 + 0x258);
a2++;
a0++;
a3--;
@ -3432,14 +3432,14 @@ static void sub_8009388(void)
{
s32 i, j;
gUnknown_202B038[0][0][0] = 0xF279;
gUnknown_202B038[1][0][0] = 0xF27A;
gBgTilemaps[0][0][0] = 0xF279;
gBgTilemaps[1][0][0] = 0xF27A;
for (i = sUnknown_202B020; i < sUnknown_202B024; i++) {
gUnknown_202B038[0][i][0] = 0xF279;
gUnknown_202B038[1][i][0] = 0xF27A;
gBgTilemaps[0][i][0] = 0xF279;
gBgTilemaps[1][i][0] = 0xF27A;
for (j = 1; j < 32; j++) {
gUnknown_202B038[0][i][j] = 0;
gUnknown_202B038[1][i][j] = 0xF27A;
gBgTilemaps[0][i][j] = 0;
gBgTilemaps[1][i][j] = 0xF27A;
}
}
}
@ -3448,14 +3448,14 @@ void sub_8009408(s32 from, s32 to)
{
s32 i, j;
gUnknown_202B038[0][0][0] = 0xF279;
gUnknown_202B038[1][0][0] = 0xF27A;
gBgTilemaps[0][0][0] = 0xF279;
gBgTilemaps[1][0][0] = 0xF27A;
for (i = from; i < to; i++) {
gUnknown_202B038[0][i][0] = 0xF279;
gUnknown_202B038[1][i][0] = 0xF27A;
gBgTilemaps[0][i][0] = 0xF279;
gBgTilemaps[1][i][0] = 0xF27A;
for (j = 1; j < 32; j++) {
gUnknown_202B038[0][i][j] = 0;
gUnknown_202B038[1][i][j] = 0xF27A;
gBgTilemaps[0][i][j] = 0;
gBgTilemaps[1][i][j] = 0xF27A;
}
}
gUnknown_20274A5 = TRUE;
@ -3471,8 +3471,8 @@ UNUSED static void sub_8009488(s32 strArrId)
for (i = 0; i < strPtr->unk6; i++) {
id1 = strPtr->unk0;
for (j = 0; j < strPtr->unk4; j++) {
gUnknown_202B038[0][id0][id1] &= 0xFC00;
gUnknown_202B038[1][id0][id1] = 0xF27A;
gBgTilemaps[0][id0][id1] &= 0xFC00;
gBgTilemaps[1][id0][id1] = 0xF27A;
id1++;
}
id0++;
@ -3492,8 +3492,8 @@ void sub_8009524(s32 strArrId)
for (i = 0; i < strPtr->unk6 + 2; i++) {
s32 id1 = strPtr->unk0 - 1;
for (j = 0; j < strPtr->unk4 + 2; j++) {
gUnknown_202B038[0][id0][id1] &= 0xFC00;
gUnknown_202B038[1][id0][id1] = 0xF27A;
gBgTilemaps[0][id0][id1] &= 0xFC00;
gBgTilemaps[1][id0][id1] = 0xF27A;
id1++;
}
id0++;

View File

@ -84,7 +84,7 @@ const u8 gDungeonWaterType[76] = {
DUNGEON_WATER_TYPE_NONE,
};
extern void sub_80402AC(s32, s32);
extern void ShowDungeonMapAtPos(s32, s32);
extern void sub_8049BB0(s32, s32);
void sub_8042A14(DungeonPos *);
@ -136,7 +136,7 @@ bool8 sub_804AD34(DungeonPos *pos)
{
sub_80498A8(x + pos->x, y + pos->y);
sub_8049BB0(x + pos->x, y + pos->y);
sub_80402AC(x + pos->x, y + pos->y);
ShowDungeonMapAtPos(x + pos->x, y + pos->y);
}
}
}
@ -198,7 +198,7 @@ void sub_804AE84(DungeonPos *pos)
for(x = -1; x < 2; x++)
{
sub_80498A8(x + pos->x, y + pos->y);
sub_80402AC(x + pos->x, y + pos->y);
ShowDungeonMapAtPos(x + pos->x, y + pos->y);
}
}

View File

@ -58,7 +58,7 @@ extern u32 gUnknown_8106A50;
void sub_806A9B4(Entity *, u32);
void sub_80461C8(DungeonPos *, u32);
void sub_80402AC(s32, s32);
void ShowDungeonMapAtPos(s32, s32);
s16 sub_803D970(u32);
bool8 sub_806AA0C(s32, s32);
void sub_80421EC(DungeonPos *, u32);
@ -771,7 +771,7 @@ void HandlePokemonTrap(Entity *param_1,DungeonPos *pos)
counter++;
}
}
sub_80402AC(x,y);
ShowDungeonMapAtPos(x,y);
}
}
}

View File

@ -367,8 +367,8 @@ static void UpdateBg(void)
x1 &= 0x1F;
y1 &= 0x1F;
gUnknown_202B038[2][y1][x1] = sWorldMapPtr->unk3114[y2][x2];
gUnknown_202B038[3][y1][x1] = sWorldMapPtr->unk1114[y2][x2];
gBgTilemaps[2][y1][x1] = sWorldMapPtr->unk3114[y2][x2];
gBgTilemaps[3][y1][x1] = sWorldMapPtr->unk1114[y2][x2];
x2++;
x1++;
}