mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-24 23:17:03 -05:00
Merge pull request #353 from DizzyEggg/code_8040094
code_8040094.s (unknown move file + dungeon_map.c)
This commit is contained in:
commit
f76a61bae9
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2774
asm/code_8040094.s
2774
asm/code_8040094.s
File diff suppressed because it is too large
Load Diff
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -6426,7 +6426,7 @@ _08064D36:
|
|||
bne _08064D4C
|
||||
b _08064C14
|
||||
_08064D4C:
|
||||
bl sub_8040A84
|
||||
bl ShowWholeRevealedDungeonMap
|
||||
movs r0, 0
|
||||
movs r1, 0
|
||||
bl sub_803EAF0
|
||||
|
|
@ -6828,7 +6828,7 @@ _08065062:
|
|||
ldr r0, [r0]
|
||||
str r0, [r1]
|
||||
bl sub_803E13C
|
||||
bl sub_8040238
|
||||
bl LoadDungeonMapPalette
|
||||
_08065088:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -2,76 +2,6 @@
|
|||
.section .rodata
|
||||
#.incbin "baserom.gba", 0xF59C4, 0x4
|
||||
|
||||
.string "pksdir0\0"
|
||||
.global gUnknown_80F6490
|
||||
gUnknown_80F6490: @ 80F6490
|
||||
@ replacing .incbin "baserom.gba", 0x000f6490, 0x24
|
||||
.byte 0x00, 0x00, 0x00, 0x0
|
||||
.byte 0x0f, 0x00, 0x00, 0x00
|
||||
.byte 0xff, 0x00, 0x00, 0x00
|
||||
.byte 0xff, 0x0f, 0x00, 0x00
|
||||
.byte 0xff, 0xff, 0x00, 0x00
|
||||
.byte 0xff, 0xff, 0x0f, 0x00
|
||||
.byte 0xff, 0xff, 0xff, 0x00
|
||||
.byte 0xff, 0xff, 0xff, 0x0f
|
||||
.byte 0xff, 0xff, 0xff, 0xff
|
||||
|
||||
.global gUnknown_80F64B4
|
||||
gUnknown_80F64B4: @ 80F64B4
|
||||
@ replacing .incbin "baserom.gba", 0x000f64b4, 0x24
|
||||
.byte 0x5a, 0x00, 0x00, 0x00
|
||||
.byte 0x50, 0x00, 0x00, 0x00
|
||||
.byte 0x46, 0x00, 0x00, 0x00
|
||||
.byte 0x3c, 0x00, 0x00, 0x00
|
||||
.byte 0x32, 0x00, 0x00, 0x00
|
||||
.byte 0x28, 0x00, 0x00, 0x00
|
||||
.byte 0x1e, 0x00, 0x00, 0x00
|
||||
.byte 0x14, 0x00, 0x00, 0x00
|
||||
.byte 0x0a, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80F64D8
|
||||
gUnknown_80F64D8: @ 80F64D8
|
||||
@ replacing .incbin "baserom.gba", 0x000f64d8, 0x24
|
||||
.byte 0x91, 0xf2, 0x90, 0xf2, 0x8f, 0xf2, 0x8e, 0xf2, 0x8d, 0xf2, 0x8c, 0xf2, 0x8b, 0xf2, 0x8a, 0xf2, 0x89, 0xf2, 0xc8, 0xf2, 0xc7, 0xf2, 0xc6, 0xf2, 0xc5, 0xf2, 0xc4, 0xf2, 0xc3, 0xf2, 0xc2, 0xf2
|
||||
.byte 0xc1, 0xf2, 0xc0, 0xf2
|
||||
|
||||
.global gUnknown_80F64FC
|
||||
gUnknown_80F64FC: @ 80F64FC
|
||||
@ replacing .incbin "baserom.gba", 0x000f64fc, 0x24
|
||||
.byte 0x84, 0x03, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00
|
||||
.byte 0x64, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80F6520
|
||||
gUnknown_80F6520: @ 80F6520
|
||||
@ replacing .incbin "baserom.gba", 0x000f6520, 0x24
|
||||
.byte 0x5a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00
|
||||
.byte 0x0a, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80F6544
|
||||
gUnknown_80F6544: @ 80F6544
|
||||
@ replacing .incbin "baserom.gba", 0x000f6544, 0x24
|
||||
.byte 0x91, 0xf2, 0x90, 0xf2, 0x8f, 0xf2, 0x8e, 0xf2, 0x8d, 0xf2, 0x8c, 0xf2, 0x8b, 0xf2, 0x8a, 0xf2, 0x89, 0xf2, 0xc8, 0xf2, 0xc7, 0xf2, 0xc6, 0xf2, 0xc5, 0xf2, 0xc4, 0xf2, 0xc3, 0xf2, 0xc2, 0xf2
|
||||
.byte 0xc1, 0xf2, 0xc0, 0xf2
|
||||
|
||||
.global gUnknown_80F6568
|
||||
gUnknown_80F6568: @ 80F6568
|
||||
@ replacing .incbin "baserom.gba", 0x000f6568, 0x88
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff
|
||||
.byte 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff
|
||||
.byte 0x03, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff
|
||||
.byte 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff
|
||||
.byte 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00
|
||||
|
||||
.global gUnknown_80F65F0
|
||||
gUnknown_80F65F0: @ 80F65F0
|
||||
@ replacing .incbin "baserom.gba", 0x000f65f0, 0x14
|
||||
.byte 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x04, 0x04
|
||||
|
||||
.global gUnknown_80F6604
|
||||
gUnknown_80F6604: @ 80F6604
|
||||
@ replacing .incbin "baserom.gba", 0x000f6604, 0x20
|
||||
.string "zmappat\0"
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
.string "pksdir0\0"
|
||||
|
||||
|
|
|
|||
62
data/data_80F59C8_0.s
Normal file
62
data/data_80F59C8_0.s
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
#include "constants/status.h"
|
||||
.section .rodata
|
||||
#.incbin "baserom.gba", 0xF59C4, 0x4
|
||||
|
||||
.string "pksdir0\0"
|
||||
.global gUnknown_80F6490
|
||||
gUnknown_80F6490: @ 80F6490
|
||||
@ replacing .incbin "baserom.gba", 0x000f6490, 0x24
|
||||
.byte 0x00, 0x00, 0x00, 0x0
|
||||
.byte 0x0f, 0x00, 0x00, 0x00
|
||||
.byte 0xff, 0x00, 0x00, 0x00
|
||||
.byte 0xff, 0x0f, 0x00, 0x00
|
||||
.byte 0xff, 0xff, 0x00, 0x00
|
||||
.byte 0xff, 0xff, 0x0f, 0x00
|
||||
.byte 0xff, 0xff, 0xff, 0x00
|
||||
.byte 0xff, 0xff, 0xff, 0x0f
|
||||
.byte 0xff, 0xff, 0xff, 0xff
|
||||
|
||||
.global gUnknown_80F64B4
|
||||
gUnknown_80F64B4: @ 80F64B4
|
||||
@ replacing .incbin "baserom.gba", 0x000f64b4, 0x24
|
||||
.byte 0x5a, 0x00, 0x00, 0x00
|
||||
.byte 0x50, 0x00, 0x00, 0x00
|
||||
.byte 0x46, 0x00, 0x00, 0x00
|
||||
.byte 0x3c, 0x00, 0x00, 0x00
|
||||
.byte 0x32, 0x00, 0x00, 0x00
|
||||
.byte 0x28, 0x00, 0x00, 0x00
|
||||
.byte 0x1e, 0x00, 0x00, 0x00
|
||||
.byte 0x14, 0x00, 0x00, 0x00
|
||||
.byte 0x0a, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80F64D8
|
||||
gUnknown_80F64D8: @ 80F64D8
|
||||
@ replacing .incbin "baserom.gba", 0x000f64d8, 0x24
|
||||
.byte 0x91, 0xf2, 0x90, 0xf2, 0x8f, 0xf2, 0x8e, 0xf2, 0x8d, 0xf2, 0x8c, 0xf2, 0x8b, 0xf2, 0x8a, 0xf2, 0x89, 0xf2, 0xc8, 0xf2, 0xc7, 0xf2, 0xc6, 0xf2, 0xc5, 0xf2, 0xc4, 0xf2, 0xc3, 0xf2, 0xc2, 0xf2
|
||||
.byte 0xc1, 0xf2, 0xc0, 0xf2
|
||||
|
||||
.global gUnknown_80F64FC
|
||||
gUnknown_80F64FC: @ 80F64FC
|
||||
@ replacing .incbin "baserom.gba", 0x000f64fc, 0x24
|
||||
.byte 0x84, 0x03, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00
|
||||
.byte 0x64, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80F6520
|
||||
gUnknown_80F6520: @ 80F6520
|
||||
@ replacing .incbin "baserom.gba", 0x000f6520, 0x24
|
||||
.byte 0x5a, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00
|
||||
.byte 0x0a, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_80F6544
|
||||
gUnknown_80F6544: @ 80F6544
|
||||
@ replacing .incbin "baserom.gba", 0x000f6544, 0x24
|
||||
.byte 0x91, 0xf2, 0x90, 0xf2, 0x8f, 0xf2, 0x8e, 0xf2, 0x8d, 0xf2, 0x8c, 0xf2, 0x8b, 0xf2, 0x8a, 0xf2, 0x89, 0xf2, 0xc8, 0xf2, 0xc7, 0xf2, 0xc6, 0xf2, 0xc5, 0xf2, 0xc4, 0xf2, 0xc3, 0xf2, 0xc2, 0xf2
|
||||
.byte 0xc1, 0xf2, 0xc0, 0xf2
|
||||
|
||||
.global gUnknown_80F6568
|
||||
gUnknown_80F6568: @ 80F6568
|
||||
@ replacing .incbin "baserom.gba", 0x000f6568, 0x88
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff
|
||||
.byte 0x01, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff
|
||||
.byte 0x03, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff
|
||||
.byte 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0xfb, 0xff, 0xff, 0xff
|
||||
20
include/dungeon_map.h
Normal file
20
include/dungeon_map.h
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef GUARD_DUNGEON_MAP_H
|
||||
#define GUARD_DUNGEON_MAP_H
|
||||
|
||||
extern bool8 gShowMonsterDotsInDungeonMap;
|
||||
extern bool8 gShowDungeonMap;
|
||||
|
||||
void SetDungeonMapToNotShown(void);
|
||||
void OpenDungeonMapFile(void);
|
||||
void InitDungeonMap(bool8 a0);
|
||||
void CloseDungeonMapFile(void);
|
||||
void LoadDungeonMapPalette(void);
|
||||
void ShowDungeonMapAtPos(s32 x, s32 y);
|
||||
void CopyDungeonMapToVram(void);
|
||||
void ShowPlayerDotOnMap(void);
|
||||
void ResetMapPlayerDotFrames(void);
|
||||
void ShowWholeRevealedDungeonMap(void);
|
||||
void UpdateBgTilemapForDungeonMap(bool8 a0);
|
||||
void TryResetDungeonMapTilesScheduledForCopy(void);
|
||||
|
||||
#endif
|
||||
|
|
@ -8,6 +8,10 @@
|
|||
#include "constants/global.h"
|
||||
#include "constants/monster.h"
|
||||
|
||||
#define VERSION_BLUE 0
|
||||
#define VERSION_RED 1
|
||||
#define GAME_VERSION VERSION_RED
|
||||
|
||||
// IDE support
|
||||
#if defined(__APPLE__) || defined(__CYGWIN__)
|
||||
#define _(x) x
|
||||
|
|
|
|||
|
|
@ -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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -82,16 +82,16 @@ 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 unk1820E; // x26
|
||||
bool8 unk1820F; // x27
|
||||
bool8 showAllFloorItems; // x26
|
||||
bool8 showInvisibleTrapsMonsters; // x27
|
||||
/* 0x18210 */ bool8 hallucinating; // x28 Displays Substitute and flower sprites when the player has the Cross-Eyed status.
|
||||
bool8 unk18211; // x29
|
||||
u8 unk18212; // x2A
|
||||
bool8 unk18213; // x2B
|
||||
u8 unk18214; // x2C
|
||||
bool8 inFloorMapMode; // x2C
|
||||
u8 unk18215; // x2D
|
||||
u8 unk18216; // x2E
|
||||
u8 unk18217; // x2F
|
||||
|
|
@ -332,6 +332,35 @@ typedef struct unkDungeon57C
|
|||
#define UNK12A18_ARR_COUNT 29
|
||||
#define UNK12A18_ARR_COUNT_2 9
|
||||
|
||||
// Some palette?
|
||||
struct UnkDungeonGlobal_1822C_Sub
|
||||
{
|
||||
u32 arr[8];
|
||||
};
|
||||
|
||||
#define DUNGEON_MAP_MAX_Y (DUNGEON_MAX_SIZE_Y / 2)
|
||||
#define DUNGEON_MAP_MAX_X (DUNGEON_MAX_SIZE_X / 2)
|
||||
|
||||
struct DungeonMapVramCopy
|
||||
{
|
||||
u32 *vramPtr;
|
||||
u32 *mapArrayPtr;
|
||||
bool8 *boolPtr;
|
||||
};
|
||||
|
||||
#define MAX_SCHEDULED_DUNGEON_MAP_COPIES 40
|
||||
|
||||
struct DungeonMap
|
||||
{
|
||||
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
|
||||
typedef struct Dungeon
|
||||
{
|
||||
|
|
@ -447,8 +476,8 @@ typedef struct Dungeon
|
|||
/* 0x17B44 */ OpenedFile *sprites[MONSTER_MAX];
|
||||
/* 0x181E4 */ OpenedFile *paletFile;
|
||||
/* 0x181E8 */ UnkDungeonGlobal_unk181E8_sub unk181e8;
|
||||
u8 fill18220[0x1BDD4 - 0x1822C];
|
||||
struct UnkStructDungeon1BDD4 unk1BDD4;
|
||||
/* 0x1822C */ struct DungeonMap dungeonMap;
|
||||
/* 0x1BDD4 */ struct UnkStructDungeon1BDD4 unk1BDD4;
|
||||
/* 0x1BE14 */ struct MessageLogString messageLogStrings[MESSAGE_LOG_STRINGS_COUNT];
|
||||
/* 0x1C570 */ DungeonLocation unk1C570;
|
||||
/* 0x1C574 */ FloorProperties unk1C574;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -199,7 +199,8 @@ SECTIONS {
|
|||
src/code_803E46C.o(.text);
|
||||
src/code_803E724.o(.text);
|
||||
src/code_8040094.o(.text);
|
||||
asm/code_8040094.o(.text);
|
||||
src/dungeon_map.o(.text);
|
||||
src/code_8040094_1.o(.text);
|
||||
src/code_8041AD0.o(.text);
|
||||
src/code_804267C.o(.text);
|
||||
src/code_8042B34.o(.text);
|
||||
|
|
@ -535,6 +536,9 @@ SECTIONS {
|
|||
src/code_803D110.o(.rodata);
|
||||
data/data_80F59C8_3.o(.rodata);
|
||||
src/code_803E724.o(.rodata);
|
||||
data/data_80F59C8_0.o(.rodata);
|
||||
src/dungeon_map.o(.rodata);
|
||||
src/code_8040094_1.o(.rodata);
|
||||
data/data_80F59C8.o(.rodata);
|
||||
src/dungeon_message.o(.rodata);
|
||||
src/dungeon_move.o(.rodata);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,13 +32,10 @@ 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();
|
||||
void sub_8042E5C();
|
||||
void sub_8040B60();
|
||||
void sub_8040788();
|
||||
void sub_800F7D0(DungeonPos *);
|
||||
void sub_803E874(s32, s32);
|
||||
void sub_803EAF0(s32, s32);
|
||||
|
|
@ -82,7 +79,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();
|
||||
|
||||
|
|
@ -108,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--;
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -55,15 +56,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);
|
||||
|
|
@ -280,14 +280,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:
|
||||
|
|
@ -675,11 +675,11 @@ void sub_803F27C(bool8 a0)
|
|||
if (!a0) {
|
||||
strPtr->blinded = 0;
|
||||
strPtr->hallucinating = 0;
|
||||
strPtr->unk1820F = 0;
|
||||
strPtr->showInvisibleTrapsMonsters = 0;
|
||||
strPtr->unk1820D = FALSE;
|
||||
strPtr->unk18211 = 0;
|
||||
strPtr->unk1820E = FALSE;
|
||||
strPtr->unk1820B = 0;
|
||||
strPtr->showAllFloorItems = FALSE;
|
||||
strPtr->allTilesRevealed = 0;
|
||||
strPtr->unk1820C = 0;
|
||||
}
|
||||
|
||||
|
|
@ -689,7 +689,7 @@ void sub_803F27C(bool8 a0)
|
|||
strPtr->unk18212 = 0;
|
||||
strPtr->unk1821B = 0;
|
||||
strPtr->unk1821C = 0;
|
||||
strPtr->unk18214 = 0;
|
||||
strPtr->inFloorMapMode = 0;
|
||||
strPtr->unk18215 = 1;
|
||||
sub_803F38C();
|
||||
|
||||
|
|
@ -731,7 +731,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;
|
||||
|
|
@ -784,7 +784,7 @@ void sub_803F508(Entity *a0)
|
|||
sub_806CD90();
|
||||
}
|
||||
sub_8049ED4();
|
||||
sub_8040A84();
|
||||
ShowWholeRevealedDungeonMap();
|
||||
}
|
||||
|
||||
void sub_803F580(u8 a0)
|
||||
|
|
@ -794,7 +794,7 @@ void sub_803F580(u8 a0)
|
|||
|
||||
if (cameraTarget != NULL && EntityIsValid(cameraTarget)) {
|
||||
s32 i;
|
||||
u32 before, unk18214;
|
||||
u32 before, inFloorMapMode;
|
||||
EntityInfo *info = GetEntInfo(cameraTarget);
|
||||
|
||||
strPtr->cameraPixelPosMirror = strPtr->cameraPixelPos;
|
||||
|
|
@ -807,24 +807,24 @@ void sub_803F580(u8 a0)
|
|||
|
||||
if (HasHeldItem(cameraTarget, ITEM_X_RAY_SPECS) && info->isTeamLeader) {
|
||||
strPtr->unk1820D = TRUE;
|
||||
strPtr->unk1820E = TRUE;
|
||||
strPtr->showAllFloorItems = TRUE;
|
||||
}
|
||||
else {
|
||||
strPtr->unk1820D = info->powerEars;
|
||||
strPtr->unk1820E = info->scanning;
|
||||
strPtr->showAllFloorItems = info->scanning;
|
||||
}
|
||||
|
||||
strPtr->unk18211 = info->stairSpotter;
|
||||
before = strPtr->blinded;
|
||||
unk18214 = strPtr->unk18214;
|
||||
if (unk18214 == 0) {
|
||||
inFloorMapMode = strPtr->inFloorMapMode;
|
||||
if (inFloorMapMode == 0) {
|
||||
u32 unkVar;
|
||||
if (info->blinkerClassStatus.status == STATUS_BLINKER) {
|
||||
strPtr->blinded = 1;
|
||||
unkVar = 0xE;
|
||||
}
|
||||
else {
|
||||
strPtr->blinded = unk18214;
|
||||
strPtr->blinded = inFloorMapMode;
|
||||
unkVar = 0;
|
||||
}
|
||||
|
||||
|
|
@ -854,17 +854,17 @@ void sub_803F580(u8 a0)
|
|||
sub_8041888(0);
|
||||
}
|
||||
|
||||
before = strPtr->unk1820F;
|
||||
before = strPtr->showInvisibleTrapsMonsters;
|
||||
if (CanSeeInvisibleMonsters(cameraTarget)) {
|
||||
strPtr->unk1820F = 1;
|
||||
strPtr->showInvisibleTrapsMonsters = 1;
|
||||
}
|
||||
else {
|
||||
strPtr->unk1820F = 0;
|
||||
strPtr->showInvisibleTrapsMonsters = 0;
|
||||
}
|
||||
|
||||
if (before != strPtr->unk1820F) {
|
||||
if (before != strPtr->showInvisibleTrapsMonsters) {
|
||||
sub_8049ED4();
|
||||
sub_8040A84();
|
||||
ShowWholeRevealedDungeonMap();
|
||||
sub_8041888(0);
|
||||
}
|
||||
|
||||
|
|
@ -894,7 +894,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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -910,7 +910,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) {
|
||||
|
|
@ -940,7 +940,7 @@ void sub_803F878(s32 a0, s32 a1)
|
|||
strPtr->cameraPos.x = a0 / 6144;
|
||||
strPtr->cameraPos.y = a1 / 6144;
|
||||
strPtr->unk1820D = FALSE;
|
||||
strPtr->unk1820E = FALSE;
|
||||
strPtr->showAllFloorItems = FALSE;
|
||||
strPtr->unk18211 = 0;
|
||||
strPtr->unk18216 = 0;
|
||||
|
||||
|
|
@ -999,7 +999,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();
|
||||
}
|
||||
|
|
@ -1140,7 +1140,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;
|
||||
|
|
@ -1192,7 +1192,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,15 +11,13 @@
|
|||
#include "play_time.h"
|
||||
|
||||
extern s32 gUnknown_80F6568[];
|
||||
extern u8 gUnknown_202EE01;
|
||||
extern const char gUnknown_80F6604; // "zmappat"
|
||||
extern struct FileArchive gDungeonFileArchive;
|
||||
extern OpenedFile *gUnknown_202EE04;
|
||||
|
||||
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
|
||||
|
||||
|
|
@ -29,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);
|
||||
}
|
||||
|
||||
|
|
@ -71,13 +69,3 @@ void sub_80400D4(void)
|
|||
if(gDungeon->unk181e8.unk18200 == 0)
|
||||
gDungeon->unk181e8.unk18200 = gDungeon->unk181e8.unk18204;
|
||||
}
|
||||
|
||||
void sub_8040124(void)
|
||||
{
|
||||
gUnknown_202EE01 = 0;
|
||||
}
|
||||
|
||||
void sub_8040130(void)
|
||||
{
|
||||
gUnknown_202EE04 = OpenFileAndGetFileDataPtr(&gUnknown_80F6604, &gDungeonFileArchive);
|
||||
}
|
||||
|
|
|
|||
485
src/code_8040094_1.c
Normal file
485
src/code_8040094_1.c
Normal file
|
|
@ -0,0 +1,485 @@
|
|||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "dungeon_message.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "dungeon.h"
|
||||
#include "code_8009804.h"
|
||||
#include "code_800E9E4.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "code_804267C.h"
|
||||
#include "weather.h"
|
||||
#include "tile_types.h"
|
||||
#include "constants/move_id.h"
|
||||
#include "constants/weather.h"
|
||||
#include "constants/type.h"
|
||||
|
||||
struct UnkStruct_8040094
|
||||
{
|
||||
u16 unk0;
|
||||
u16 unk2;
|
||||
DungeonPos unk4;
|
||||
DungeonPos unk8;
|
||||
s32 unkC;
|
||||
s32 unk10;
|
||||
};
|
||||
|
||||
extern u8 sub_800EC94(s32 param_1);
|
||||
extern s32 sub_800E710(s32 a0, u16 a1);
|
||||
extern void sub_800569C(DungeonPos *, axdata *, u8);
|
||||
extern void sub_800EEC8(u16 r0);
|
||||
extern void sub_800EF64(void);
|
||||
extern void sub_8042DD4(s32 a0, Entity *a1, s32 a2);
|
||||
extern void sub_803E46C(u32);
|
||||
extern u8 sub_800EA44(s32 species, u16 a2);
|
||||
extern s32 sub_800E790(s32 species, u16 a2);
|
||||
extern void sub_806CDD4(Entity *entity, u8, u32 direction);
|
||||
extern s32 sub_800E52C(struct UnkStruct_8040094 *a0);
|
||||
extern s32 sub_800EA84(struct UnkStruct_8040094 *a0);
|
||||
extern bool8 sub_800E838(struct UnkStruct_8040094 *a0, s32 a1);
|
||||
extern bool8 sub_800E9A8(s32 a0);
|
||||
extern void sub_803EA10(void);
|
||||
extern void sub_803E708(s32, u32);
|
||||
extern void sub_800EEF8(u16 a0);
|
||||
extern bool8 sub_803F428(DungeonPos *pos);
|
||||
extern void sub_800EEE0(u16 a0);
|
||||
extern s32 sub_800EBC8(struct UnkStruct_8040094 *a0);
|
||||
extern bool8 sub_800E7D0(struct UnkStruct_8040094 *a0);
|
||||
extern s32 sub_800ED20(u16 param_1);
|
||||
extern u8 sub_800EC84(s32 param_1);
|
||||
extern bool8 MoveMatchesBideClassStatus(Entity *pokemon, Move *move);
|
||||
extern bool8 IsSleeping(Entity *pokemon);
|
||||
extern void sub_80421C0(Entity *pokemon, u16);
|
||||
|
||||
extern u8 gUnknown_203B40D;
|
||||
extern s16 gUnknown_2026E4E;
|
||||
extern s32 gDungeonBrightness;
|
||||
extern s32 gUnknown_202F224;
|
||||
|
||||
extern const u8 *const gPtrMagnitudeMessage;
|
||||
extern const s32 gUnknown_8106A8C[];
|
||||
|
||||
u16 sub_80412E0(u16 moveId, u8 weather, bool32 a2);
|
||||
static bool32 sub_804143C(Entity *entity, Move *move);
|
||||
static bool8 sub_80414C0(Entity *entity, Move *move);
|
||||
static bool8 sub_804141C(u16 moveId, u8 weather, bool32 a2);
|
||||
static void sub_8040C4C(Entity *entity, Move *move, bool32 a2);
|
||||
static void sub_8041038(struct UnkStruct_8040094 *a0, Entity *entity, Move *move, bool32 a2);
|
||||
static void sub_8041108(struct UnkStruct_8040094 *a0, Entity *entity, Move *move, bool32 a2);
|
||||
static void sub_8041500(struct UnkStruct_8040094 *a0);
|
||||
|
||||
bool8 sub_8040BB0(Entity *entity, Move *move, bool8 a2)
|
||||
{
|
||||
bool32 r8 = sub_804143C(entity, move);
|
||||
bool8 r9 = sub_804141C(move->id, GetApparentWeather(entity), r8);
|
||||
s32 r4 = sub_800ECB8(sub_80412E0(move->id, GetApparentWeather(entity), r8))->unk0;
|
||||
|
||||
if (!sub_8042768(entity))
|
||||
return r9;
|
||||
if (sub_80414C0(entity, move))
|
||||
return r9;
|
||||
if (!a2)
|
||||
return r9;
|
||||
|
||||
if (r4 != 0) {
|
||||
sub_8040C4C(entity, move, r8);
|
||||
}
|
||||
return r9;
|
||||
}
|
||||
|
||||
static void sub_8040C4C(Entity *entity, Move *move, bool32 a2)
|
||||
{
|
||||
u8 savedUnkVar;
|
||||
s32 r4;
|
||||
struct UnkStruct_8040094 sp;
|
||||
u16 r9 = sub_80412E0(move->id, GetApparentWeather(entity), a2);
|
||||
EntityInfo *entInfo = GetEntInfo(entity);
|
||||
bool8 r8 = sub_800EC94(move->id);
|
||||
s32 apparentId = entInfo->apparentID;
|
||||
s32 r2 = sub_800E710(apparentId, sub_80412E0(move->id, GetApparentWeather(entity), TRUE));
|
||||
|
||||
if (r2 != -1) {
|
||||
sub_800569C(&sp.unk8, &entity->axObj.axdata, r2);
|
||||
}
|
||||
else {
|
||||
sp.unk8 = (DungeonPos) {0};
|
||||
}
|
||||
|
||||
sp.unk0 = r9;
|
||||
sp.unk2 = entInfo->apparentID;
|
||||
sp.unk4.x = entity->pixelPos.x / 256;
|
||||
sp.unk4.y = entity->pixelPos.y / 256;
|
||||
sp.unkC = entInfo->action.direction;
|
||||
sp.unk10 = 0;
|
||||
sub_8041500(&sp);
|
||||
sub_800EEC8(r9);
|
||||
sub_800EF64();
|
||||
sub_803E46C(0x58);
|
||||
r4 = sub_800EA84(&sp);
|
||||
sub_8042DD4(r4, entity, 5);
|
||||
savedUnkVar = gUnknown_203B40D;
|
||||
while (1) {
|
||||
if (!sub_800E9A8(r4))
|
||||
break;
|
||||
if (!r8)
|
||||
break;
|
||||
|
||||
gUnknown_203B40D = 1;
|
||||
if (gUnknown_2026E4E != 0x1010) {
|
||||
gUnknown_2026E4E += 0x101;
|
||||
}
|
||||
|
||||
if (gDungeonBrightness >= 5) {
|
||||
gDungeonBrightness -= 4;
|
||||
}
|
||||
else {
|
||||
gDungeonBrightness = 0;
|
||||
r8 = FALSE;
|
||||
}
|
||||
sub_803EA10();
|
||||
sub_803E46C(0x26);
|
||||
}
|
||||
gUnknown_203B40D = savedUnkVar;
|
||||
}
|
||||
|
||||
void sub_8040DA0(Entity *entity, Move *move)
|
||||
{
|
||||
s32 i;
|
||||
s32 soundEffectId;
|
||||
Entity *anotherEntity;
|
||||
struct UnkStruct_8040094 sp;
|
||||
bool32 r9 = sub_804143C(entity, move);
|
||||
bool8 var_28 = FALSE;
|
||||
EntityInfo *entInfo = GetEntInfo(entity);
|
||||
u8 var_24 = sub_800EA44(entInfo->apparentID, sub_80412E0(move->id, GetApparentWeather(entity), r9));
|
||||
|
||||
sub_8041038(&sp, entity, move, r9);
|
||||
if (sub_800E838(&sp, 1)) {
|
||||
anotherEntity = gDungeon->unk181e8.cameraTarget;
|
||||
}
|
||||
else if (move->id == MOVE_SILVER_WIND) {
|
||||
anotherEntity = gDungeon->unk181e8.cameraTarget;
|
||||
}
|
||||
else {
|
||||
anotherEntity = entity;
|
||||
}
|
||||
|
||||
if (!EntityIsValid(anotherEntity)) {
|
||||
anotherEntity = entity;
|
||||
}
|
||||
|
||||
sp.unk4.x = anotherEntity->pixelPos.x / 256;
|
||||
sp.unk4.y = anotherEntity->pixelPos.y / 256;
|
||||
|
||||
if (!sub_8042768(anotherEntity))
|
||||
return;
|
||||
if (sub_80414C0(entity, move))
|
||||
return;
|
||||
|
||||
if (move->id == MOVE_MAGNITUDE) {
|
||||
gUnknown_202F224 = DungeonRandInt(7);
|
||||
gDungeon->unk181e8.unk18204 = gDungeon->unk181e8.unk18200 = gUnknown_8106A8C[gUnknown_202F224];
|
||||
gFormatArgs[0] = gUnknown_202F224 + 4;
|
||||
LogMessageByIdWithPopupCheckUser(anotherEntity, gPtrMagnitudeMessage);
|
||||
sub_80421C0(anotherEntity, 0x1A4);
|
||||
}
|
||||
else if (move->id == MOVE_EARTHQUAKE) {
|
||||
gDungeon->unk181e8.unk18204 = gDungeon->unk181e8.unk18200 = 12;
|
||||
sub_80421C0(anotherEntity, 0x1A4);
|
||||
}
|
||||
|
||||
soundEffectId = sub_800E790(entInfo->apparentID, sub_80412E0(move->id, GetApparentWeather(entity), r9));
|
||||
if (soundEffectId != 0x3E5) {
|
||||
PlaySoundEffect((u16) soundEffectId);
|
||||
}
|
||||
|
||||
if (var_24 == 99) {
|
||||
if (sub_8042768(anotherEntity)) {
|
||||
s32 direction = entInfo->action.direction;
|
||||
sub_8041108(&sp, entity, move, r9);
|
||||
for (i = 0; i < NUM_DIRECTIONS; i++) {
|
||||
direction--;
|
||||
direction &= DIRECTION_MASK;
|
||||
sub_806CDD4(entity, 0, direction);
|
||||
sub_803E708(2, 0x15);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (var_24 == 98) {
|
||||
if (sub_8042768(anotherEntity)) {
|
||||
s32 direction = entInfo->action.direction;
|
||||
sub_8041108(&sp, entity, move, r9);
|
||||
for (i = 0; i < NUM_DIRECTIONS + 1; i++) {
|
||||
direction &= DIRECTION_MASK;
|
||||
sub_806CDD4(entity, 0, direction);
|
||||
sub_803E708(2, 0x15);
|
||||
direction++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
sub_806CDD4(entity, var_24, entInfo->action.direction);
|
||||
entity->unk21 = 0;
|
||||
for (i = 0; i < 120; i++) {
|
||||
u32 unk;
|
||||
|
||||
sub_803E46C(0x59);
|
||||
unk = entity->axObj.axdata.sub1.unk10;
|
||||
if (var_24 == 9) {
|
||||
unk |= 2;
|
||||
}
|
||||
|
||||
if ((unk & 2) && !var_28) {
|
||||
sub_8041108(&sp, entity, move, r9);
|
||||
var_28 = TRUE;
|
||||
}
|
||||
if (unk & 1)
|
||||
break;
|
||||
if (entity->unk21 != 0)
|
||||
break;
|
||||
}
|
||||
entity->unk21 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8041038(struct UnkStruct_8040094 *a0, Entity *entity, Move *move, bool32 a2)
|
||||
{
|
||||
EntityInfo *entInfo = GetEntInfo(entity);
|
||||
u16 var_24 = sub_80412E0(move->id, GetApparentWeather(entity), a2);
|
||||
|
||||
if (sub_800ECB8(var_24)->unk2 != 0) {
|
||||
s32 r2 = sub_800E710(entInfo->apparentID, sub_80412E0(move->id, GetApparentWeather(entity), a2));
|
||||
|
||||
if (r2 != -1) {
|
||||
sub_800569C(&a0->unk8, &entity->axObj.axdata, r2);
|
||||
}
|
||||
else {
|
||||
a0->unk8 = (DungeonPos) {0};
|
||||
}
|
||||
|
||||
a0->unk0 = var_24;
|
||||
a0->unk2 = entInfo->apparentID;
|
||||
a0->unk4.x = entity->pixelPos.x / 256;
|
||||
a0->unk4.y = entity->pixelPos.y / 256;
|
||||
a0->unkC = entInfo->action.direction;
|
||||
a0->unk10 = 0;
|
||||
}
|
||||
else {
|
||||
a0->unk0 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8041108(struct UnkStruct_8040094 *a0, Entity *entity, Move *move, bool32 a2)
|
||||
{
|
||||
u16 r4 = sub_80412E0(move->id, GetApparentWeather(entity), a2);
|
||||
s32 var = sub_800ECB8(r4)->unk2;
|
||||
|
||||
if (a0->unk0 != 0 && var != 0) {
|
||||
sub_8041500(a0);
|
||||
sub_800EEF8(r4);
|
||||
sub_800EF64();
|
||||
sub_803E46C(0x5A);
|
||||
sub_8042DD4(sub_800E52C(a0), entity, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8041168(Entity *entity, Entity *entity2, Move *move, DungeonPos *pos)
|
||||
{
|
||||
s32 var2;
|
||||
s32 var3;
|
||||
struct UnkStruct_8040094 sp;
|
||||
bool32 r5 = (sub_804143C(entity, move) != 0);
|
||||
u16 r10 = sub_80412E0(move->id, GetApparentWeather(entity), r5);
|
||||
s32 var = sub_800ECB8(r10)->unk4;
|
||||
EntityInfo *ent2Info = NULL;
|
||||
|
||||
if (EntityIsValid(entity2)) {
|
||||
ent2Info = GetEntInfo(entity2);
|
||||
if (!sub_8042768(entity2))
|
||||
return;
|
||||
}
|
||||
else {
|
||||
if (!sub_803F428(pos))
|
||||
return;
|
||||
}
|
||||
|
||||
if (sub_80414C0(entity, move))
|
||||
return;
|
||||
if (var == 0)
|
||||
return;
|
||||
|
||||
var2 = sub_800ECA4(var)->unk1c;
|
||||
if (var2 != -1) {
|
||||
if (EntityIsValid(entity2)) {
|
||||
sub_800569C(&sp.unk8, &entity2->axObj.axdata, var2);
|
||||
}
|
||||
else {
|
||||
sp.unk8 = (DungeonPos) {0};
|
||||
}
|
||||
}
|
||||
else {
|
||||
sp.unk8 = (DungeonPos) {0};
|
||||
}
|
||||
|
||||
sp.unk0 = r10;
|
||||
if (ent2Info != NULL) {
|
||||
sp.unk2 = ent2Info->apparentID;
|
||||
sp.unk4.x = entity2->pixelPos.x / 256;
|
||||
sp.unk4.y = entity2->pixelPos.y / 256;
|
||||
sp.unkC = 0;
|
||||
}
|
||||
else {
|
||||
s32 x, y;
|
||||
|
||||
sp.unk2 = 1;
|
||||
x = X_POS_TO_PIXELPOS(pos->x);
|
||||
sp.unk4.x = x / 256;
|
||||
y = Y_POS_TO_PIXELPOS(pos->y);
|
||||
sp.unk4.y = y / 256;
|
||||
sp.unkC = 0;
|
||||
}
|
||||
|
||||
sp.unk10 = 0;
|
||||
sub_8041500(&sp);
|
||||
sub_800EEE0(r10);
|
||||
sub_800EF64();
|
||||
var3 = sub_800EBC8(&sp);
|
||||
sub_803E46C(0x5B);
|
||||
sub_8042DD4(var3, entity2, 6);
|
||||
while (1) {
|
||||
if (!sub_800E9A8(var3))
|
||||
break;
|
||||
sub_803E46C(0x28);
|
||||
}
|
||||
}
|
||||
|
||||
u16 sub_80412E0(u16 moveId, u8 weather, bool32 a2)
|
||||
{
|
||||
u16 ret = moveId;
|
||||
|
||||
if (moveId == MOVE_WEATHER_BALL) {
|
||||
switch (weather) {
|
||||
case WEATHER_CLEAR:
|
||||
case WEATHER_FOG:
|
||||
case WEATHER_CLOUDY:
|
||||
ret = moveId;
|
||||
break;
|
||||
case WEATHER_SUNNY:
|
||||
ret = 0x19E;
|
||||
break;
|
||||
case WEATHER_SANDSTORM:
|
||||
ret = 0x1A1;
|
||||
break;
|
||||
case WEATHER_RAIN:
|
||||
ret = 0x1A0;
|
||||
break;
|
||||
case WEATHER_HAIL:
|
||||
case WEATHER_SNOW:
|
||||
ret = 0x19F;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (a2) {
|
||||
switch (moveId) {
|
||||
case MOVE_DIG:
|
||||
ret = 0x1A2;
|
||||
break;
|
||||
case MOVE_RAZOR_WIND:
|
||||
ret = 0x1A3;
|
||||
break;
|
||||
case MOVE_FOCUS_PUNCH:
|
||||
ret = 0x1A4;
|
||||
break;
|
||||
case MOVE_SKY_ATTACK:
|
||||
ret = 0x1A5;
|
||||
break;
|
||||
case MOVE_SOLARBEAM:
|
||||
ret = 0x1A6;
|
||||
break;
|
||||
case MOVE_FLY:
|
||||
ret = 0x1A7;
|
||||
break;
|
||||
case MOVE_DIVE:
|
||||
ret = 0x1A8;
|
||||
break;
|
||||
case MOVE_BOUNCE:
|
||||
ret = 0x1A9;
|
||||
break;
|
||||
case MOVE_SKULL_BASH:
|
||||
ret = 0x1AA;
|
||||
break;
|
||||
case MOVE_CURSE:
|
||||
ret = 0x1AB;
|
||||
break;
|
||||
case MOVE_SNORE:
|
||||
ret = 0x1AC;
|
||||
break;
|
||||
case MOVE_SLEEP_TALK:
|
||||
ret = 0x1AD;
|
||||
break;
|
||||
default:
|
||||
ret = moveId;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
UNUSED static s32 sub_8041400(u16 moveId, u8 weather, bool32 a2)
|
||||
{
|
||||
return sub_800ED20(sub_80412E0(moveId, weather, a2));
|
||||
}
|
||||
|
||||
static bool8 sub_804141C(u16 moveId, u8 weather, bool32 a2)
|
||||
{
|
||||
return sub_800EC84(sub_80412E0(moveId, weather, a2));
|
||||
}
|
||||
|
||||
static bool32 sub_804143C(Entity *entity, Move *move)
|
||||
{
|
||||
if (move->id == MOVE_CURSE) {
|
||||
if (EntityIsValid(entity) && GetEntityType(entity) == ENTITY_MONSTER) {
|
||||
if (GetEntInfo(entity)->types[0] == TYPE_GHOST || GetEntInfo(entity)->types[1] == TYPE_GHOST)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else if (move->id == MOVE_SNORE || move->id == MOVE_SLEEP_TALK) {
|
||||
if (!IsSleeping(entity))
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
else if (move->id == MOVE_SOLARBEAM) {
|
||||
if (GetApparentWeather(entity) == WEATHER_SUNNY)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return MoveMatchesBideClassStatus(entity, move) != FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_80414C0(Entity *entity, Move *move)
|
||||
{
|
||||
if (move->id == MOVE_DIVE) {
|
||||
if (IsTileGround(GetTileAtEntitySafe(entity)))
|
||||
return TRUE;
|
||||
}
|
||||
if (move->id == MOVE_DIG) {
|
||||
if (GetTerrainType(GetTileAtEntitySafe(entity)) != TERRAIN_TYPE_NORMAL)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_8041500(struct UnkStruct_8040094 *a0)
|
||||
{
|
||||
if (sub_800E7D0(a0)) {
|
||||
sub_803E46C(0x5C);
|
||||
sub_8052740(0x5D);
|
||||
}
|
||||
}
|
||||
|
|
@ -32,12 +32,11 @@ extern u32 gStatusSpriteMasks_InvisibleClassStatus[];
|
|||
extern u32 gStatusSpriteMasks_BlinkerClassStatus[];
|
||||
extern u32 gStatusSpriteMasks_MuzzledStatus[];
|
||||
|
||||
|
||||
extern void sub_803ED30(u8, Entity *pokemon, u8, u8);
|
||||
extern void sub_804151C(Entity *pokemon, u32 r1, u8 r2);
|
||||
extern u32 sub_806F62C(u32);
|
||||
extern u32 sub_800DC9C(s32 a0);
|
||||
extern void sub_800569C(DungeonPos *, axdata *, u8);
|
||||
extern void PlaySoundEffect(u32);
|
||||
extern void sub_8041550(Entity *pokemon, u32, u32, u32, u32, u32);
|
||||
|
||||
void EntityUpdateStatusSprites(Entity *entity);
|
||||
|
||||
|
|
@ -51,8 +50,78 @@ extern void sub_8042E98(void);
|
|||
extern void sub_800EE5C(u32);
|
||||
extern void sub_800EF64(void);
|
||||
|
||||
void sub_804178C(u8 param_1);
|
||||
u32 sub_8041764(unkStruct_80416E0 *param_1, bool8 param_2);
|
||||
s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3);
|
||||
s32 sub_8041550(Entity *entity, s32 a1, u8 a2, u8 a3, s32 a4, u8 a5);
|
||||
|
||||
s32 sub_804151C(Entity *entity, s32 r1, u8 r2)
|
||||
{
|
||||
u8 r3 = sub_800DC9C(r1);
|
||||
return sub_8041550(entity, r1, r2, r3, 2, 0);
|
||||
}
|
||||
|
||||
s32 sub_8041550(Entity *entity, s32 a1, u8 a2, u8 a3, s32 a4, u8 a5)
|
||||
{
|
||||
s32 i;
|
||||
EntityInfo *entInfo;
|
||||
DungeonPos pos;
|
||||
unkStruct_80416E0 sp;
|
||||
unkStruct_2039DB0 unkStruct;
|
||||
PixelPos pixelPos;
|
||||
s32 var;
|
||||
s32 r4;
|
||||
|
||||
if (!EntityIsValid(entity))
|
||||
return -1;
|
||||
entInfo = GetEntInfo(entity);
|
||||
if (!sub_8042768(entity))
|
||||
return -1;
|
||||
if (!a5 && entInfo->unkFF == 2)
|
||||
return -1;
|
||||
|
||||
if (a4 != 0) {
|
||||
sub_804178C(a4 == 2);
|
||||
}
|
||||
|
||||
sub_800569C(&pos, &entity->axObj.axdata, a3);
|
||||
if (pos.x != 99 && pos.y != 99) {
|
||||
pixelPos.x = entity->pixelPos.x + (pos.x << 8);
|
||||
pixelPos.y = (entity->pixelPos.y + (pos.y << 8)) - entInfo->unk174.raw;
|
||||
}
|
||||
else {
|
||||
pixelPos.x = entity->pixelPos.x;
|
||||
pixelPos.y = entity->pixelPos.y - entInfo->unk174.raw;
|
||||
}
|
||||
|
||||
var = entity->pixelPos.y / 256;
|
||||
var -= gDungeon->unk181e8.cameraPixelPos.y;
|
||||
var /= 2;
|
||||
var++;
|
||||
|
||||
sp.unk0 = a1;
|
||||
sp.unk4 = 0;
|
||||
sp.dir = -1;
|
||||
sp.x = pixelPos.x / 256;
|
||||
sp.y = pixelPos.y / 256;
|
||||
sp.unk14 = -1;
|
||||
sp.unk10 = 0;
|
||||
sp.unk12 = 0;
|
||||
sp.unk18 = var;
|
||||
|
||||
sub_8004E8C(&unkStruct);
|
||||
r4 = sub_8041764(&sp, FALSE);
|
||||
if (a2) {
|
||||
for (i = 0; i < 100; i++) {
|
||||
if (!sub_800E9A8(r4)) {
|
||||
break;
|
||||
}
|
||||
sub_803E46C(0x42);
|
||||
}
|
||||
r4 = -1;
|
||||
}
|
||||
return r4;
|
||||
}
|
||||
|
||||
s32 sub_80416A4(DungeonPos *pos_1, u32 param_2, bool8 param_3)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -55,7 +56,7 @@ struct UnkStruct_203B414
|
|||
struct DungeonPos unk8C[16];
|
||||
};
|
||||
|
||||
EWRAM_INIT DungeonPos gUnknown_203B410 = {100, 100};
|
||||
EWRAM_INIT DungeonPos gPlayerDotMapPosition = {100, 100};
|
||||
static EWRAM_INIT struct UnkStruct_203B414 *sUnknown_203B414 = NULL;
|
||||
EWRAM_INIT Dungeon *gDungeon = NULL;
|
||||
EWRAM_INIT u8 *gSerializedData_203B41C = NULL;
|
||||
|
|
@ -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);
|
||||
|
|
@ -291,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);
|
||||
|
|
@ -391,8 +388,8 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
|
|||
dungeonPtr[i] = 0;
|
||||
}
|
||||
|
||||
gUnknown_203B410.x = 0; // Needed to match
|
||||
gUnknown_203B410.x = 100;
|
||||
gPlayerDotMapPosition.x = 0; // Needed to match
|
||||
gPlayerDotMapPosition.x = 100;
|
||||
|
||||
if (!r6) {
|
||||
gDungeon->unk644.unk34 = r8->unkF;
|
||||
|
|
@ -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);
|
||||
|
|
@ -435,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;
|
||||
|
|
@ -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,8 +658,8 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
|
|||
}
|
||||
sub_8040094(0);
|
||||
sub_803EAF0(0, 0);
|
||||
sub_8040150(r6);
|
||||
sub_8040A84();
|
||||
InitDungeonMap(r6);
|
||||
ShowWholeRevealedDungeonMap();
|
||||
gDungeon->unkB8 = NULL;
|
||||
gDungeon->unk644.unk28 = 0;
|
||||
gDungeon->unk644.unk29 = 0;
|
||||
|
|
@ -686,7 +683,7 @@ void RunDungeon(struct UnkStruct_RunDungeon *r8)
|
|||
}
|
||||
else {
|
||||
sub_803F4A0(GetLeader());
|
||||
sub_8040A84();
|
||||
ShowWholeRevealedDungeonMap();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -217,10 +217,10 @@ bool8 sub_8045804(Entity *ent)
|
|||
if (!monInfo->isNotTeamMember)
|
||||
return TRUE;
|
||||
|
||||
if (!saveTyping->unk1820F && monInfo->invisibleClassStatus.status == STATUS_INVISIBLE)
|
||||
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)
|
||||
|
|
@ -252,7 +252,7 @@ bool8 sub_8045888(Entity *ent)
|
|||
|
||||
switch (GetEntityType(ent)) {
|
||||
case ENTITY_ITEM: {
|
||||
if (!saveTyping->unk1820E && !sub_803F428(&ent->pos))
|
||||
if (!saveTyping->showAllFloorItems && !sub_803F428(&ent->pos))
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
|
@ -260,7 +260,7 @@ bool8 sub_8045888(Entity *ent)
|
|||
EntityInfo *monInfo = GetEntInfo(ent);
|
||||
|
||||
if (monInfo->isNotTeamMember) {
|
||||
if (!gDungeon->unk181e8.unk1820F && monInfo->invisibleClassStatus.status == STATUS_INVISIBLE)
|
||||
if (!gDungeon->unk181e8.showInvisibleTrapsMonsters && monInfo->invisibleClassStatus.status == STATUS_INVISIBLE)
|
||||
return FALSE;
|
||||
|
||||
if (!saveTyping->unk1820D && !sub_803F428(&ent->pos))
|
||||
|
|
@ -269,7 +269,7 @@ bool8 sub_8045888(Entity *ent)
|
|||
break;
|
||||
}
|
||||
case ENTITY_TRAP: {
|
||||
if (!gDungeon->unk181e8.unk1820F && !ent->isVisible)
|
||||
if (!gDungeon->unk181e8.showInvisibleTrapsMonsters && !ent->isVisible)
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,12 +77,11 @@ 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);
|
||||
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;
|
||||
|
|
@ -168,7 +167,7 @@ void DungeonHandlePlayerInput(void)
|
|||
}
|
||||
|
||||
gDungeon->unk644.unk2F = 0;
|
||||
sub_8040A78();
|
||||
ResetMapPlayerDotFrames();
|
||||
if (gDungeon->unk1 != 0) {
|
||||
gDungeon->unk1 = 0;
|
||||
if (!ShouldMonsterRunAwayAndShowEffect(GetLeader(), TRUE)) {
|
||||
|
|
@ -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;
|
||||
gDungeon->unk181e8.unk18214 = 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.unk18214 = 0;
|
||||
gDungeon->unk181e8.inFloorMapMode = FALSE;
|
||||
gGameOptionsRef->mapOption = prevMapOption;
|
||||
gUnknown_202EE00 = 1;
|
||||
sub_8040A84();
|
||||
gShowMonsterDotsInDungeonMap = TRUE;
|
||||
ShowWholeRevealedDungeonMap();
|
||||
SetBGOBJEnableFlags(0);
|
||||
sub_803E46C(0x2F);
|
||||
sub_803E46C(0x2F);
|
||||
|
|
@ -845,7 +844,7 @@ bool8 sub_805E874(void)
|
|||
if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP && GetEntityType(tile->object) == ENTITY_TRAP) {
|
||||
if (tile->object->isVisible)
|
||||
return FALSE;
|
||||
if (gDungeon->unk181e8.unk1820F)
|
||||
if (gDungeon->unk181e8.showInvisibleTrapsMonsters)
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
|
@ -853,7 +852,7 @@ bool8 sub_805E874(void)
|
|||
if (tile->object != NULL && GetEntityType(tile->object) == ENTITY_TRAP) {
|
||||
if (tile->object->isVisible)
|
||||
return FALSE;
|
||||
if (gDungeon->unk181e8.unk1820F)
|
||||
if (gDungeon->unk181e8.showInvisibleTrapsMonsters)
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@ extern u8 gUnknown_810AC62; // 0xC
|
|||
extern u8 gUnknown_810AC68; // 0x8
|
||||
extern u8 gUnknown_810AC64; // 0x8
|
||||
extern u8 gUnknown_810AC66; // 0x8
|
||||
extern DungeonPos gUnknown_203B410;
|
||||
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,15 +44,15 @@ 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;
|
||||
(target->pos).x = x;
|
||||
(target->pos).y = y;
|
||||
if (info->isTeamLeader) {
|
||||
gUnknown_203B410.x = x;
|
||||
gUnknown_203B410.y = y;
|
||||
gPlayerDotMapPosition.x = x;
|
||||
gPlayerDotMapPosition.y = y;
|
||||
}
|
||||
tile->monster = target;
|
||||
if (info->isTeamLeader) {
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
@ -247,7 +247,7 @@ void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target) {
|
|||
param_1->unk44[1].level = 0;
|
||||
param_1->IQSkills = info->IQSkillMenuFlags;
|
||||
if (gDungeon->unk644.unk16 != 0) {
|
||||
param_1->unk4C = sub_806A4DC(info);
|
||||
param_1->unk4C = sub_806A4DC(info);
|
||||
}
|
||||
else {
|
||||
param_1->unk4C = 3;
|
||||
|
|
@ -265,7 +265,7 @@ void sub_8069844(struct unkStruct_808FF20 *param_1, Entity *target) {
|
|||
}
|
||||
if (FixedPointToInt(info->belly) == 0) {
|
||||
if (info->isTeamLeader) {
|
||||
param_1->unk58[uVar15] = 19;
|
||||
param_1->unk58[uVar15] = 19;
|
||||
}
|
||||
else {
|
||||
param_1->unk58[uVar15] = 59;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
@ -2061,7 +2061,7 @@ void sub_806C51C(Entity *entity)
|
|||
if (entInfo->isNotTeamMember && (entInfo->apparentID == MONSTER_DEOXYS_ATTACK || entInfo->apparentID == MONSTER_DEOXYS_DEFENSE || entInfo->apparentID == MONSTER_DEOXYS_SPEED)) {
|
||||
r4 = TRUE;
|
||||
}
|
||||
if (entInfo->invisibleClassStatus.status == STATUS_INVISIBLE && !gDungeon->unk181e8.unk1820F) {
|
||||
if (entInfo->invisibleClassStatus.status == STATUS_INVISIBLE && !gDungeon->unk181e8.showInvisibleTrapsMonsters) {
|
||||
r4 = TRUE;
|
||||
}
|
||||
if (r4) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -877,7 +877,7 @@ extern SpriteOAM gUnknown_202EDC0;
|
|||
void sub_807FA9C(void)
|
||||
{
|
||||
s32 x, y;
|
||||
bool8 unkBool = gDungeon->unk181e8.unk1820F;
|
||||
bool8 unkBool = gDungeon->unk181e8.showInvisibleTrapsMonsters;
|
||||
|
||||
for (y = gDungeon->unk181e8.cameraPos.y - 5; y < gDungeon->unk181e8.cameraPos.y + 5; y++) {
|
||||
for (x = gDungeon->unk181e8.cameraPos.x - 6; x < gDungeon->unk181e8.cameraPos.x + 6; x++) {
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
597
src/dungeon_map.c
Normal file
597
src/dungeon_map.c
Normal file
|
|
@ -0,0 +1,597 @@
|
|||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "dungeon_map.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "file_system.h"
|
||||
#include "cpu.h"
|
||||
#include "dungeon.h"
|
||||
#include "game_options.h"
|
||||
#include "bg_palette_buffer.h"
|
||||
#include "code_8009804.h"
|
||||
#include "code_800E9E4.h"
|
||||
#include "dungeon_generation.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "trap.h"
|
||||
#include "text.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "constants/trap.h"
|
||||
|
||||
extern struct FileArchive gDungeonFileArchive;
|
||||
extern DungeonPos gPlayerDotMapPosition;
|
||||
extern s32 gUnknown_202EDD0;
|
||||
|
||||
extern void nullsub_11(SpriteOAM *, s32, UnkSpriteMem *, unkStruct_2039DB0 *);
|
||||
extern u8 GetFloorType(void);
|
||||
extern bool8 sub_8094C48(void);
|
||||
extern bool8 sub_8045804(Entity *ent);
|
||||
extern bool8 DoesNotHaveShadedMap(void);
|
||||
|
||||
struct UnkStruct1
|
||||
{
|
||||
u32 **unk0;
|
||||
};
|
||||
|
||||
struct DungeonMapGfx
|
||||
{
|
||||
struct UnkStruct1 *gfx;
|
||||
RGB *pal;
|
||||
};
|
||||
|
||||
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
|
||||
|
||||
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 *sDungeonMapVramDst = NULL;
|
||||
|
||||
// All traps look the same on Map, except for the Wonder Tile.
|
||||
static const u8 sTrapToMapGfxId[NUM_TRAPS] =
|
||||
{
|
||||
[TRAP_TRIP_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_MUD_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_STICKY_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_GRIMY_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_SUMMON_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_PITFALL_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_WARP_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_WHIRLWIND_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_SPIN_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_SLUMBER_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_SLOW_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_SEAL_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_POISON_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_SELFDESTRUCT_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_EXPLOSION_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_PP_ZERO_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_CHESTNUT_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_WONDER_TILE] = MAP_GFX_WONDER_TILE,
|
||||
[TRAP_POKEMON_TRAP] = MAP_GFX_TRAP,
|
||||
[TRAP_SPIKE_TRAP] = MAP_GFX_TRAP,
|
||||
};
|
||||
|
||||
void SetDungeonMapToNotShown(void)
|
||||
{
|
||||
gShowDungeonMap = FALSE;
|
||||
}
|
||||
|
||||
void OpenDungeonMapFile(void)
|
||||
{
|
||||
sDungeonMapGfxFile = OpenFileAndGetFileDataPtr("zmappat", &gDungeonFileArchive);
|
||||
}
|
||||
|
||||
void InitDungeonMap(bool8 a0)
|
||||
{
|
||||
s32 i, j;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
if (!a0) {
|
||||
gPlayerDotMapPosition.x = 100;
|
||||
gPlayerDotMapPosition.y = 100;
|
||||
}
|
||||
|
||||
gDungeon->dungeonMap.scheduledVramCopiesCount = 0;
|
||||
gDungeon->dungeonMap.copyToVram = TRUE;
|
||||
gDungeon->dungeonMap.resetTilesScheduledForCopy = FALSE;
|
||||
gShowMonsterDotsInDungeonMap = TRUE;
|
||||
sDungeonMapVramDst = (void *) VRAM + 0x1700;
|
||||
gShowDungeonMap = TRUE;
|
||||
LoadDungeonMapPalette();
|
||||
}
|
||||
|
||||
void CloseDungeonMapFile(void)
|
||||
{
|
||||
if (sDungeonMapGfxFile != NULL) {
|
||||
CloseFile(sDungeonMapGfxFile);
|
||||
}
|
||||
SetDungeonMapToNotShown();
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void LoadDungeonMapPalette(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (sDungeonMapGfxFile == NULL)
|
||||
return;
|
||||
if (!gShowDungeonMap)
|
||||
return;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (i == 14) {
|
||||
SetBGPaletteBufferColorArray(238, &gFontPalette[1]);
|
||||
nullsub_5(238, &gFontPalette[1]);
|
||||
}
|
||||
else {
|
||||
SetBGPaletteBufferColorArray(i + 224, &((struct DungeonMapGfx *)(sDungeonMapGfxFile->data))->pal[i]);
|
||||
nullsub_5(i + 224, &((struct DungeonMapGfx *)(sDungeonMapGfxFile->data))->pal[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShowDungeonMapAtPos(s32 x, s32 y)
|
||||
{
|
||||
s32 yAdd = 0;
|
||||
const Tile *tile;
|
||||
Dungeon *dungeon;
|
||||
bool8 blinded;
|
||||
u32 terrainType;
|
||||
bool8 hallucinating;
|
||||
bool8 showItems;
|
||||
bool8 showHiddenTraps;
|
||||
bool8 allTilesRevealed;
|
||||
bool8 var_24;
|
||||
bool8 tileKnown;
|
||||
s32 mapGfxType;
|
||||
s32 xDiv2, yDiv2;
|
||||
u32 *src, *dst;
|
||||
bool8 lookForMapObject;
|
||||
s32 r3, yMinus;
|
||||
|
||||
dungeon = gDungeon;
|
||||
lookForMapObject = TRUE;
|
||||
|
||||
if (sDungeonMapGfxFile == NULL)
|
||||
return;
|
||||
if (!gShowDungeonMap)
|
||||
return;
|
||||
if (sub_800EC74())
|
||||
return;
|
||||
if (GAME_VERSION == VERSION_BLUE) {
|
||||
if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) {
|
||||
if (x < 0 || y < 1 || x >= DUNGEON_MAX_SIZE_X || y >= DUNGEON_MAX_SIZE_Y)
|
||||
return;
|
||||
yAdd = 1;
|
||||
}
|
||||
else {
|
||||
if (x < 0 || y < 2 || x >= DUNGEON_MAX_SIZE_X || y >= DUNGEON_MAX_SIZE_Y)
|
||||
return;
|
||||
yAdd = 0;
|
||||
}
|
||||
// FUN_0001d198(); Unknown function call which doesn't exist in red
|
||||
}
|
||||
else if (GAME_VERSION == VERSION_RED) {
|
||||
if (x < 0 || y < 2 || x >= DUNGEON_MAX_SIZE_X || y >= DUNGEON_MAX_SIZE_Y - 1)
|
||||
return;
|
||||
}
|
||||
|
||||
tile = GetTile(x, y);
|
||||
terrainType = GetTerrainType(tile);
|
||||
hallucinating = gDungeon->unk181e8.hallucinating;
|
||||
blinded = gDungeon->unk181e8.blinded;
|
||||
showHiddenTraps = gDungeon->unk181e8.showInvisibleTrapsMonsters;
|
||||
showItems = gDungeon->unk181e8.showAllFloorItems;
|
||||
allTilesRevealed = gDungeon->unk181e8.allTilesRevealed;
|
||||
if (blinded) {
|
||||
tileKnown = tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_REVEALED;
|
||||
var_24 = FALSE;
|
||||
}
|
||||
else {
|
||||
if (allTilesRevealed) {
|
||||
tileKnown = TRUE;
|
||||
}
|
||||
else {
|
||||
tileKnown = tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_REVEALED;
|
||||
}
|
||||
|
||||
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
|
||||
var_24 = gDungeon->unk181e8.unk18211;
|
||||
}
|
||||
else {
|
||||
var_24 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (sub_8094C48() && !gDungeon->unk1356C) {
|
||||
mapGfxType = MAP_GFX_NOTHING;
|
||||
if (!blinded) {
|
||||
Entity *entity = tile->monster;
|
||||
if (entity != NULL) {
|
||||
s32 entType = GetEntityType(entity);
|
||||
if (gShowMonsterDotsInDungeonMap && entType == ENTITY_MONSTER && sub_8045804(entity)) {
|
||||
EntityInfo *entInfo = GetEntInfo(entity);
|
||||
if (IsExperienceLocked(entInfo->joinedAt.id) || entInfo->monsterBehavior == 1 || entInfo->monsterBehavior == 4) {
|
||||
mapGfxType = MAP_GFX_ALLY;
|
||||
}
|
||||
else {
|
||||
if (entInfo->isNotTeamMember) {
|
||||
mapGfxType = MAP_GFX_ENEMY;
|
||||
}
|
||||
else if (entInfo->isTeamLeader) {
|
||||
gPlayerDotMapPosition.x = x;
|
||||
gPlayerDotMapPosition.y = y;
|
||||
if (gDungeon->unk181e8.inFloorMapMode) {
|
||||
mapGfxType = MAP_GFX_PLAYER;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mapGfxType = MAP_GFX_ALLY;
|
||||
}
|
||||
}
|
||||
lookForMapObject = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lookForMapObject && !blinded) {
|
||||
Entity *entity = tile->object;
|
||||
if (entity != NULL) {
|
||||
s32 entType = GetEntityType(entity);
|
||||
if (!tileKnown) {
|
||||
mapGfxType = MAP_GFX_NOTHING;
|
||||
if (entType == ENTITY_ITEM) {
|
||||
if ((showItems || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) {
|
||||
mapGfxType = MAP_GFX_ITEM;
|
||||
}
|
||||
}
|
||||
lookForMapObject = FALSE;
|
||||
}
|
||||
else {
|
||||
if (entType == ENTITY_TRAP) {
|
||||
if (entity->isVisible || showHiddenTraps) {
|
||||
Trap *trap = GetTrapData(entity);
|
||||
mapGfxType = sTrapToMapGfxId[trap->id];
|
||||
lookForMapObject = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (lookForMapObject) {
|
||||
if (entType == ENTITY_ITEM) {
|
||||
if ((showItems || (tile->spawnOrVisibilityFlags & 2)) && terrainType != TERRAIN_TYPE_WALL) {
|
||||
mapGfxType = MAP_GFX_ITEM;
|
||||
lookForMapObject = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (lookForMapObject) {
|
||||
if (terrainType != TERRAIN_TYPE_NORMAL) {
|
||||
mapGfxType = MAP_GFX_NOTHING;
|
||||
lookForMapObject = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!tileKnown) {
|
||||
if (var_24 && (tile->terrainType & TERRAIN_TYPE_STAIRS)) {
|
||||
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
|
||||
mapGfxType = MAP_GFX_STAIRS;
|
||||
}
|
||||
else {
|
||||
mapGfxType = MAP_GFX_SPECIAL_STAIRS;
|
||||
}
|
||||
lookForMapObject = FALSE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((tile->terrainType & TERRAIN_TYPE_STAIRS)) {
|
||||
if (GetFloorType() == FLOOR_TYPE_NORMAL) {
|
||||
mapGfxType = MAP_GFX_STAIRS;
|
||||
}
|
||||
else {
|
||||
mapGfxType = MAP_GFX_SPECIAL_STAIRS;
|
||||
}
|
||||
lookForMapObject = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!lookForMapObject) {
|
||||
if (hallucinating) {
|
||||
if (mapGfxType != MAP_GFX_NOTHING) {
|
||||
mapGfxType = MAP_GFX_GREEN_DOT;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mapGfxType == MAP_GFX_NOTHING) {
|
||||
if (!tileKnown) {
|
||||
mapGfxType = 1;
|
||||
}
|
||||
else if (terrainType != TERRAIN_TYPE_NORMAL) {
|
||||
mapGfxType = 1;
|
||||
}
|
||||
else {
|
||||
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) {
|
||||
terrainLine &= ~(MAP_GFX_TERRAIN_LINE_UP);
|
||||
}
|
||||
}
|
||||
if (y >= 1) {
|
||||
const Tile *adjacentTile = GetTile(x, y - 1);
|
||||
if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) {
|
||||
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) {
|
||||
terrainLine &= ~(MAP_GFX_TERRAIN_LINE_RIGHT);
|
||||
}
|
||||
}
|
||||
if (x >= 1) {
|
||||
const Tile *adjacentTile = GetTile(x - 1, y);
|
||||
if (GetTerrainType(adjacentTile) == TERRAIN_TYPE_NORMAL) {
|
||||
terrainLine &= ~(MAP_GFX_TERRAIN_LINE_LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
mapGfxType = (s16) terrainLine;
|
||||
if (tile->spawnOrVisibilityFlags & VISIBILITY_FLAG_VISITED) {
|
||||
mapGfxType = (s16) (mapGfxType + MAP_GFX_TERRAIN_TILES_VISITED);
|
||||
}
|
||||
else {
|
||||
mapGfxType = (s16) (mapGfxType + MAP_GFX_TERRAIN_TILES_REVEALED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Not possible on GBA.
|
||||
if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) {
|
||||
mapGfxType = (s16) (mapGfxType + 128);
|
||||
}
|
||||
else if (DoesNotHaveShadedMap() == TRUE) {
|
||||
mapGfxType = (s16) (mapGfxType + 64);
|
||||
}
|
||||
}
|
||||
else {
|
||||
mapGfxType = 1;
|
||||
gPlayerDotMapPosition.x = 100;
|
||||
}
|
||||
|
||||
xDiv2 = x / 2;
|
||||
yMinus = (y - 2) + yAdd;
|
||||
yDiv2 = (yMinus / 2);
|
||||
r3 = x - (xDiv2 * 2);
|
||||
r3 += (yMinus - (yDiv2 * 2)) * 2;
|
||||
dst = dungeon->dungeonMap.perTile[yDiv2][xDiv2].arr;
|
||||
{
|
||||
struct DungeonMapGfx *ptr = ((struct DungeonMapGfx *)(&sDungeonMapGfxFile->data));
|
||||
src = ptr->gfx->unk0[mapGfxType * 4 + r3];
|
||||
}
|
||||
|
||||
dst[0] = (dst[0] & src[0]) | src[1];
|
||||
dst[1] = (dst[1] & src[2]) | src[3];
|
||||
dst[2] = (dst[2] & src[4]) | src[5];
|
||||
dst[3] = (dst[3] & src[6]) | src[7];
|
||||
dst[4] = (dst[4] & src[8]) | src[9];
|
||||
dst[5] = (dst[5] & src[10]) | src[11];
|
||||
dst[6] = (dst[6] & src[12]) | src[13];
|
||||
dst[7] = (dst[7] & src[14]) | src[15];
|
||||
|
||||
if (!dungeon->dungeonMap.copyAllAtOnce && !dungeon->dungeonMap.tileScheduledForCopy[yDiv2][xDiv2]) {
|
||||
s32 id;
|
||||
|
||||
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.copyAllAtOnce = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CopyDungeonMapToVram(void)
|
||||
{
|
||||
s32 i;
|
||||
Dungeon *dungeon = gDungeon;
|
||||
if (dungeon == NULL)
|
||||
return;
|
||||
if (!dungeon->dungeonMap.copyToVram)
|
||||
return;
|
||||
if (sub_800EC74())
|
||||
return;
|
||||
|
||||
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++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
*dst++ = *src++;
|
||||
}
|
||||
*ptr->boolPtr = FALSE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
void *dst, *src;
|
||||
|
||||
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) {
|
||||
CpuCopy(dst, src, 0x100);
|
||||
}
|
||||
dst += 0x100;
|
||||
src += 0x100;
|
||||
}
|
||||
dungeon->dungeonMap.resetTilesScheduledForCopy = TRUE;
|
||||
}
|
||||
dungeon->dungeonMap.scheduledVramCopiesCount = 0;
|
||||
}
|
||||
|
||||
void ShowPlayerDotOnMap(void)
|
||||
{
|
||||
if (gDungeon->unk181e8.inFloorMapMode)
|
||||
return;
|
||||
if (!gDungeon->unk181e8.unk18219)
|
||||
return;
|
||||
if (gPlayerDotMapPosition.x >= 100)
|
||||
return;
|
||||
if ((++sPlayerDotFrames & 8) == 0) {
|
||||
SpriteOAM sprite = {0};
|
||||
|
||||
SpriteSetAffine1(&sprite, 0);
|
||||
SpriteSetAffine2(&sprite, 0);
|
||||
SpriteSetObjMode(&sprite, 0);
|
||||
SpriteSetMosaic(&sprite, 0);
|
||||
SpriteSetBpp(&sprite, 0);
|
||||
SpriteSetShape(&sprite, 0);
|
||||
SpriteSetMatrixNum(&sprite, 0);
|
||||
SpriteSetSize(&sprite, 0);
|
||||
SpriteSetTileNum(&sprite, 0x215);
|
||||
SpriteSetPriority(&sprite, 0);
|
||||
SpriteSetPalNum(&sprite, 15);
|
||||
SpriteSetUnk6_0(&sprite, 0);
|
||||
SpriteSetUnk6_1(&sprite, 0);
|
||||
// Nulled on GBA
|
||||
if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) {
|
||||
SpriteSetX(&sprite, (gPlayerDotMapPosition.x * 4) + 16);
|
||||
SpriteSetY(&sprite, (gPlayerDotMapPosition.y + 1) * 4);
|
||||
nullsub_11(&sprite,0x100,NULL,NULL);
|
||||
}
|
||||
else {
|
||||
SpriteSetX(&sprite, (gPlayerDotMapPosition.x * 4) + 8);
|
||||
SpriteSetY(&sprite, (gPlayerDotMapPosition.y) * 4);
|
||||
AddSprite(&sprite,0x100,NULL,NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ResetMapPlayerDotFrames(void)
|
||||
{
|
||||
sPlayerDotFrames = 0;
|
||||
}
|
||||
|
||||
void ShowWholeRevealedDungeonMap(void)
|
||||
{
|
||||
s32 x, y;
|
||||
|
||||
gDungeon->dungeonMap.copyAllAtOnce = TRUE;
|
||||
|
||||
for (y = 0; y < DUNGEON_MAX_SIZE_Y; y++) {
|
||||
for (x = 0; x < DUNGEON_MAX_SIZE_X; x++) {
|
||||
ShowDungeonMapAtPos(x, y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateBgTilemapForDungeonMap(bool8 a0)
|
||||
{
|
||||
s32 id, count1, count2;
|
||||
s32 i, j;
|
||||
u16 tilemapValue;
|
||||
|
||||
if (gGameOptionsRef->mapOption == TOP_MAP_AND_TEAM_NO_BOTTOM) {
|
||||
count1 = 15;
|
||||
count2 = 0;
|
||||
}
|
||||
else if (a0) {
|
||||
count1 = 14;
|
||||
count2 = 0;
|
||||
}
|
||||
else {
|
||||
count1 = 16;
|
||||
count2 = 3;
|
||||
}
|
||||
|
||||
tilemapValue = TILEMAP_TILE_NUM(0xB8) | TILEMAP_PAL(14);
|
||||
id = 1;
|
||||
for (i = 0; i < count1; i++) {
|
||||
u16 *ptr = &gBgTilemaps[0][id][1];
|
||||
for (j = 0; j < 28; j++) {
|
||||
*ptr++ = tilemapValue++;
|
||||
}
|
||||
id++;
|
||||
}
|
||||
|
||||
for (i = 0; i < count2; i++) {
|
||||
u16 *ptr = &gBgTilemaps[0][id][1];
|
||||
for (j = 0; j < 28; j++) {
|
||||
*ptr++ = TILEMAP_TILE_NUM(0) | TILEMAP_PAL(14);
|
||||
}
|
||||
id++;
|
||||
}
|
||||
}
|
||||
|
||||
// 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.resetTilesScheduledForCopy) {
|
||||
#ifdef BUGFIX
|
||||
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.tileScheduledForCopy[y][x] = FALSE;
|
||||
}
|
||||
}
|
||||
#endif // BUGFIX
|
||||
dungeon->dungeonMap.resetTilesScheduledForCopy = FALSE;
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
@ -442,7 +442,7 @@ void sub_8049BB0(s32 x, s32 y)
|
|||
|
||||
void sub_8049ED4(void)
|
||||
{
|
||||
bool32 hallucinating, unk1820F;
|
||||
bool32 hallucinating, showInvisibleTrapsMonsters;
|
||||
u16 *src;
|
||||
const Tile *tile;
|
||||
s32 r7;
|
||||
|
|
@ -455,7 +455,7 @@ void sub_8049ED4(void)
|
|||
|
||||
Dungeon *dungeon = gDungeon;
|
||||
hallucinating = dungeon->unk181e8.hallucinating;
|
||||
unk1820F = dungeon->unk181e8.unk1820F;
|
||||
showInvisibleTrapsMonsters = dungeon->unk181e8.showInvisibleTrapsMonsters;
|
||||
x = dungeon->unk181e8.cameraPixelPos.x >> 3;
|
||||
r10 = gUnknown_80F6A4A[30 + x];
|
||||
var_48 = gUnknown_80F6C06[30 + x];
|
||||
|
|
@ -484,7 +484,7 @@ void sub_8049ED4(void)
|
|||
{
|
||||
Entity *tileObject = tile->object;
|
||||
if (tileObject != NULL) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || showInvisibleTrapsMonsters)) {
|
||||
u8 trapType = GetEntInfo(tileObject)->flags;
|
||||
src = &dungeon->unk12A18[trapType][r7];
|
||||
}
|
||||
|
|
@ -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++;
|
||||
|
|
@ -529,7 +529,7 @@ void sub_8049ED4(void)
|
|||
{
|
||||
Entity *tileObject = tile->object;
|
||||
if (tileObject != NULL) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || showInvisibleTrapsMonsters)) {
|
||||
u8 trapType = GetEntInfo(tileObject)->flags;
|
||||
src = &dungeon->unk12A18[trapType][r7];
|
||||
}
|
||||
|
|
@ -562,7 +562,7 @@ void sub_804A1F0(s32 a0, s32 a1)
|
|||
{
|
||||
const Tile *tile;
|
||||
u16 *src;
|
||||
bool32 hallucinating, unk1820F;
|
||||
bool32 hallucinating, showInvisibleTrapsMonsters;
|
||||
s32 xTemp, yTemp;
|
||||
s32 i;
|
||||
s32 r8;
|
||||
|
|
@ -574,7 +574,7 @@ void sub_804A1F0(s32 a0, s32 a1)
|
|||
|
||||
Dungeon *dungeon = gDungeon;
|
||||
hallucinating = dungeon->unk181e8.hallucinating;
|
||||
unk1820F = dungeon->unk181e8.unk1820F;
|
||||
showInvisibleTrapsMonsters = dungeon->unk181e8.showInvisibleTrapsMonsters;
|
||||
xTemp = dungeon->unk181e8.cameraPixelPos.x + a0;
|
||||
yTemp = dungeon->unk181e8.cameraPixelPos.y + a1;
|
||||
yTemp >>= 3;
|
||||
|
|
@ -599,7 +599,7 @@ void sub_804A1F0(s32 a0, s32 a1)
|
|||
{
|
||||
Entity *tileObject = tile->object;
|
||||
if (tileObject != NULL) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || showInvisibleTrapsMonsters)) {
|
||||
u8 trapType = GetEntInfo(tileObject)->flags;
|
||||
src = &dungeon->unk12A18[trapType][r6];
|
||||
}
|
||||
|
|
@ -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++;
|
||||
|
|
@ -640,7 +640,7 @@ void sub_804A1F0(s32 a0, s32 a1)
|
|||
{
|
||||
Entity *tileObject = tile->object;
|
||||
if (tileObject != NULL) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || showInvisibleTrapsMonsters)) {
|
||||
u8 trapType = GetEntInfo(tileObject)->flags;
|
||||
src = &dungeon->unk12A18[trapType][r6];
|
||||
}
|
||||
|
|
@ -664,7 +664,7 @@ void sub_804A49C(s32 a0, s32 a1)
|
|||
{
|
||||
const Tile *tile;
|
||||
u16 *src;
|
||||
bool32 hallucinating, unk1820F;
|
||||
bool32 hallucinating, showInvisibleTrapsMonsters;
|
||||
s32 xTemp, yTemp;
|
||||
s32 i;
|
||||
s32 var_2C;
|
||||
|
|
@ -676,7 +676,7 @@ void sub_804A49C(s32 a0, s32 a1)
|
|||
|
||||
Dungeon *dungeon = gDungeon;
|
||||
hallucinating = dungeon->unk181e8.hallucinating;
|
||||
unk1820F = dungeon->unk181e8.unk1820F;
|
||||
showInvisibleTrapsMonsters = dungeon->unk181e8.showInvisibleTrapsMonsters;
|
||||
xTemp = dungeon->unk181e8.cameraPixelPos.x + a0;
|
||||
yTemp = dungeon->unk181e8.cameraPixelPos.y + a1;
|
||||
x = xTemp >> 3;
|
||||
|
|
@ -700,7 +700,7 @@ void sub_804A49C(s32 a0, s32 a1)
|
|||
{
|
||||
Entity *tileObject = tile->object;
|
||||
if (tileObject != NULL) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || showInvisibleTrapsMonsters)) {
|
||||
u8 trapType = GetEntInfo(tileObject)->flags;
|
||||
src = &dungeon->unk12A18[trapType][r6];
|
||||
}
|
||||
|
|
@ -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++;
|
||||
|
|
@ -741,7 +741,7 @@ void sub_804A49C(s32 a0, s32 a1)
|
|||
{
|
||||
Entity *tileObject = tile->object;
|
||||
if (tileObject != NULL) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || unk1820F)) {
|
||||
if (GetEntityType(tileObject) == ENTITY_TRAP && (tileObject->isVisible || showInvisibleTrapsMonsters)) {
|
||||
u8 trapType = GetEntInfo(tileObject)->flags;
|
||||
src = &dungeon->unk12A18[trapType][r6];
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -736,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
extern u8 gUnknown_202EE70[MAX_TEAM_BODY_SIZE];
|
||||
extern u8 gUnknown_202EE76[DUNGEON_MAX_WILD_POKEMON_BODY_SIZE];
|
||||
|
||||
extern DungeonPos gUnknown_203B410;
|
||||
extern DungeonPos gPlayerDotMapPosition;
|
||||
extern Entity *gLeaderPointer; // 203B450
|
||||
|
||||
#include "data/dungeon_serializer.h"
|
||||
|
|
@ -450,11 +450,11 @@ 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.unk1820E);
|
||||
WriteBool8(seri, gDungeon->unk181e8.unk1820F);
|
||||
WriteBool8(seri, gDungeon->unk181e8.showAllFloorItems);
|
||||
WriteBool8(seri, gDungeon->unk181e8.showInvisibleTrapsMonsters);
|
||||
WriteBool8(seri, gDungeon->unk181e8.hallucinating);
|
||||
WriteBool8(seri, gDungeon->unk181e8.unk18211);
|
||||
WriteBool8(seri, gDungeon->unk181e8.unk18213);
|
||||
|
|
@ -847,11 +847,11 @@ 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.unk1820E = ReadBool8(seri);
|
||||
gDungeon->unk181e8.unk1820F = ReadBool8(seri);
|
||||
gDungeon->unk181e8.showAllFloorItems = ReadBool8(seri);
|
||||
gDungeon->unk181e8.showInvisibleTrapsMonsters = ReadBool8(seri);
|
||||
gDungeon->unk181e8.hallucinating = ReadBool8(seri);
|
||||
gDungeon->unk181e8.unk18211 = ReadBool8(seri);
|
||||
gDungeon->unk181e8.unk18213 = ReadBool8(seri);
|
||||
|
|
@ -1100,8 +1100,8 @@ static void ReadMonster(DataSerializer *seri, bool8 isTeamMember, s32 index)
|
|||
gLeaderPointer = NULL;
|
||||
|
||||
if (monEntInfo->isTeamLeader) {
|
||||
gUnknown_203B410.x = mon->pos.x;
|
||||
gUnknown_203B410.y = mon->pos.y;
|
||||
gPlayerDotMapPosition.x = mon->pos.x;
|
||||
gPlayerDotMapPosition.y = mon->pos.y;
|
||||
}
|
||||
|
||||
LoadIQSkills(mon);
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
66
src/text.c
66
src/text.c
|
|
@ -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++;
|
||||
}
|
||||
|
|
@ -1994,7 +1994,7 @@ void sub_8007D00(struct UnkTextStruct1 *windows, u32 windowId, s32 x, s32 y, s32
|
|||
|
||||
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)
|
||||
|
|
@ -2071,7 +2071,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)
|
||||
|
|
@ -2175,7 +2175,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)
|
||||
|
|
@ -2266,7 +2266,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)
|
||||
|
|
@ -2799,14 +2799,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;
|
||||
}
|
||||
|
||||
|
|
@ -2822,7 +2822,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++;
|
||||
}
|
||||
|
|
@ -2844,7 +2844,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--;
|
||||
|
|
@ -3148,14 +3148,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3164,14 +3164,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;
|
||||
|
|
@ -3187,8 +3187,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++;
|
||||
|
|
@ -3208,8 +3208,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++;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -247,7 +247,7 @@ void HandleTrap(Entity *pokemon, DungeonPos *pos, int param_3, char param_4)
|
|||
if (HasHeldItem(target, ITEM_TRAP_SCARF)) {
|
||||
text = *gUnknown_80FDB5C;
|
||||
}
|
||||
if ((flag == TRUE) || (gDungeon->unk181e8.unk1820F != 0)) {
|
||||
if ((flag == TRUE) || (gDungeon->unk181e8.showInvisibleTrapsMonsters != 0)) {
|
||||
if (rand < 0) text = *gUnknown_80FDB7C;
|
||||
}
|
||||
else if (rand < 0xf) {
|
||||
|
|
@ -771,7 +771,7 @@ void HandlePokemonTrap(Entity *param_1,DungeonPos *pos)
|
|||
counter++;
|
||||
}
|
||||
}
|
||||
sub_80402AC(x,y);
|
||||
ShowDungeonMapAtPos(x,y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,16 +109,7 @@ gUnknown_202EDE8: /* 202EDE8 (sub_803E250 - sub_803EDF0) */
|
|||
gUnknown_202EDFC: /* 202EDFC (sub_803F27C - sub_803F878) */
|
||||
.space 0x4
|
||||
|
||||
gUnknown_202EE00: /* 202EE00 (sub_8040150 - sub_805D8C8) */
|
||||
.space 0x1
|
||||
gUnknown_202EE01: /* 202EE01 (sub_8040124 - PrintFieldMessage) */
|
||||
.space 0x1
|
||||
gUnknown_202EE02: /* 202EE02 (sub_8040894 - sub_8040A78) */
|
||||
.space 0x2
|
||||
gUnknown_202EE04: /* 202EE04 (sub_8040130 - sub_80402AC) */
|
||||
.space 0x4
|
||||
gUnknown_202EE08: /* 202EE08 (sub_8040150 - sub_8040788) */
|
||||
.space 0x4
|
||||
.include "src/dungeon_map.o"
|
||||
|
||||
gUnknown_202EE0C: /* 202EE0C (sub_80694C0 - sub_806B8CC) */
|
||||
.space 0x4
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user