Merge pull request #235 from slaw-22/DungeonInit

Decomp InitDungeonInit
This commit is contained in:
AnonymousRandomPerson
2025-12-31 17:21:31 -05:00
committed by GitHub
10 changed files with 3483 additions and 3338 deletions

View File

@@ -1,106 +1,47 @@
#pragma once
.public ARM9_UNKNOWN_TABLE__NA_209E280
.public ApplyLevelUpBoostsToGroundMonster
.public CLIENT_LEVEL_TABLE
.public CopyLogFrom
.public CopyLogTo
.public Debug_Print0
.public GetDungeonModeSpecial
.public GetGameMode
.public GetResolvedPerformanceProgressFlag
.public GetSosMailCount
.public InitDungeonInit
.public LoadOptionsFromCtx
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public MemcpySimple
.public PENDING_DUNGEON_ID
.public SaveOptionsToCtx
.public SaveScriptVariableValue
.public StringFromId
.public WONDER_MAIL_BITS_SWAP
.public WONDER_MAIL_ENCRYPTION_TABLE
.public _0209E264
.public _0209E3A1
.public _0209E3A2
.public _0209E3A3
.public _0209E6BD
.public _020A192C
.public _020A28E0
.public _020A2904
.public _020A2928
.public _020A294C
.public _020A2970
.public _020A2994
.public _020A29B8
.public _020A29DC
.public _020A2A00
.public _020A2A24
.public _020A2A48
.public _020A2A6C
.public _020A2A90
.public _020A2AB4
.public _020A2AD8
.public _020A2AFC
.public _020A2B20
.public _022AB4F8
.public _022AB510
.public _022AB518
.public _022AB5A8
.public _022AB5AC
.public _022AB69C
.public _022AB924
.public _s32_div_f
.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS
.public ADVENTURE_LOG_PTR
.public ApplyLevelUpBoostsToGroundMonster
.public ARM9_UNKNOWN_DATA__NA_209E6BC
.public ARM9_UNKNOWN_TABLE__NA_209E280
.public CLIENT_LEVEL_TABLE
.public Copy16BitsFrom
.public CopyNStringFromId
.public Debug_Print0
.public DUNGEON_DATA_LIST
.public DungeonSwapIdToIdx
.public DungeonSwapIdxToId
.public GetBaseFormCastformCherrimDeoxys
.public GetBodySize
.public GetDexNumberVeneer
.public GetDungeonMode
.public GetDungeonModeSpecial
.public GetGameMode
.public GetMaxItemsAllowed
.public GetMaxMembersAllowed
.public GetMaxReachedFloor
.public GetMoneyCarried
.public GetNameString
.public GetNbItemsInBag
.public GetPartyMembers
.public GetResolvedPerformanceProgressFlag
.public GetRankUpEntry
.public GetSosMailCount
.public GetStringFromFileVeneer
.public GUEST_MONSTER_DATA
.public GuestMonsterToGroundMonster
.public IsItemValidVeneer
.public IsLevelResetDungeon
.public IsMoneyAllowed
.public IsRealMove
.public IsRecruitingAllowed
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public MemcpySimple
.public MemZero
.public MISSION_FLOOR_RANKS_PTRS
.public NormalizeTreasureBox
.public OUTLAW_LEVEL_TABLE
.public OUTLAW_MINION_LEVEL_TABLE
.public PENDING_DUNGEON_ID
.public PLAY_TIME_SECONDS
.public SaveScriptVariableValue
.public SECONDARY_TERRAIN_TYPES
.public StringFromId
.public StrncpyName
.public StrncpySimpleNoPad
.public StrncpySimpleNoPadSafe
.public sub_02004F80
.public sub_0200C4CC
.public sub_02048BFC
.public sub_02048CB8
.public SaveOptionsToCtx
.public LoadOptionsFromCtx
.public SetResolvedPerformanceProgressFlag
.public sub_0204CEE0
.public sub_0204DB08
.public sub_020515C4
.public sub_0204F7A8
.public sub_0204F9F4
.public sub_0204FA0C
.public sub_02050974
.public sub_02050990
.public sub_020509BC
.public sub_0205633C
.public sub_02056360
.public sub_0205B77C
.public sub_0205BB7C
.public sub_0205BD14
.public sub_0205EE40
.public sub_0205F00C
.public sub_0205FE80
.public TEAM_MEMBER_TABLE_PTR
.public TEAM_NAME
.public WONDER_MAIL_BITS_SWAP
.public WONDER_MAIL_ENCRYPTION_TABLE

View File

@@ -0,0 +1,58 @@
#pragma once
.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS
.public ADVENTURE_LOG_PTR
.public ARM9_UNKNOWN_DATA__NA_209E6BC
.public Copy16BitsFrom
.public CopyNStringFromId
.public DUNGEON_DATA_LIST
.public DungeonSwapIdToIdx
.public DungeonSwapIdxToId
.public GetBaseFormCastformCherrimDeoxys
.public GetBodySize
.public GetDexNumberVeneer
.public GetDungeonMode
.public GetDungeonModeSpecial
.public GetGameMode
.public GetMaxItemsAllowed
.public GetMaxMembersAllowed
.public GetMaxReachedFloor
.public GetMoneyCarried
.public GetNameString
.public GetNbItemsInBag
.public GetPartyMembers
.public GetRankUpEntry
.public GetResolvedPerformanceProgressFlag
.public GetStringFromFileVeneer
.public GuestMonsterToGroundMonster
.public IsItemValidVeneer
.public IsLevelResetDungeon
.public IsMoneyAllowed
.public IsRealMove
.public IsRecruitingAllowed
.public LoadScriptVariableValue
.public MISSION_FLOOR_RANKS_PTRS
.public MemZero
.public NormalizeTreasureBox
.public OUTLAW_LEVEL_TABLE
.public OUTLAW_MINION_LEVEL_TABLE
.public PENDING_DUNGEON_ID
.public PLAY_TIME_SECONDS
.public SECONDARY_TERRAIN_TYPES
.public SetResolvedPerformanceProgressFlag
.public StrncpyName
.public StrncpySimpleNoPad
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public TEAM_NAME
.public _0209E3A1
.public _0209E3A2
.public _0209E3A3
.public _0209E6BD
.public _020A192C
.public _022AB4F8
.public _022AB5AC
.public _022AB69C
.public _022AB924
.public sub_0204CEE0
.public sub_020515C4
.public sub_0205EE40

