mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-07 08:35:47 -05:00
start dumping dungeon data
This commit is contained in:
@@ -4,49 +4,7 @@
|
||||
|
||||
|
||||
|
||||
@ dungeon
|
||||
.string "pksdir0\0"
|
||||
.align 2,0
|
||||
|
||||
.global gDungeonFloorCount
|
||||
gDungeonFloorCount: @ 81077A8
|
||||
@ replacing .incbin "baserom.gba", 0x1077A8, 0x40
|
||||
.byte 0x04, 0x06, 0x0a, 0x0e, 0x0a, 0x0b, 0x04, 0x0d, 0x0f, 0x0d, 0x04, 0x0a, 0x06, 0x10, 0x06, 0x18
|
||||
.byte 0x04, 0x1a, 0x0a, 0x29, 0x64, 0x15, 0x05, 0x64, 0x15, 0x0c, 0x64, 0x64, 0x1a, 0x1a, 0x0d, 0x15
|
||||
.byte 0x33, 0x1f, 0x1f, 0x1f, 0x15, 0x1f, 0x10, 0x0d, 0x14, 0x1f, 0x0b, 0x10, 0x15, 0x15, 0x1f, 0x05
|
||||
.byte 0x05, 0x0b, 0x03, 0x33, 0x46, 0x10, 0x1f, 0x14, 0x14, 0x0c, 0x64, 0x4c, 0x29, 0x64, 0x64, 0x02
|
||||
|
||||
.global gUnknown_81077E8
|
||||
gUnknown_81077E8: @ 81077E8
|
||||
@ replacing .incbin "baserom.gba", 0x1077E8, 0x40
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
|
||||
.global gUnknown_8107828
|
||||
gUnknown_8107828: @ 8107828
|
||||
@ replacing .incbin "baserom.gba", 0x107828, 0x85C
|
||||
.byte 0x02, 0x09, 0x00, 0x00, 0x03, 0x0d, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x0a, 0x03, 0x00, 0x00
|
||||
.byte 0x0c, 0x05, 0x00, 0x00, 0x0e, 0x05, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00
|
||||
.byte 0x12, 0x09, 0x00, 0x00, 0x13, 0x28, 0x00, 0x00, 0x14, 0x63, 0x00, 0x00, 0x15, 0x14, 0x00, 0x00
|
||||
.byte 0x17, 0x3b, 0x00, 0x00, 0x17, 0x63, 0x00, 0x00, 0x1a, 0x14, 0x00, 0x00, 0x1a, 0x32, 0x00, 0x00
|
||||
.byte 0x1a, 0x63, 0x00, 0x00, 0x1b, 0x0f, 0x00, 0x00, 0x1b, 0x19, 0x00, 0x00, 0x1b, 0x23, 0x00, 0x00
|
||||
.byte 0x1b, 0x2d, 0x00, 0x00, 0x1b, 0x3c, 0x00, 0x00, 0x1b, 0x46, 0x00, 0x00, 0x1b, 0x50, 0x00, 0x00
|
||||
.byte 0x1d, 0x19, 0x00, 0x00, 0x21, 0x14, 0x00, 0x00, 0x21, 0x1e, 0x00, 0x00, 0x22, 0x1e, 0x00, 0x00
|
||||
.byte 0x23, 0x14, 0x00, 0x00, 0x23, 0x1e, 0x00, 0x00, 0x24, 0x0a, 0x00, 0x00, 0x24, 0x0f, 0x00, 0x00
|
||||
.byte 0x24, 0x14, 0x00, 0x00, 0x25, 0x1e, 0x00, 0x00, 0x29, 0x0f, 0x00, 0x00, 0x29, 0x19, 0x00, 0x00
|
||||
.byte 0x2a, 0x0a, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x31, 0x02, 0x00, 0x00, 0x31, 0x03, 0x00, 0x00
|
||||
.byte 0x31, 0x04, 0x00, 0x00, 0x31, 0x05, 0x00, 0x00, 0x31, 0x06, 0x00, 0x00, 0x31, 0x07, 0x00, 0x00
|
||||
.byte 0x31, 0x08, 0x00, 0x00, 0x31, 0x09, 0x00, 0x00, 0x31, 0x0a, 0x00, 0x00, 0x34, 0x03, 0x00, 0x00
|
||||
.byte 0x34, 0x06, 0x00, 0x00, 0x34, 0x09, 0x00, 0x00, 0x34, 0x0c, 0x00, 0x00, 0x34, 0x0f, 0x00, 0x00
|
||||
.byte 0x34, 0x12, 0x00, 0x00, 0x34, 0x15, 0x00, 0x00, 0x34, 0x18, 0x00, 0x00, 0x34, 0x1b, 0x00, 0x00
|
||||
.byte 0x34, 0x1e, 0x00, 0x00, 0x34, 0x21, 0x00, 0x00, 0x34, 0x24, 0x00, 0x00, 0x34, 0x27, 0x00, 0x00
|
||||
.byte 0x34, 0x2a, 0x00, 0x00, 0x34, 0x2d, 0x00, 0x00, 0x34, 0x30, 0x00, 0x00, 0x34, 0x33, 0x00, 0x00
|
||||
.byte 0x34, 0x36, 0x00, 0x00, 0x34, 0x39, 0x00, 0x00, 0x34, 0x3c, 0x00, 0x00, 0x34, 0x3f, 0x00, 0x00
|
||||
.byte 0x34, 0x42, 0x00, 0x00, 0x34, 0x45, 0x00, 0x00, 0x35, 0x0f, 0x00, 0x00, 0x3b, 0x32, 0x00, 0x00
|
||||
.byte 0x3b, 0x48, 0x00, 0x00, 0x3c, 0x1e, 0x00, 0x00, 0x3c, 0x28, 0x00, 0x00, 0x3e, 0x63, 0x00, 0x00
|
||||
.byte 0x3f, 0xff, 0x00, 0x00
|
||||
|
||||
.global gUnknown_810795C
|
||||
gUnknown_810795C: @ 810795C
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "structs/str_dungeon.h"
|
||||
|
||||
s32 GetDungeonFloorCount(u8 dungeon);
|
||||
s32 GetDungeonStartingFloor(u8 dungeon);
|
||||
const u8 *GetDungeonName1(u8 dungeon);
|
||||
bool8 IsStairDirectionUp(u8 dungeon);
|
||||
u32 GetMaxItemsAllowed(u8 dungeon);
|
||||
@@ -13,7 +14,7 @@ s16 GetRandomMovementChance(u8 dungeon);
|
||||
void PrintYellowDungeonNametoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
|
||||
void PrintDungeonLocationtoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
|
||||
|
||||
void sub_80901D8(DungeonLocation *param_1, DungeonLocation *param_2);
|
||||
void GeneralizeMazeDungeonLoc(DungeonLocation *dst, const DungeonLocation *src);
|
||||
u32 sub_809034C(u8 dungeonIndex, s32 speciesId_, u8 *buffer, bool32 param_4_, bool32 param_5_);
|
||||
u32 sub_80908D8(DungeonLocation *dungeon);
|
||||
u8 sub_8090910(DungeonLocation *dungeon, u32 param_2);
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
|
||||
#include "structs/str_pokemon.h"
|
||||
|
||||
enum
|
||||
{
|
||||
EVO_STRING_NOT_NOW,
|
||||
EVO_STRING_POSSIBLE,
|
||||
EVO_STRING_NO_MORE,
|
||||
EVO_STRING_EMPTY,
|
||||
};
|
||||
|
||||
// size: 0x8
|
||||
typedef struct EvolveStatus
|
||||
{
|
||||
@@ -15,8 +23,8 @@ typedef struct EvolveStatus
|
||||
/* 0x6 */ s16 targetEvolveSpecies;
|
||||
} EvolveStatus;
|
||||
|
||||
void sub_808F468(struct PokemonStruct1 *pokemon, EvolveStatus *evolveStatus,bool8 param_3);
|
||||
s32 sub_808F700(PokemonStruct1 *pokemon);
|
||||
void SetMonEvolveStatus(struct PokemonStruct1 *pokemon, EvolveStatus *evolveStatus,bool8 param_3);
|
||||
s32 GetMonSummaryScreenEvoStringId(PokemonStruct1 *pokemon);
|
||||
PokemonStruct1 *sub_808F734(PokemonStruct1 *pokemon, s16 _species);
|
||||
PokemonStruct1 *sub_808F798(PokemonStruct1 *pokemon, s16 _species);
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ struct MonSummaryInfo
|
||||
s16 unk40;
|
||||
s16 fill42;
|
||||
struct unkPokeSubStruct_C unk44[2];
|
||||
u8 unk4C;
|
||||
u8 evoStringId;
|
||||
u8 fill4D[3];
|
||||
IqSkillFlags IQSkills; // 0x50
|
||||
u8 tactic;
|
||||
|
||||
@@ -381,7 +381,7 @@ typedef struct Dungeon
|
||||
u8 unk10;
|
||||
u8 unk11;
|
||||
s16 unk12;
|
||||
s16 unk14;
|
||||
s16 startFloorId; // It's always 0 by default(see sDungeonStartingFloor table). If changed, it would be possible for the first entered floor to be displayed as not B1, but the specified number.
|
||||
s16 unk16;
|
||||
u32 unk18[(0xB8 - 0x18) / 4];
|
||||
Entity *unkB8;
|
||||
|
||||
@@ -676,6 +676,7 @@ SECTIONS {
|
||||
src/pokemon_3.o(.rodata);
|
||||
src/pokemon_evolution.o(.rodata);
|
||||
src/pokemon_summary_window.o(.rodata);
|
||||
src/dungeon.o(.rodata);
|
||||
data/data_81076E4.o(.rodata);
|
||||
src/game_options.o(.rodata);
|
||||
src/random_mersenne_twister.o(.rodata);
|
||||
|
||||
257
src/dungeon.c
257
src/dungeon.c
@@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "constants/monster.h"
|
||||
#include "constants/type.h"
|
||||
@@ -16,11 +17,7 @@
|
||||
extern const char gUnknown_8108F10[];
|
||||
extern const char gUnknown_8108F18[];
|
||||
extern const char gUnknown_8108F2C[];
|
||||
extern u8 gDungeonFloorCount[];
|
||||
extern const u8 *const gUnknown_8108084[];
|
||||
extern DungeonLocation gUnknown_8107828[];
|
||||
extern u8 gDungeonFloorCount[];
|
||||
extern u8 gUnknown_81077E8[];
|
||||
extern u8 gUnknown_8108F40[];
|
||||
extern u16 gUnknown_8108F42[];
|
||||
extern u8 gUnknown_8108F4A[4];
|
||||
@@ -29,6 +26,223 @@ extern u8 gUnknown_8108F50[];
|
||||
static void sub_8090888(u8 *param_1, u8 *param_2);
|
||||
static bool8 sub_8090820(u16 moveID);
|
||||
|
||||
static const u8 sDungeonFloorCount[] = {
|
||||
[DUNGEON_TINY_WOODS] = 4,
|
||||
[DUNGEON_THUNDERWAVE_CAVE] = 6,
|
||||
[DUNGEON_MT_STEEL] = 10,
|
||||
[DUNGEON_SINISTER_WOODS] = 14,
|
||||
[DUNGEON_SILENT_CHASM] = 10,
|
||||
[DUNGEON_MT_THUNDER] = 11,
|
||||
[DUNGEON_MT_THUNDER_PEAK] = 4,
|
||||
[DUNGEON_GREAT_CANYON] = 13,
|
||||
[DUNGEON_LAPIS_CAVE] = 15,
|
||||
[DUNGEON_MT_BLAZE] = 13,
|
||||
[DUNGEON_MT_BLAZE_PEAK] = 4,
|
||||
[DUNGEON_FROSTY_FOREST] = 10,
|
||||
[DUNGEON_FROSTY_GROTTO] = 6,
|
||||
[DUNGEON_MT_FREEZE] = 16,
|
||||
[DUNGEON_MT_FREEZE_PEAK] = 6,
|
||||
[DUNGEON_MAGMA_CAVERN] = 24,
|
||||
[DUNGEON_MAGMA_CAVERN_PIT] = 4,
|
||||
[DUNGEON_SKY_TOWER] = 26,
|
||||
[DUNGEON_SKY_TOWER_SUMMIT] = 10,
|
||||
[DUNGEON_STORMY_SEA] = 41,
|
||||
[DUNGEON_SILVER_TRENCH] = 100,
|
||||
[DUNGEON_METEOR_CAVE] = 21,
|
||||
[DUNGEON_MT_FREEZE_PEAK_2] = 5,
|
||||
[DUNGEON_WESTERN_CAVE] = 100,
|
||||
[DUNGEON_BOSS_3] = 21,
|
||||
[DUNGEON_BOSS_4] = 12,
|
||||
[DUNGEON_WISH_CAVE] = 100,
|
||||
[DUNGEON_BURIED_RELIC] = 100,
|
||||
[DUNGEON_PITFALL_VALLEY] = 26,
|
||||
[DUNGEON_NORTHERN_RANGE] = 26,
|
||||
[DUNGEON_BOSS_9] = 13,
|
||||
[DUNGEON_DESERT_REGION] = 21,
|
||||
[DUNGEON_SOUTHERN_CAVERN] = 51,
|
||||
[DUNGEON_WYVERN_HILL] = 31,
|
||||
[DUNGEON_FIERY_FIELD] = 31,
|
||||
[DUNGEON_NORTHWIND_FIELD] = 31,
|
||||
[DUNGEON_SOLAR_CAVE] = 21,
|
||||
[DUNGEON_LIGHTNING_FIELD] = 31,
|
||||
[DUNGEON_DARKNIGHT_RELIC] = 16,
|
||||
[DUNGEON_WONDROUS_SEA] = 13,
|
||||
[DUNGEON_MURKY_CAVE] = 20,
|
||||
[DUNGEON_GRAND_SEA] = 31,
|
||||
[DUNGEON_UPROAR_FOREST] = 11,
|
||||
[DUNGEON_ODDITY_CAVE] = 16,
|
||||
[DUNGEON_REMAINS_ISLAND] = 21,
|
||||
[DUNGEON_MARVELOUS_SEA] = 21,
|
||||
[DUNGEON_FANTASY_STRAIT] = 31,
|
||||
[DUNGEON_ROCK_PATH] = 5,
|
||||
[DUNGEON_SNOW_PATH] = 5,
|
||||
[DUNGEON_AUTOPILOT] = 11,
|
||||
[DUNGEON_D50] = 3,
|
||||
[DUNGEON_D51] = 51,
|
||||
[DUNGEON_NORMAL_MAZE] = 70,
|
||||
[DUNGEON_HOWLING_FOREST] = 16,
|
||||
[DUNGEON_D54] = 31,
|
||||
[DUNGEON_POISON_MAZE] = 20,
|
||||
[DUNGEON_WATERFALL_POND] = 20,
|
||||
[DUNGEON_UNKNOWN_RELIC] = 12,
|
||||
[DUNGEON_JOYOUS_TOWER] = 100,
|
||||
[DUNGEON_FAR_OFF_SEA] = 76,
|
||||
[DUNGEON_MT_FARAWAY] = 41,
|
||||
[DUNGEON_D61] = 100,
|
||||
[DUNGEON_PURITY_FOREST] = 100,
|
||||
[DUNGEON_OUT_ON_RESCUE] = 2,
|
||||
};
|
||||
|
||||
// All dungeons always start at the first floor.
|
||||
static const u8 sDungeonStartingFloor[] = {
|
||||
[DUNGEON_TINY_WOODS] = 0,
|
||||
[DUNGEON_THUNDERWAVE_CAVE] = 0,
|
||||
[DUNGEON_MT_STEEL] = 0,
|
||||
[DUNGEON_SINISTER_WOODS] = 0,
|
||||
[DUNGEON_SILENT_CHASM] = 0,
|
||||
[DUNGEON_MT_THUNDER] = 0,
|
||||
[DUNGEON_MT_THUNDER_PEAK] = 0,
|
||||
[DUNGEON_GREAT_CANYON] = 0,
|
||||
[DUNGEON_LAPIS_CAVE] = 0,
|
||||
[DUNGEON_MT_BLAZE] = 0,
|
||||
[DUNGEON_MT_BLAZE_PEAK] = 0,
|
||||
[DUNGEON_FROSTY_FOREST] = 0,
|
||||
[DUNGEON_FROSTY_GROTTO] = 0,
|
||||
[DUNGEON_MT_FREEZE] = 0,
|
||||
[DUNGEON_MT_FREEZE_PEAK] = 0,
|
||||
[DUNGEON_MAGMA_CAVERN] = 0,
|
||||
[DUNGEON_MAGMA_CAVERN_PIT] = 0,
|
||||
[DUNGEON_SKY_TOWER] = 0,
|
||||
[DUNGEON_SKY_TOWER_SUMMIT] = 0,
|
||||
[DUNGEON_STORMY_SEA] = 0,
|
||||
[DUNGEON_SILVER_TRENCH] = 0,
|
||||
[DUNGEON_METEOR_CAVE] = 0,
|
||||
[DUNGEON_MT_FREEZE_PEAK_2] = 0,
|
||||
[DUNGEON_WESTERN_CAVE] = 0,
|
||||
[DUNGEON_BOSS_3] = 0,
|
||||
[DUNGEON_BOSS_4] = 0,
|
||||
[DUNGEON_WISH_CAVE] = 0,
|
||||
[DUNGEON_BURIED_RELIC] = 0,
|
||||
[DUNGEON_PITFALL_VALLEY] = 0,
|
||||
[DUNGEON_NORTHERN_RANGE] = 0,
|
||||
[DUNGEON_BOSS_9] = 0,
|
||||
[DUNGEON_DESERT_REGION] = 0,
|
||||
[DUNGEON_SOUTHERN_CAVERN] = 0,
|
||||
[DUNGEON_WYVERN_HILL] = 0,
|
||||
[DUNGEON_FIERY_FIELD] = 0,
|
||||
[DUNGEON_NORTHWIND_FIELD] = 0,
|
||||
[DUNGEON_SOLAR_CAVE] = 0,
|
||||
[DUNGEON_LIGHTNING_FIELD] = 0,
|
||||
[DUNGEON_DARKNIGHT_RELIC] = 0,
|
||||
[DUNGEON_WONDROUS_SEA] = 0,
|
||||
[DUNGEON_MURKY_CAVE] = 0,
|
||||
[DUNGEON_GRAND_SEA] = 0,
|
||||
[DUNGEON_UPROAR_FOREST] = 0,
|
||||
[DUNGEON_ODDITY_CAVE] = 0,
|
||||
[DUNGEON_REMAINS_ISLAND] = 0,
|
||||
[DUNGEON_MARVELOUS_SEA] = 0,
|
||||
[DUNGEON_FANTASY_STRAIT] = 0,
|
||||
[DUNGEON_ROCK_PATH] = 0,
|
||||
[DUNGEON_SNOW_PATH] = 0,
|
||||
[DUNGEON_AUTOPILOT] = 0,
|
||||
[DUNGEON_D50] = 0,
|
||||
[DUNGEON_D51] = 0,
|
||||
[DUNGEON_NORMAL_MAZE] = 0,
|
||||
[DUNGEON_HOWLING_FOREST] = 0,
|
||||
[DUNGEON_D54] = 0,
|
||||
[DUNGEON_POISON_MAZE] = 0,
|
||||
[DUNGEON_WATERFALL_POND] = 0,
|
||||
[DUNGEON_UNKNOWN_RELIC] = 0,
|
||||
[DUNGEON_JOYOUS_TOWER] = 0,
|
||||
[DUNGEON_FAR_OFF_SEA] = 0,
|
||||
[DUNGEON_MT_FARAWAY] = 0,
|
||||
[DUNGEON_D61] = 0,
|
||||
[DUNGEON_PURITY_FOREST] = 0,
|
||||
[DUNGEON_OUT_ON_RESCUE] = 0,
|
||||
};
|
||||
|
||||
static const DungeonLocation gUnknown_8107828[] =
|
||||
{
|
||||
{ .id = DUNGEON_MT_STEEL, .floor = 9 },
|
||||
{ .id = DUNGEON_SINISTER_WOODS, .floor = 13 },
|
||||
{ .id = DUNGEON_MT_THUNDER_PEAK, .floor = 3 },
|
||||
{ .id = DUNGEON_MT_BLAZE_PEAK, .floor = 3 },
|
||||
{ .id = DUNGEON_FROSTY_GROTTO, .floor = 5 },
|
||||
{ .id = DUNGEON_MT_FREEZE_PEAK, .floor = 5 },
|
||||
{ .id = DUNGEON_MAGMA_CAVERN_PIT, .floor = 2 },
|
||||
{ .id = DUNGEON_MAGMA_CAVERN_PIT, .floor = 3 },
|
||||
{ .id = DUNGEON_SKY_TOWER_SUMMIT, .floor = 9 },
|
||||
{ .id = DUNGEON_STORMY_SEA, .floor = 40 },
|
||||
{ .id = DUNGEON_SILVER_TRENCH, .floor = 99 },
|
||||
{ .id = DUNGEON_METEOR_CAVE, .floor = 20 },
|
||||
{ .id = DUNGEON_WESTERN_CAVE, .floor = 59 },
|
||||
{ .id = DUNGEON_WESTERN_CAVE, .floor = 99 },
|
||||
{ .id = DUNGEON_WISH_CAVE, .floor = 20 },
|
||||
{ .id = DUNGEON_WISH_CAVE, .floor = 50 },
|
||||
{ .id = DUNGEON_WISH_CAVE, .floor = 99 },
|
||||
{ .id = DUNGEON_BURIED_RELIC, .floor = 15 },
|
||||
{ .id = DUNGEON_BURIED_RELIC, .floor = 25 },
|
||||
{ .id = DUNGEON_BURIED_RELIC, .floor = 35 },
|
||||
{ .id = DUNGEON_BURIED_RELIC, .floor = 45 },
|
||||
{ .id = DUNGEON_BURIED_RELIC, .floor = 60 },
|
||||
{ .id = DUNGEON_BURIED_RELIC, .floor = 70 },
|
||||
{ .id = DUNGEON_BURIED_RELIC, .floor = 80 },
|
||||
{ .id = DUNGEON_NORTHERN_RANGE, .floor = 25 },
|
||||
{ .id = DUNGEON_WYVERN_HILL, .floor = 20 },
|
||||
{ .id = DUNGEON_WYVERN_HILL, .floor = 30 },
|
||||
{ .id = DUNGEON_FIERY_FIELD, .floor = 30 },
|
||||
{ .id = DUNGEON_NORTHWIND_FIELD, .floor = 20 },
|
||||
{ .id = DUNGEON_NORTHWIND_FIELD, .floor = 30 },
|
||||
{ .id = DUNGEON_SOLAR_CAVE, .floor = 10 },
|
||||
{ .id = DUNGEON_SOLAR_CAVE, .floor = 15 },
|
||||
{ .id = DUNGEON_SOLAR_CAVE, .floor = 20 },
|
||||
{ .id = DUNGEON_LIGHTNING_FIELD, .floor = 30 },
|
||||
{ .id = DUNGEON_GRAND_SEA, .floor = 15 },
|
||||
{ .id = DUNGEON_GRAND_SEA, .floor = 25 },
|
||||
{ .id = DUNGEON_UPROAR_FOREST, .floor = 10 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 1 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 2 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 3 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 4 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 5 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 6 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 7 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 8 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 9 },
|
||||
{ .id = DUNGEON_AUTOPILOT, .floor = 10 },
|
||||
// Used for all mazes, see GeneralizeMazeDungeonLoc
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 3 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 6 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 9 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 12 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 15 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 18 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 21 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 24 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 27 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 30 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 33 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 36 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 39 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 42 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 45 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 48 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 51 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 54 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 57 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 60 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 63 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 66 },
|
||||
{ .id = DUNGEON_NORMAL_MAZE, .floor = 69 },
|
||||
{ .id = DUNGEON_HOWLING_FOREST, .floor = 15 },
|
||||
{ .id = DUNGEON_FAR_OFF_SEA, .floor = 50 },
|
||||
{ .id = DUNGEON_FAR_OFF_SEA, .floor = 72 },
|
||||
{ .id = DUNGEON_MT_FARAWAY, .floor = 30 },
|
||||
{ .id = DUNGEON_MT_FARAWAY, .floor = 40 },
|
||||
{ .id = DUNGEON_PURITY_FOREST, .floor = 99 },
|
||||
{ .id = DUNGEON_OUT_ON_RESCUE, .floor = 255 }
|
||||
};
|
||||
|
||||
const u8 *GetDungeonName1(u8 dungeon)
|
||||
{
|
||||
return gDungeonNames[dungeon].name1;
|
||||
@@ -98,8 +312,8 @@ bool8 sub_809017C(DungeonLocation* a1)
|
||||
{
|
||||
DungeonLocation location;
|
||||
int i;
|
||||
sub_80901D8(&location, a1);
|
||||
for (i = 0; i < 999 && gUnknown_8107828[i].id != 63; ++i) {
|
||||
GeneralizeMazeDungeonLoc(&location, a1);
|
||||
for (i = 0; i < 999 && gUnknown_8107828[i].id != DUNGEON_OUT_ON_RESCUE; ++i) {
|
||||
if (location.id == gUnknown_8107828[i].id &&
|
||||
location.floor == gUnknown_8107828[i].floor) {
|
||||
return TRUE;
|
||||
@@ -108,15 +322,16 @@ bool8 sub_809017C(DungeonLocation* a1)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_80901D8(DungeonLocation *param_1,DungeonLocation *param_2)
|
||||
// Treats all mazes as DUNGEON_NORMAL_MAZE
|
||||
void GeneralizeMazeDungeonLoc(DungeonLocation *dst, const DungeonLocation *src)
|
||||
{
|
||||
if (DUNGEON_IS_MAZE(param_2->id)) {
|
||||
param_1->id = DUNGEON_NORMAL_MAZE;
|
||||
param_1->floor = (param_2->id - DUNGEON_NORMAL_MAZE_2) * 3 + param_2->floor;
|
||||
}
|
||||
else {
|
||||
*param_1 = *param_2;
|
||||
}
|
||||
if (DUNGEON_IS_MAZE(src->id)) {
|
||||
dst->id = DUNGEON_NORMAL_MAZE;
|
||||
dst->floor = (src->id - DUNGEON_NORMAL_MAZE_2) * 3 + src->floor;
|
||||
}
|
||||
else {
|
||||
*dst = *src;
|
||||
}
|
||||
}
|
||||
|
||||
void PrintYellowDungeonNametoBuffer(u8 *buffer, DungeonLocation *dungeonLocation)
|
||||
@@ -144,20 +359,20 @@ s32 GetDungeonFloorCount(u8 dungeon)
|
||||
{
|
||||
if (DUNGEON_IS_MAZE(dungeon))
|
||||
return 4;
|
||||
else if(dungeon > DUNGEON_PURITY_FOREST)
|
||||
else if (dungeon > DUNGEON_PURITY_FOREST)
|
||||
return 1;
|
||||
else
|
||||
return gDungeonFloorCount[dungeon];
|
||||
return sDungeonFloorCount[dungeon];
|
||||
}
|
||||
|
||||
u8 sub_80902C8(u8 dungeon)
|
||||
s32 GetDungeonStartingFloor(u8 dungeon)
|
||||
{
|
||||
if (DUNGEON_IS_MAZE(dungeon))
|
||||
return 0;
|
||||
else if(dungeon > DUNGEON_PURITY_FOREST)
|
||||
else if (dungeon > DUNGEON_PURITY_FOREST)
|
||||
return 0;
|
||||
else
|
||||
return gUnknown_81077E8[dungeon];
|
||||
return sDungeonStartingFloor[dungeon];
|
||||
}
|
||||
|
||||
// arm9.bin::0205ECA0
|
||||
@@ -414,7 +629,7 @@ static void sub_8090888(u8 *param_1, u8 *param_2)
|
||||
|
||||
u32 sub_80908D8(DungeonLocation *dungeon)
|
||||
{
|
||||
if (dungeon->id < DUNGEON_OUT_ON_RESCUE && dungeon->floor < gDungeonFloorCount[dungeon->id]) {
|
||||
if (dungeon->id < DUNGEON_OUT_ON_RESCUE && dungeon->floor < sDungeonFloorCount[dungeon->id]) {
|
||||
return gUnknown_8108084[dungeon->id][dungeon->floor];
|
||||
}
|
||||
else {
|
||||
@@ -426,7 +641,7 @@ u8 sub_8090910(DungeonLocation *dungeon, u32 param_2)
|
||||
{
|
||||
s32 rand1 = RandInt(9999);
|
||||
s32 rand2 = RandInt(9999);
|
||||
if (dungeon->id < DUNGEON_OUT_ON_RESCUE && dungeon->floor < gDungeonFloorCount[dungeon->id]) {
|
||||
if (dungeon->id < DUNGEON_OUT_ON_RESCUE && dungeon->floor < sDungeonFloorCount[dungeon->id]) {
|
||||
return sub_8091E94(param_2, rand1, rand2);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -893,10 +893,10 @@ void SetMonSummaryInfoFromEntity(struct MonSummaryInfo *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->evoStringId = sub_806A4DC(info);
|
||||
}
|
||||
else {
|
||||
param_1->unk4C = 3;
|
||||
param_1->evoStringId = EVO_STRING_EMPTY;
|
||||
}
|
||||
|
||||
uVar15 = 0;
|
||||
@@ -1414,7 +1414,7 @@ s32 sub_806A4DC(EntityInfo *info)
|
||||
pokemon.offense.att[0] = info->atk[0];
|
||||
pokemon.offense.def[0] = info->def[0];
|
||||
|
||||
return sub_808F700(&pokemon);
|
||||
return GetMonSummaryScreenEvoStringId(&pokemon);
|
||||
}
|
||||
|
||||
bool8 sub_806A538(s16 r0)
|
||||
|
||||
@@ -63,7 +63,7 @@ void ShowDungeonNameBanner_Async(void)
|
||||
}
|
||||
CpuClear((void *)(VRAM + 0x140), 0x1C00);
|
||||
if (sub_80848EC()) {
|
||||
s32 currFloor = gDungeon->unk644.dungeonLocation.floor + gDungeon->unk14;
|
||||
s32 currFloor = gDungeon->unk644.dungeonLocation.floor + gDungeon->startFloorId;
|
||||
const u8 *dungName = GetDungeonName2(gDungeon->unk644.dungeonLocation.id);
|
||||
s32 r5 = 10;
|
||||
|
||||
|
||||
@@ -23,10 +23,6 @@
|
||||
#include "dungeon_config.h"
|
||||
#include "structs/dungeon_mapparam.h"
|
||||
|
||||
// File split is correct.
|
||||
|
||||
extern s32 sub_80902C8(u8 dungeon);
|
||||
|
||||
void sub_803D4AC(void)
|
||||
{
|
||||
gDungeon->unk1C570.id = DUNGEON_INVALID;
|
||||
@@ -40,7 +36,7 @@ void SetFloorItemMonsterSpawns(void)
|
||||
OpenedFile *file;
|
||||
struct DungeonMapParam1 *strPtr;
|
||||
|
||||
sub_80901D8(&gDungeon->unk644.dungeonLocation2, &gDungeon->unk644.dungeonLocation);
|
||||
GeneralizeMazeDungeonLoc(&gDungeon->unk644.dungeonLocation2, &gDungeon->unk644.dungeonLocation);
|
||||
if (gDungeon->unk1C570.id == gDungeon->unk644.dungeonLocation2.id && gDungeon->unk1C570.floor == gDungeon->unk644.dungeonLocation2.floor)
|
||||
return;
|
||||
|
||||
@@ -49,7 +45,7 @@ void SetFloorItemMonsterSpawns(void)
|
||||
strPtr = &((struct DungeonMapParam2 *)(file->data))->unk0[gDungeon->unk1C570.id][gDungeon->unk1C570.floor];
|
||||
|
||||
gDungeon->unk1CEC8 = GetDungeonFloorCount(gDungeon->unk644.dungeonLocation.id);
|
||||
gDungeon->unk14 = sub_80902C8(gDungeon->unk644.dungeonLocation.id);
|
||||
gDungeon->startFloorId = GetDungeonStartingFloor(gDungeon->unk644.dungeonLocation.id);
|
||||
|
||||
gDungeon->floorProperties = ((struct DungeonMapParam2 *)(file->data))->floorProperties[strPtr->unk0];
|
||||
|
||||
|
||||
@@ -479,7 +479,7 @@ void sub_803FB74(void)
|
||||
{
|
||||
s32 i;
|
||||
u16 *arrPtr;
|
||||
s32 r5, r6, unkFloor;
|
||||
s32 r5, r6, currFloor;
|
||||
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
|
||||
bool32 lowHp = FALSE;
|
||||
bool32 hungry = FALSE;
|
||||
@@ -540,9 +540,9 @@ void sub_803FB74(void)
|
||||
}
|
||||
|
||||
arrPtr = gBgTilemaps[0][0];
|
||||
unkFloor = gDungeon->unk14 + gDungeon->unk644.dungeonLocation.floor;
|
||||
if (strPtr->unk3A != unkFloor) {
|
||||
strPtr->unk3A = unkFloor;
|
||||
currFloor = gDungeon->startFloorId + gDungeon->unk644.dungeonLocation.floor;
|
||||
if (strPtr->unk3A != currFloor) {
|
||||
strPtr->unk3A = currFloor;
|
||||
if (IsStairDirectionUp(gDungeon->unk644.dungeonLocation.id)) {
|
||||
arrPtr[1] = 0;
|
||||
}
|
||||
@@ -550,12 +550,12 @@ void sub_803FB74(void)
|
||||
arrPtr[1] = 0xF2BE;
|
||||
}
|
||||
|
||||
if (unkFloor < 10) {
|
||||
sub_803FE30(unkFloor, &arrPtr[2], strPtr->unk18216, 1);
|
||||
if (currFloor < 10) {
|
||||
sub_803FE30(currFloor, &arrPtr[2], strPtr->unk18216, 1);
|
||||
arrPtr[3] = 0xF2B8;
|
||||
}
|
||||
else {
|
||||
sub_803FE30(unkFloor, &arrPtr[2], strPtr->unk18216, 0);
|
||||
sub_803FE30(currFloor, &arrPtr[2], strPtr->unk18216, 0);
|
||||
arrPtr[4] = 0xF2B8;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -734,7 +734,7 @@ static void sub_8025254(void)
|
||||
}
|
||||
|
||||
sLuminousCaveWork->evolveStatus.wurmpleVal = RandInt(0xFF);
|
||||
sub_808F468(sLuminousCaveWork->pokeStruct, &sLuminousCaveWork->evolveStatus, 1);
|
||||
SetMonEvolveStatus(sLuminousCaveWork->pokeStruct, &sLuminousCaveWork->evolveStatus, 1);
|
||||
}
|
||||
|
||||
static bool8 LuminousCave_HasOnly1Member(void)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "constants/evolve_type.h"
|
||||
#include "constants/evolution_status.h"
|
||||
|
||||
void sub_808F468(PokemonStruct1 *pokemon, EvolveStatus *evolveStatus,bool8 param_3)
|
||||
void SetMonEvolveStatus(PokemonStruct1 *pokemon, EvolveStatus *evolveStatus, bool8 param_3)
|
||||
{
|
||||
struct FriendAreaCapacity friendAreaCapacity;
|
||||
struct unkEvolve evolveConditions;
|
||||
@@ -170,19 +170,19 @@ void sub_808F468(PokemonStruct1 *pokemon, EvolveStatus *evolveStatus,bool8 param
|
||||
}
|
||||
}
|
||||
|
||||
s32 sub_808F700(PokemonStruct1 *pokemon)
|
||||
s32 GetMonSummaryScreenEvoStringId(PokemonStruct1 *pokemon)
|
||||
{
|
||||
EvolveStatus evolveStatus;
|
||||
|
||||
sub_808F468(pokemon, &evolveStatus, 0);
|
||||
if ((evolveStatus.evolutionConditionStatus & EVOLUTION_GOOD)) {
|
||||
return 1;
|
||||
SetMonEvolveStatus(pokemon, &evolveStatus, 0);
|
||||
if (evolveStatus.evolutionConditionStatus & EVOLUTION_GOOD) {
|
||||
return EVO_STRING_POSSIBLE;
|
||||
}
|
||||
else if ((evolveStatus.evolutionConditionStatus & EVOLUTION_NO_MORE)) {
|
||||
return 2;
|
||||
else if (evolveStatus.evolutionConditionStatus & EVOLUTION_NO_MORE) {
|
||||
return EVO_STRING_NO_MORE;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
return EVO_STRING_NOT_NOW;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -226,7 +226,7 @@ void ShowPokemonSummaryWindow(s32 which, s32 currSubWindowId, struct MonSummaryI
|
||||
strcpy(gFormatBuffer_Monsters[0],gUnknown_810E02C[GetBodySize(monInfo->species)]);
|
||||
PrintFormattedStringOnWindow(4,y,gUnknown_810DF98,windowId,'\0');
|
||||
y += 0xD;
|
||||
PrintFormattedStringOnWindow(4,y,gEvolutionStrings[monInfo->unk4C],windowId,'\0');
|
||||
PrintFormattedStringOnWindow(4,y,gEvolutionStrings[monInfo->evoStringId],windowId,'\0');
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -284,10 +284,10 @@ void SetMonSummaryInfo(struct MonSummaryInfo *dst, struct PokemonStruct1 *pokemo
|
||||
dst->unk44[1] = pokemon->unkC[1];
|
||||
dst->IQSkills = pokemon->IQSkills;
|
||||
if (param_3) {
|
||||
dst->unk4C = sub_808F700(pokemon);
|
||||
dst->evoStringId = GetMonSummaryScreenEvoStringId(pokemon);
|
||||
}
|
||||
else {
|
||||
dst->unk4C = 3;
|
||||
dst->evoStringId = EVO_STRING_EMPTY;
|
||||
}
|
||||
|
||||
for(index = 0; index < 0xC; index++)
|
||||
|
||||
@@ -29,7 +29,7 @@ void sub_80ADD9C(OpenedFile **a0, OpenedFile **a1, u32 *a2, void *a3, u16 *a4, D
|
||||
void *r10 = MemoryAlloc(0x930, 7);
|
||||
OpenedFile *mapParamFile = OpenFileAndGetFileDataPtr("mapparam", &gDungeonFileArchive);
|
||||
|
||||
sub_80901D8(&dungLoc, a5);
|
||||
GeneralizeMazeDungeonLoc(&dungLoc, a5);
|
||||
dungId = dungLoc.id;
|
||||
dungFloor = dungLoc.floor;
|
||||
if (dungId > 62) {
|
||||
|
||||
Reference in New Issue
Block a user