mirror of
https://github.com/pret/pmd-sky.git
synced 2026-08-28 05:38:04 -05:00
Merge pull request #235 from slaw-22/DungeonInit
Decomp InitDungeonInit
This commit is contained in:
@@ -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
|
||||
|
||||
58
asm/include/main_0204EFE0.inc
Normal file
58
asm/include/main_0204EFE0.inc
Normal 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
|
||||
3214
asm/main_0204DE7C.s
3214
asm/main_0204DE7C.s
File diff suppressed because it is too large
Load Diff
2810
asm/main_0204EFE0.s
Normal file
2810
asm/main_0204EFE0.s
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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
91
include/dungeon_init.h
Normal 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
|
||||
234
include/enums.h
234
include/enums.h
@@ -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
|
||||
|
||||
2
main.lsf
2
main.lsf
@@ -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
223
src/dungeon_init.c
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user