File diff suppressed because it is too large Load Diff

2810
asm/main_0204EFE0.s Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -42,93 +42,95 @@ _020A2894:
_020A28A8:
.byte 0x78, 0x01, 0xEC, 0x00, 0x34, 0x01, 0x45, 0x01, 0x3A, 0x00, 0x00, 0x00
.byte 0x01, 0x00, 0x1C, 0x00, 0x6E, 0x00, 0x00, 0x00
.global GUEST_MONSTER_DATA
GUEST_MONSTER_DATA:
// Guest monsters join the party temporarily for specific dungeons.
.global GUEST_MONSTER_BANETTE
GUEST_MONSTER_BANETTE:
.byte 0x00, 0x00, 0x00, 0x00, 0x82, 0x01, 0xDF, 0x00
.byte 0x1B, 0x00, 0x18, 0x00, 0xF9, 0x00, 0x48, 0x01, 0x39, 0x00, 0x0F, 0x00, 0x6E, 0x00, 0x14, 0x00
.byte 0x14, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x7D, 0x34, 0x00, 0x00
.global _020A28E0
_020A28E0:
.global GUEST_MONSTER_SKORUPI
GUEST_MONSTER_SKORUPI:
.byte 0x00, 0x00, 0x00, 0x00
.byte 0xED, 0x01, 0xE0, 0x00, 0x3F, 0x00, 0xC8, 0x00, 0x32, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x0F, 0x00
.byte 0x6E, 0x00, 0x1B, 0x00, 0x18, 0x00, 0x11, 0x00, 0x11, 0x00, 0x00, 0x00, 0xCB, 0x37, 0x00, 0x00
.global _020A2904
_020A2904:
.global GUEST_MONSTER_BIDOOF
GUEST_MONSTER_BIDOOF:
.byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00, 0x8B, 0x00, 0xD9, 0x00, 0x2E, 0x01, 0x00, 0x00
.byte 0x38, 0x00, 0x0E, 0x00, 0x6E, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x14, 0x00, 0x00, 0x00
.byte 0x52, 0x15, 0x00, 0x00
.global _020A2928
_020A2928:
.global GUEST_MONSTER_SNOVER
GUEST_MONSTER_SNOVER:
.byte 0x00, 0x00, 0x00, 0x00, 0xF5, 0x01, 0xDE, 0x00, 0x65, 0x00, 0x61, 0x00
.byte 0x54, 0x00, 0x18, 0x00, 0x40, 0x00, 0x16, 0x00, 0x6E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x15, 0x00
.byte 0x17, 0x00, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00
.global _020A294C
_020A294C:
.global GUEST_MONSTER_BIDOOF_2
GUEST_MONSTER_BIDOOF_2:
.byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00
.byte 0x8B, 0x00, 0xD9, 0x00, 0x2E, 0x01, 0x00, 0x00, 0x41, 0x00, 0x10, 0x00, 0x6E, 0x00, 0x18, 0x00
.byte 0x16, 0x00, 0x16, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2A, 0x2D, 0x00, 0x00
.global _020A2970
_020A2970:
.global GUEST_MONSTER_GROVYLE
GUEST_MONSTER_GROVYLE:
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x19, 0x01, 0xDA, 0x00, 0x87, 0x00, 0xBE, 0x00, 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00
.byte 0x6E, 0x00, 0x45, 0x00, 0x44, 0x00, 0x35, 0x00, 0x34, 0x00, 0x00, 0x00, 0xB2, 0xB4, 0x07, 0x00
.global _020A2994
_020A2994:
.global GUEST_MONSTER_LOUDRED
GUEST_MONSTER_LOUDRED:
.byte 0x00, 0x00, 0x00, 0x00, 0x42, 0x01, 0xE1, 0x00, 0xFA, 0x00, 0x2E, 0x00, 0xC3, 0x00, 0xAB, 0x00
.byte 0x54, 0x00, 0x1B, 0x00, 0x6E, 0x00, 0x38, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x00, 0x00
.byte 0xE9, 0x3F, 0x01, 0x00
.global _020A29B8
_020A29B8:
.global GUEST_MONSTER_DUSKNOIR
GUEST_MONSTER_DUSKNOIR:
.byte 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0xE3, 0x00, 0x58, 0x01, 0xC3, 0x01
.byte 0x2F, 0x00, 0x7E, 0x00, 0x82, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x3D, 0x00, 0x39, 0x00, 0x2D, 0x00
.byte 0x35, 0x00, 0x00, 0x00, 0xE7, 0xB6, 0x05, 0x00
.global _020A29DC
_020A29DC:
.global GUEST_MONSTER_GROVYLE_2
GUEST_MONSTER_GROVYLE_2:
.byte 0x00, 0x00, 0x00, 0x00, 0x19, 0x01, 0xDA, 0x00
.byte 0x87, 0x00, 0xBE, 0x00, 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x45, 0x00
.byte 0x44, 0x00, 0x35, 0x00, 0x34, 0x00, 0x00, 0x00, 0xB2, 0xB4, 0x07, 0x00
.global _020A2A00
_020A2A00:
.global GUEST_MONSTER_CHATOT
GUEST_MONSTER_CHATOT:
.byte 0x00, 0x00, 0x00, 0x00
.byte 0xE3, 0x01, 0xDC, 0x00, 0xAE, 0x00, 0x28, 0x00, 0x37, 0x01, 0xFD, 0x01, 0x75, 0x00, 0x24, 0x00
.byte 0x6E, 0x00, 0x3B, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x1B, 0xE7, 0x05, 0x00
.global _020A2A24
_020A2A24:
.global GUEST_MONSTER_SHINY_CELEBI
GUEST_MONSTER_SHINY_CELEBI:
.byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x01, 0xDB, 0x00, 0x1A, 0x00, 0x75, 0x00, 0x29, 0x01, 0x5D, 0x00
.byte 0x78, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x2D, 0x00, 0x25, 0x00, 0x26, 0x00, 0x00, 0x00
.byte 0xC1, 0xC0, 0x05, 0x00
.global _020A2A48
_020A2A48:
.global GUEST_MONSTER_GROVYLE_3
GUEST_MONSTER_GROVYLE_3:
.byte 0x00, 0x00, 0x00, 0x00, 0x19, 0x01, 0xDA, 0x00, 0x87, 0x00, 0xBE, 0x00
.byte 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x45, 0x00, 0x44, 0x00, 0x35, 0x00
.byte 0x34, 0x00, 0x00, 0x00, 0xB2, 0xB4, 0x07, 0x00
.global _020A2A6C
_020A2A6C:
.global GUEST_MONSTER_GROVYLE_4
GUEST_MONSTER_GROVYLE_4:
.byte 0x00, 0x00, 0x00, 0x00, 0x19, 0x01, 0xDA, 0x00
.byte 0x87, 0x00, 0xBE, 0x00, 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x4A, 0x00
.byte 0x49, 0x00, 0x3A, 0x00, 0x34, 0x00, 0x00, 0x00, 0x82, 0x63, 0x0A, 0x00
.global _020A2A90
_020A2A90:
.global GUEST_MONSTER_CRESSELIA
GUEST_MONSTER_CRESSELIA:
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x12, 0x02, 0xDD, 0x00, 0xEA, 0x00, 0x38, 0x00, 0x2A, 0x00, 0x51, 0x00, 0x7E, 0x00, 0x2F, 0x00
.byte 0x5E, 0x01, 0x42, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x4A, 0x00, 0x00, 0x00, 0xA0, 0x86, 0x01, 0x00
.global _020A2AB4
_020A2AB4:
.global GUEST_MONSTER_BIDOOF_3
GUEST_MONSTER_BIDOOF_3:
.byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00, 0x8B, 0x00, 0xD9, 0x00, 0x2E, 0x01, 0x00, 0x00
.byte 0x41, 0x00, 0x10, 0x00, 0x6E, 0x00, 0x18, 0x00, 0x16, 0x00, 0x16, 0x00, 0x14, 0x00, 0x00, 0x00
.byte 0x2A, 0x2D, 0x00, 0x00
.global _020A2AD8
_020A2AD8:
.global GUEST_MONSTER_BIDOOF_4
GUEST_MONSTER_BIDOOF_4:
.byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00, 0x8B, 0x00, 0xD9, 0x00
.byte 0x2E, 0x01, 0x00, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x6E, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00
.byte 0x14, 0x00, 0x00, 0x00, 0x52, 0x15, 0x00, 0x00
.global _020A2AFC
_020A2AFC:
.global GUEST_MONSTER_SHAYMIN_LAND
GUEST_MONSTER_SHAYMIN_LAND:
.byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0xE2, 0x00
.byte 0x29, 0x01, 0x49, 0x01, 0x5E, 0x00, 0xD7, 0x01, 0x54, 0x00, 0x37, 0x00, 0x5E, 0x01, 0x40, 0x00
.byte 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0xFB, 0xB7, 0x09, 0x00
.global _020A2B20
_020A2B20:
.global GUEST_MONSTER_SNOVER_2
GUEST_MONSTER_SNOVER_2:
.byte 0x00, 0x00, 0x00, 0x00
.byte 0xF5, 0x01, 0xDE, 0x00, 0x65, 0x00, 0x61, 0x00, 0x54, 0x00, 0x18, 0x00, 0x40, 0x00, 0x16, 0x00
.byte 0x6E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x15, 0x00, 0x17, 0x00, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00

View File

@@ -18,7 +18,7 @@ struct ground_move {
u8 field_0x1; // Probably padding since it doesn't get initialized
u16 id; // 0x2
u8 ginseng; // 0x4: Ginseng boost
u16 field_0x5; // Probably padding since it doesn't get initialized
u8 field_0x5; // Probably padding since it doesn't get initialized
};
struct ground_monster {

91
include/dungeon_init.h Normal file
View File

@@ -0,0 +1,91 @@
#ifndef PMDSKY_DUNGEON_INIT
#define PMDSKY_DUNGEON_INIT
#include "common.h"
#include "util.h"
// Unknown struct included in the dungeon_init struct
struct unk_dungeon_init {
u8 unk0[232];
};
// A struct used to init certain values in the dungeon struct when entering dungeon mode.
// Gets initialized in ground mode.
struct dungeon_init {
u8 id; // 0x0: Copied into dungeon::id
u8 floor; // 0x1: Copied into dungeon::floor
// Copied into dungeon::field_0x74C, might be related to the dungeon being conquered or
// the fixed room overrides.
u16 dungeon_idx; // 0x2 index of the dungeon. The index maps to the id in DUNGEON_SWAP_ID_TABLE
u8 field_0x4;
bool8 nonstory_flag; // 0x5: Copied into dungeon::nonstory_flag
bool8 recruiting_enabled; // 0x6: Copied into dungeon::recruiting_enabled
// 0x7: If true, dungeon::recruiting_enabled gets set to false. Overrides recruiting_enabled.
bool8 force_disable_recruiting;
// 0x8 Pokemon show up in potential recruits, (inferred by assignment from performance progress flag 6)
// Copied into dungeon::field_0x75A
bool8 show_potential_recruits;
// 0x9: Whether team name is shown, (inferred by assignment from performance progress flag 1)
// Copied into dungeon::field_0x75B, but the value is immediately overwritten with TRUE.
bool8 show_team_name;
bool8 send_home_disabled; // 0xA: Copied into dungeon::send_home_disabled
bool8 hidden_land_flag; // 0xB: Copied into dungeon::hidden_land_flag
bool8 skip_faint_animation_flag; // 0xC: Copied into dungeon::skip_faint_animation_flag
// 0xD: Copied into dungeon::dungeon_objective. Read as a signed byte (?).
/* struct dungeon_objective_8 */ u8 dungeon_objective;
s8 field_0xE;
bool8 has_guest_pokemon; // 0xF: If true, a guest pokémon will be added to your team
bool8 send_help_item; // 0x10: If true, you recive an item at the start of the dungeon
bool8 show_rescues_left; // 0x11: If true, you get a message saying how many rescue chances you
// have left
s8 field_0x12;
u8 field_0x13;
// 0x14
// [EU]0x22DF920 loads this as a word
// [EU]0x22DFBAC loads this as a signed byte
// ???
u32 field_0x14; // Copied into dungeon::field_0x750
// 0x18: The dungeon PRNG preseed? Copied into dungeon::prng_preseed_23_bit and
// dungeon::rescue_prng_preseed_23_bit.
u32 prng_preseed_23_bit;
// 0x1C: Array containing the list of quest pokémon that will join the team in the dungeon
// (max 2)
struct ground_monster guest_pokemon[2];
// 0xA4: Used as a base address at [EU]0x22E0354 and [EU]0x22E03AC.
// It's probably a separate struct.
u8 field_0xA4;
u8 field_0xA5;
u8 field_0xA6;
u8 field_0xA7;
// 0xA8: ID of the item to give to the player if send_help_item is true
/* struct item_id_16 */ u16 help_item;
u8 field_0xAA;
u8 field_0xAB;
// 0xAC: Controls which version of the dungeon to load. Gets copied into
// dungeon::dungeon_game_version_id. Uncertain when the game decides to load the
// Time/Darkness version of dungeons.
enum game_id dungeon_game_version_id;
u32 field_0xB0;
u8 field_0xB4; // Gets set to dungeon::id during dungeon init
u8 field_0xB5; // Gets set to dungeon::floor during dungeon init
u8 field_0xB6;
u8 field_0xB7;
// 0xB8: Used as a base address at [EU]0x22E0ABC.
// It's probably a separate struct.
u8 field_0xB8; // Gets set to dungeon::id during dungeon init
u8 field_0xB9; // Gets set to dungeon::floor during dungeon init
u8 field_0xBA;
u8 field_0xBB;
u32 field_0xBC;
// 0xC0: Used as a base address at [EU]0x22E0A4C
struct unk_dungeon_init field_0xC0;
u8 field_0x1A8;
// Probably padding, these bytes aren't accessed by the funtion that inits this struct
u8 field_0x1A9;
u8 field_0x1AA;
u8 field_0x1AB;
};
void InitDungeonInit(struct dungeon_init* dg_init, s16 dungeon_idx);
#endif //PMDSKY_DUNGEON_INIT

View File

@@ -1029,6 +1029,226 @@ enum dungeon_id {
DUNGEON_DUMMY_0xFF = 255,
};
// Dungeon index.
// This is identical to enum dungeon_id up to ID 212, then there are 8 cases where they differ.
// The 8 remaining entries from 212 onwards aren't in this enum because they haven't been identified yet.
// This enum only has 212 entries, compared to 255 entries in enum dungeon_id.
// See DUNGEON_SWAP_ID_TABLE for the index -> ID mapping.
enum dungeon_idx {
DUNGEON_TEST_DUNGEON_IDX = 0,
DUNGEON_BEACH_CAVE_IDX = 1,
DUNGEON_BEACH_CAVE_PIT_IDX = 2,
DUNGEON_DRENCHED_BLUFF_IDX = 3,
DUNGEON_MT_BRISTLE_IDX = 4,
DUNGEON_MT_BRISTLE_PEAK_IDX = 5,
DUNGEON_WATERFALL_CAVE_IDX = 6,
DUNGEON_APPLE_WOODS_IDX = 7,
DUNGEON_CRAGGY_COAST_IDX = 8,
DUNGEON_SIDE_PATH_IDX = 9,
DUNGEON_MT_HORN_IDX = 10,
DUNGEON_ROCK_PATH_IDX = 11,
DUNGEON_FOGGY_FOREST_IDX = 12,
DUNGEON_FOREST_PATH_IDX = 13,
DUNGEON_STEAM_CAVE_IDX = 14,
DUNGEON_UPPER_STEAM_CAVE_IDX = 15,
DUNGEON_STEAM_CAVE_PEAK_IDX = 16,
DUNGEON_AMP_PLAINS_IDX = 17,
DUNGEON_FAR_AMP_PLAINS_IDX = 18,
DUNGEON_AMP_CLEARING_IDX = 19,
DUNGEON_NORTHERN_DESERT_IDX = 20,
DUNGEON_QUICKSAND_CAVE_IDX = 21,
DUNGEON_QUICKSAND_PIT_IDX = 22,
DUNGEON_UNDERGROUND_LAKE_IDX = 23,
DUNGEON_CRYSTAL_CAVE_IDX = 24,
DUNGEON_CRYSTAL_CROSSING_IDX = 25,
DUNGEON_CRYSTAL_LAKE_IDX = 26,
DUNGEON_CHASM_CAVE_IDX = 27,
DUNGEON_DARK_HILL_IDX = 28,
DUNGEON_SEALED_RUIN_IDX = 29,
DUNGEON_DEEP_SEALED_RUIN_IDX = 30,
DUNGEON_SEALED_RUIN_PIT_IDX = 31,
DUNGEON_DUSK_FOREST_IDX = 32,
DUNGEON_DEEP_DUSK_FOREST_IDX = 33,
DUNGEON_TREESHROUD_FOREST_IDX = 34,
DUNGEON_BRINE_CAVE_IDX = 35,
DUNGEON_LOWER_BRINE_CAVE_IDX = 36,
DUNGEON_BRINE_CAVE_PIT_IDX = 37,
DUNGEON_HIDDEN_LAND_IDX = 38,
DUNGEON_HIDDEN_HIGHLAND_IDX = 39,
DUNGEON_OLD_RUINS_IDX = 40,
DUNGEON_TEMPORAL_TOWER_IDX = 41,
DUNGEON_TEMPORAL_SPIRE_IDX = 42,
DUNGEON_TEMPORAL_PINNACLE_IDX = 43,
DUNGEON_MYSTIFYING_FOREST_IDX = 44,
DUNGEON_MYSTIFYING_FOREST_CLEARING_IDX = 45,
DUNGEON_BLIZZARD_ISLAND_IDX = 46,
DUNGEON_CREVICE_CAVE_IDX = 47,
DUNGEON_LOWER_CREVICE_CAVE_IDX = 48,
DUNGEON_CREVICE_CAVE_PIT_IDX = 49,
DUNGEON_SURROUNDED_SEA_IDX = 50,
DUNGEON_MIRACLE_SEA_IDX = 51,
DUNGEON_DEEP_MIRACLE_SEA_IDX = 52,
DUNGEON_MIRACLE_SEABED_IDX = 53,
DUNGEON_ICE_AEGIS_CAVE_IDX = 54,
DUNGEON_REGICE_CHAMBER_IDX = 55,
DUNGEON_ROCK_AEGIS_CAVE_IDX = 56,
DUNGEON_REGIROCK_CHAMBER_IDX = 57,
DUNGEON_STEEL_AEGIS_CAVE_IDX = 58,
DUNGEON_REGISTEEL_CHAMBER_IDX = 59,
DUNGEON_AEGIS_CAVE_PIT_IDX = 60,
DUNGEON_REGIGIGAS_CHAMBER_IDX = 61,
DUNGEON_MT_TRAVAIL_IDX = 62,
DUNGEON_THE_NIGHTMARE_IDX = 63,
DUNGEON_SPACIAL_RIFT_IDX = 64,
DUNGEON_DEEP_SPACIAL_RIFT_IDX = 65,
DUNGEON_SPACIAL_RIFT_BOTTOM_IDX = 66,
DUNGEON_DARK_CRATER_IDX = 67,
DUNGEON_DEEP_DARK_CRATER_IDX = 68,
DUNGEON_DARK_CRATER_PIT_IDX = 69,
DUNGEON_CONCEALED_RUINS_IDX = 70,
DUNGEON_DEEP_CONCEALED_RUINS_IDX = 71,
DUNGEON_MARINE_RESORT_IDX = 72,
DUNGEON_BOTTOMLESS_SEA_IDX = 73,
DUNGEON_BOTTOMLESS_SEA_DEPTHS_IDX = 74,
DUNGEON_SHIMMER_DESERT_IDX = 75,
DUNGEON_SHIMMER_DESERT_PIT_IDX = 76,
DUNGEON_MT_AVALANCHE_IDX = 77,
DUNGEON_MT_AVALANCHE_PEAK_IDX = 78,
DUNGEON_GIANT_VOLCANO_IDX = 79,
DUNGEON_GIANT_VOLCANO_PEAK_IDX = 80,
DUNGEON_WORLD_ABYSS_IDX = 81,
DUNGEON_WORLD_ABYSS_PIT_IDX = 82,
DUNGEON_SKY_STAIRWAY_IDX = 83,
DUNGEON_SKY_STAIRWAY_APEX_IDX = 84,
DUNGEON_MYSTERY_JUNGLE_IDX = 85,
DUNGEON_DEEP_MYSTERY_JUNGLE_IDX = 86,
DUNGEON_SERENITY_RIVER_IDX = 87,
DUNGEON_LANDSLIDE_CAVE_IDX = 88,
DUNGEON_LUSH_PRAIRIE_IDX = 89,
DUNGEON_TINY_MEADOW_IDX = 90,
DUNGEON_LABYRINTH_CAVE_IDX = 91,
DUNGEON_ORAN_FOREST_IDX = 92,
DUNGEON_LAKE_AFAR_IDX = 93,
DUNGEON_HAPPY_OUTLOOK_IDX = 94,
DUNGEON_MY_MISTRAL_IDX = 95,
DUNGEON_SHIMMER_HILL_IDX = 96,
DUNGEON_LOST_WILDERNESS_IDX = 97,
DUNGEON_MIDNIGHT_FOREST_IDX = 98,
DUNGEON_ZERO_ISLE_NORTH_IDX = 99,
DUNGEON_ZERO_ISLE_EAST_IDX = 100,
DUNGEON_ZERO_ISLE_WEST_IDX = 101,
DUNGEON_ZERO_ISLE_SOUTH_IDX = 102,
DUNGEON_ZERO_ISLE_CENTER_IDX = 103,
DUNGEON_DESTINY_TOWER_IDX = 104,
DUNGEON_DUMMY_0x69_IDX = 105,
DUNGEON_DUMMY_0x6A_IDX = 106,
DUNGEON_OBLIVION_FOREST_IDX = 107,
DUNGEON_TREACHEROUS_WATERS_IDX = 108,
DUNGEON_SOUTHEASTERN_ISLANDS_IDX = 109,
DUNGEON_INFERNO_CAVE_IDX = 110,
DUNGEON_1ST_STATION_PASS_IDX = 111,
DUNGEON_2ND_STATION_PASS_IDX = 112,
DUNGEON_3RD_STATION_PASS_IDX = 113,
DUNGEON_4TH_STATION_PASS_IDX = 114,
DUNGEON_5TH_STATION_PASS_IDX = 115,
DUNGEON_6TH_STATION_PASS_IDX = 116,
DUNGEON_7TH_STATION_PASS_IDX = 117,
DUNGEON_8TH_STATION_PASS_IDX = 118,
DUNGEON_9TH_STATION_PASS_IDX = 119,
DUNGEON_SKY_PEAK_SUMMIT_PASS_IDX = 120,
DUNGEON_5TH_STATION_CLEARING_IDX = 121,
DUNGEON_SKY_PEAK_SUMMIT_IDX = 122,
DUNGEON_STAR_CAVE_SE1_IDX = 123,
DUNGEON_DEEP_STAR_CAVE_IDX = 124,
DUNGEON_DEEP_STAR_CAVE_TEAM_ROGUE_IDX = 125,
DUNGEON_STAR_CAVE_DEPTHS_IDX = 126,
DUNGEON_STAR_CAVE_PIT_IDX = 127,
DUNGEON_MURKY_FOREST_IDX = 128,
DUNGEON_EASTERN_CAVE_IDX = 129,
DUNGEON_FORTUNE_RAVINE_IDX = 130,
DUNGEON_FORTUNE_RAVINE_DEPTHS_IDX = 131,
DUNGEON_FORTUNE_RAVINE_PIT_IDX = 132,
DUNGEON_BARREN_VALLEY_IDX = 133,
DUNGEON_DEEP_BARREN_VALLEY_IDX = 134,
DUNGEON_BARREN_VALLEY_CLEARING_IDX = 135,
DUNGEON_DARK_WASTELAND_IDX = 136,
DUNGEON_TEMPORAL_TOWER_SE5_IDX = 137,
DUNGEON_TEMPORAL_SPIRE_SE5_IDX = 138,
DUNGEON_DUSK_FOREST_SE5_IDX = 139,
DUNGEON_BLACK_SWAMP_IDX = 140,
DUNGEON_SPACIAL_CLIFFS_IDX = 141,
DUNGEON_DARK_ICE_MOUNTAIN_IDX = 142,
DUNGEON_DARK_ICE_MOUNTAIN_PEAK_IDX = 143,
DUNGEON_DARK_ICE_MOUNTAIN_PINNACLE_IDX = 144,
DUNGEON_ICICLE_FOREST_IDX = 145,
DUNGEON_VAST_ICE_MOUNTAIN_IDX = 146,
DUNGEON_VAST_ICE_MOUNTAIN_PEAK_IDX = 147,
DUNGEON_VAST_ICE_MOUNTAIN_PINNACLE_IDX = 148,
DUNGEON_SOUTHERN_JUNGLE_IDX = 149,
DUNGEON_BOULDER_QUARRY_IDX = 150,
DUNGEON_DEEP_BOULDER_QUARRY_IDX = 151,
DUNGEON_BOULDER_QUARRY_CLEARING_IDX = 152,
DUNGEON_RIGHT_CAVE_PATH_IDX = 153,
DUNGEON_LEFT_CAVE_PATH_IDX = 154,
DUNGEON_LIMESTONE_CAVERN_IDX = 155,
DUNGEON_DEEP_LIMESTONE_CAVERN_IDX = 156,
DUNGEON_LIMESTONE_CAVERN_DEPTHS_IDX = 157,
DUNGEON_SPRING_CAVE_IDX = 158,
DUNGEON_UPPER_SPRING_CAVE_HAUNTER_IDX = 159,
DUNGEON_UPPER_SPRING_CAVE_IDX = 160,
DUNGEON_MIDDLE_SPRING_CAVE_IDX = 161,
DUNGEON_LOWER_SPRING_CAVE_IDX = 162,
DUNGEON_SPRING_CAVE_DEPTHS_IDX = 163,
DUNGEON_SPRING_CAVE_PIT_IDX = 164,
DUNGEON_LITTLE_PLAINS_IDX = 165,
DUNGEON_MT_CLEAR_IDX = 166,
DUNGEON_CHALLENGE_RIVER_IDX = 167,
DUNGEON_TRIAL_FOREST_IDX = 168,
DUNGEON_GUIDING_SEA_IDX = 169,
DUNGEON_HIDDEN_SHOPKEEPER_VILLAGE_IDX = 170,
DUNGEON_DUMMY_0xAB_IDX = 171,
DUNGEON_DUMMY_0xAC_IDX = 172,
DUNGEON_DUMMY_0xAD_IDX = 173,
DUNGEON_STAR_CAVE_IDX = 174,
DUNGEON_SHAYMIN_VILLAGE_IDX = 175,
DUNGEON_ARMALDOS_SHELTER_IDX = 176,
DUNGEON_LUMINOUS_SPRING_IDX = 177,
DUNGEON_HOT_SPRING_IDX = 178,
DUNGEON_RESCUE_IDX = 179,
DUNGEON_NORMAL_FLY_MAZE_IDX = 180,
DUNGEON_DARK_FIRE_MAZE_IDX = 181,
DUNGEON_ROCK_WATER_MAZE_IDX = 182,
DUNGEON_GRASS_MAZE_IDX = 183,
DUNGEON_ELEC_STEEL_MAZE_IDX = 184,
DUNGEON_ICE_GROUND_MAZE_IDX = 185,
DUNGEON_FIGHT_PSYCH_MAZE_IDX = 186,
DUNGEON_POISON_BUG_MAZE_IDX = 187,
DUNGEON_DRAGON_MAZE_IDX = 188,
DUNGEON_GHOST_MAZE_IDX = 189,
DUNGEON_EXPLORER_MAZE_IDX = 190,
DUNGEON_FINAL_MAZE_IDX = 191,
DUNGEON_DOJO_0xC0_IDX = 192,
DUNGEON_DOJO_0xC1_IDX = 193,
DUNGEON_DOJO_0xC2_IDX = 194,
DUNGEON_DOJO_0xC3_IDX = 195,
DUNGEON_DOJO_0xC4_IDX = 196,
DUNGEON_DOJO_0xC5_IDX = 197,
DUNGEON_DOJO_0xC6_IDX = 198,
DUNGEON_DOJO_0xC7_IDX = 199,
DUNGEON_DOJO_0xC8_IDX = 200,
DUNGEON_DOJO_0xC9_IDX = 201,
DUNGEON_DOJO_0xCA_IDX = 202,
DUNGEON_DOJO_0xCB_IDX = 203,
DUNGEON_DOJO_0xCC_IDX = 204,
DUNGEON_DOJO_0xCD_IDX = 205,
DUNGEON_DOJO_0xCE_IDX = 206,
DUNGEON_DOJO_0xCF_IDX = 207,
DUNGEON_DOJO_0xD0_IDX = 208,
DUNGEON_DOJO_0xD1_IDX = 209,
DUNGEON_DOJO_0xD2_IDX = 210,
DUNGEON_DOJO_0xD3_IDX = 211
};
// Dungeon group ID.
// This is more in line with what we would think of as a "whole dungeon".
// A single dungeon group might encompass multiple dungeon IDs.
@@ -3464,7 +3684,12 @@ enum script_calc_operation {
// https://docs.google.com/spreadsheets/d/1NK3wkC8mOCu-tVkxULLkhpgPR-glApiD2v3zp-mdW7w
enum performance_progress_flag
{
PERFORMANCE_PROGRESS_FLAG_RANDOM_MISSION = 3
PERFORMANCE_PROGRESS_FLAG_SHOW_TEAM_NAME = 1,
PERFORMANCE_PROGRESS_FLAG_RANDOM_MISSION = 3,
PERFORMANCE_PROGRESS_FLAG_SHOW_POTENTIAL_RECRUITS = 5,
PERFORMANCE_PROGRESS_FLAG_EVOLUTION_ENABLED = 6,
PERFORMANCE_PROGRESS_FLAG_LEADER_SWITCH_ENABLED = 7,
PERFORMANCE_PROGRESS_FLAG_NO_CHATOT_IN_BRINE_CAVE = 25
};
enum compare_operation { // Taken from pmd-red's FlagJudgeOperation
@@ -3511,4 +3736,11 @@ enum far_off_pals_option {
FAR_OFF_PALS_LOOK = 1
};
enum dungeon_mode {
DMODE_CLOSED = 0, // Dungeon is locked and uncleared
DMODE_OPEN = 1, // Dungeon is unlocked and uncleared
DMODE_REQUEST = 2, // Dungeon has been cleared, but cannot be directly accessed
DMODE_OPEN_AND_REQUEST = 3, // Dunegon is unlocked and cleared
};
#endif //PMDSKY_ENUMS_H

View File

@@ -96,6 +96,8 @@ Static main
Object asm/main_0204DB08.o
Object src/main_0204DD80.o
Object asm/main_0204DE7C.o
Object src/dungeon_init.o
Object asm/main_0204EFE0.o
Object src/number_util.o
Object asm/main_02051098.o
Object src/main_020512B0.o

223
src/dungeon_init.c Normal file
View File

@@ -0,0 +1,223 @@
#include "dungeon_init.h"
#include "enums.h"
#include "game_mode.h"
#include "progression.h"
#include "script_variable.h"
extern u8* GUEST_MONSTER_BANETTE;
extern u8* GUEST_MONSTER_SKORUPI;
extern u8* GUEST_MONSTER_BIDOOF;
extern u8* GUEST_MONSTER_SNOVER;
extern u8* GUEST_MONSTER_BIDOOF_2;
extern u8* GUEST_MONSTER_GROVYLE;
extern u8* GUEST_MONSTER_LOUDRED;
extern u8* GUEST_MONSTER_DUSKNOIR;
extern u8* GUEST_MONSTER_GROVYLE_2;
extern u8* GUEST_MONSTER_CHATOT;
extern u8* GUEST_MONSTER_SHINY_CELEBI;
extern u8* GUEST_MONSTER_GROVYLE_3;
extern u8* GUEST_MONSTER_GROVYLE_4;
extern u8* GUEST_MONSTER_CRESSELIA;
extern u8* GUEST_MONSTER_BIDOOF_3;
extern u8* GUEST_MONSTER_BIDOOF_4;
extern u8* GUEST_MONSTER_SHAYMIN_LAND;
extern u8* GUEST_MONSTER_SNOVER_2;
extern s32 GetDungeonModeSpecial(s16);
extern s8 IsNoLossPenaltyDungeon(s16);
extern void AddGuestMonster(void*, u8, void*);
extern s8 DungeonSwapIdxToId(s16);
void InitDungeonInit(struct dungeon_init* dg_init, s16 dungeon_idx)
{
u8 game_mode = GetGameMode();
dg_init->dungeon_idx = dungeon_idx;
dg_init->id = DungeonSwapIdxToId(dungeon_idx);
dg_init->floor = 1;
dg_init->field_0x12 = -1;
dg_init->dungeon_game_version_id = GAME_SKY;
dg_init->dungeon_objective = 0;
dg_init->field_0xE = -1;
dg_init->field_0x4 = 0;
dg_init->has_guest_pokemon = FALSE;
dg_init->send_help_item = FALSE;
dg_init->show_rescues_left = FALSE;
if (game_mode != GAME_MODE_NORMAL) {
dg_init->nonstory_flag = FALSE;
dg_init->recruiting_enabled = FALSE;
dg_init->show_potential_recruits = FALSE;
dg_init->show_team_name = FALSE;
} else {
dg_init->nonstory_flag = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_LEADER_SWITCH_ENABLED);
dg_init->recruiting_enabled = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_SHOW_POTENTIAL_RECRUITS);
dg_init->show_potential_recruits = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_EVOLUTION_ENABLED);
dg_init->show_team_name = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_SHOW_TEAM_NAME);
}
dg_init->send_home_disabled = FALSE;
dg_init->hidden_land_flag = FALSE;
dg_init->force_disable_recruiting = FALSE;
dg_init->skip_faint_animation_flag = FALSE;
// Init guest Pokemon
for(s32 idx = 0; idx < 2; idx++) {
dg_init->guest_pokemon[idx].is_valid = FALSE;
dg_init->guest_pokemon[idx].id = 0;
}
// Init GAME_MODE_5 specific values
if (game_mode == GAME_MODE_5) {
dg_init->nonstory_flag = TRUE;
dg_init->recruiting_enabled = FALSE;
dg_init->show_potential_recruits = FALSE;
dg_init->show_team_name = FALSE;
dg_init->hidden_land_flag = FALSE;
dg_init->dungeon_objective = OBJECTIVE_UNK_GAME_MODE_5;
dg_init->field_0x4 = 0;
dg_init->show_rescues_left = FALSE;
switch (dungeon_idx) {
default:
break;
case DUNGEON_HIDDEN_LAND_IDX:
case DUNGEON_HIDDEN_HIGHLAND_IDX:
case DUNGEON_OLD_RUINS_IDX:
case DUNGEON_TEMPORAL_TOWER_IDX:
case DUNGEON_TEMPORAL_SPIRE_IDX:
case DUNGEON_TEMPORAL_PINNACLE_IDX:
dg_init->nonstory_flag = FALSE;
break;
}
return;
}
// Init values specific to each dungeon mode
switch (GetDungeonModeSpecial(dungeon_idx)) {
case DMODE_OPEN_AND_REQUEST:
dg_init->dungeon_objective = OBJECTIVE_STORY;
break;
case DMODE_OPEN:
bool8 hidden_land;
bool8 force_disable_recruiting;
hidden_land = FALSE;
force_disable_recruiting = FALSE;
dg_init->dungeon_objective = OBJECTIVE_STORY;
dg_init->skip_faint_animation_flag = IsNoLossPenaltyDungeon(dungeon_idx);
switch (dungeon_idx) {
case DUNGEON_CRAGGY_COAST_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF);
break;
case DUNGEON_SIDE_PATH_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF_4);
break;
case DUNGEON_MT_HORN_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF_3);
break;
case DUNGEON_ROCK_PATH_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF_2);
break;
case DUNGEON_DUSK_FOREST_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE);
break;
case DUNGEON_DEEP_DUSK_FOREST_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE_3);
AddGuestMonster(dg_init, 1, &GUEST_MONSTER_SHINY_CELEBI);
break;
case DUNGEON_TREESHROUD_FOREST_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE_2);
break;
case DUNGEON_BRINE_CAVE_IDX:
if (GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_NO_CHATOT_IN_BRINE_CAVE) == 0) {
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_CHATOT);
}
break;
case DUNGEON_HIDDEN_LAND_IDX:
case DUNGEON_HIDDEN_HIGHLAND_IDX:
case DUNGEON_OLD_RUINS_IDX:
force_disable_recruiting = TRUE;
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE_4);
break;
case DUNGEON_TEMPORAL_TOWER_IDX:
case DUNGEON_TEMPORAL_SPIRE_IDX:
case DUNGEON_TEMPORAL_PINNACLE_IDX:
hidden_land = TRUE;
break;
case DUNGEON_MT_TRAVAIL_IDX:
case DUNGEON_THE_NIGHTMARE_IDX:
case DUNGEON_SPACIAL_RIFT_IDX:
case DUNGEON_DEEP_SPACIAL_RIFT_IDX:
case DUNGEON_SPACIAL_RIFT_BOTTOM_IDX:
hidden_land = TRUE;
break;
case DUNGEON_DARK_CRATER_IDX:
case DUNGEON_DEEP_DARK_CRATER_IDX:
case DUNGEON_DARK_CRATER_PIT_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_CRESSELIA);
hidden_land = TRUE;
break;
case DUNGEON_1ST_STATION_PASS_IDX:
case DUNGEON_2ND_STATION_PASS_IDX:
case DUNGEON_3RD_STATION_PASS_IDX:
case DUNGEON_4TH_STATION_PASS_IDX:
case DUNGEON_5TH_STATION_PASS_IDX:
case DUNGEON_6TH_STATION_PASS_IDX:
case DUNGEON_7TH_STATION_PASS_IDX:
case DUNGEON_8TH_STATION_PASS_IDX:
case DUNGEON_9TH_STATION_PASS_IDX:
case DUNGEON_SKY_PEAK_SUMMIT_PASS_IDX:
case DUNGEON_5TH_STATION_CLEARING_IDX:
case DUNGEON_SKY_PEAK_SUMMIT_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_SHAYMIN_LAND);
break;
case DUNGEON_STAR_CAVE_SE1_IDX:
if (LoadScriptVariableValue(NULL, 0x10) == 0) {
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_SNOVER_2);
}
break;
case DUNGEON_DEEP_STAR_CAVE_IDX:
if (LoadScriptVariableValue(NULL, 0x10) == 0) {
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_SNOVER);
}
break;
case DUNGEON_MURKY_FOREST_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BANETTE);
AddGuestMonster(dg_init, 1, &GUEST_MONSTER_SKORUPI);
break;
case DUNGEON_BARREN_VALLEY_CLEARING_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_DUSKNOIR);
break;
case DUNGEON_SPRING_CAVE_PIT_IDX:
AddGuestMonster(dg_init, 0, &GUEST_MONSTER_LOUDRED);
break;
}
if (hidden_land != FALSE) {
dg_init->hidden_land_flag = TRUE;
}
if (force_disable_recruiting != FALSE) {
dg_init->force_disable_recruiting = TRUE;
}
break;
case DMODE_REQUEST:
switch (dungeon_idx) {
default:
break;
case DUNGEON_HIDDEN_LAND_IDX:
case DUNGEON_HIDDEN_HIGHLAND_IDX:
case DUNGEON_OLD_RUINS_IDX:
case DUNGEON_TEMPORAL_TOWER_IDX:
case DUNGEON_TEMPORAL_SPIRE_IDX:
case DUNGEON_TEMPORAL_PINNACLE_IDX:
dg_init->hidden_land_flag = TRUE;
break;
}
dg_init->dungeon_objective = OBJECTIVE_NORMAL;
break;
}
dg_init->field_0x4 = 0;
dg_init->show_rescues_left = FALSE;
}