dungeon_data.c

This commit is contained in:
DizzyEggg
2025-03-27 16:12:45 +01:00
parent 26dee32d2a
commit ca6e8195c1
15 changed files with 674 additions and 642 deletions

View File

@@ -3,31 +3,6 @@
#include "structs/str_dungeon.h"
// size: 0x10
typedef struct DungeonDataEntry
{
/* 0x0 */ bool8 stairDirectionUp;
// If enabled, enemies will evolve when a team member is KOed (and doesn't revive) if their evolution spawns on the floor.
// False for all dungeons, but the code still works if this flag is enabled.
/* 0x1 */ bool8 enemiesEvolveWhenKOed;
/* 0x2 */ bool8 recruitingEnabled;
/* 0x3 */ s8 rescuesAllowed;
/* 0x4 */ u8 maxItemsAllowed;
/* 0x5 */ u8 maxPartyMembers;
/* 0x6 */ bool8 levelResetTo1;
/* 0x7 */ bool8 keepMoney;
/* 0x8 */ bool8 leaderCanSwitch;
/* 0x9 */ bool8 hasCheckpoint;
/* 0xA */ bool8 enterWithoutGameSave; // If false, the dungeon will force a quicksave before entering.
/* 0xB */ u8 HMMask; // HM mask for dungeon entry requirements (Fly, Dive, Waterfall, Surf, Water).
/* 0xC */ s16 turnLimit;
// The chance that a wild Pokémon's moveRandomly flag will be set when spawning,
// causing them to move randomly inside a room instead of exploring rooms.
/* 0xE */ s16 randomMovementChance;
} DungeonDataEntry;
extern const DungeonDataEntry gDungeons[];
s32 GetDungeonFloorCount(u8 dungeon);
const u8 *GetDungeonName1(u8 dungeon);
bool8 IsStairDirectionUp(u8 dungeon);

61
include/dungeon_data.h Normal file
View File

@@ -0,0 +1,61 @@
#ifndef GUARD_DUNGEON_DATA_H
#define GUARD_DUNGEON_DATA_H
#include "exclusive_pokemon.h"
#include "friend_area.h"
#include "constants/type.h"
#include "constants/friend_area.h"
#include "constants/iq_skill.h"
#include "constants/tactic.h"
#include "constants/dungeon.h"
#include "constants/item.h"
// size: 0x10
typedef struct DungeonDataEntry
{
/* 0x0 */ bool8 stairDirectionUp;
// If enabled, enemies will evolve when a team member is KOed (and doesn't revive) if their evolution spawns on the floor.
// False for all dungeons, but the code still works if this flag is enabled.
/* 0x1 */ bool8 enemiesEvolveWhenKOed;
/* 0x2 */ bool8 recruitingEnabled;
/* 0x3 */ s8 rescuesAllowed;
/* 0x4 */ u8 maxItemsAllowed;
/* 0x5 */ u8 maxPartyMembers;
/* 0x6 */ bool8 levelResetTo1;
/* 0x7 */ bool8 keepMoney;
/* 0x8 */ bool8 leaderCanSwitch;
/* 0x9 */ bool8 hasCheckpoint;
/* 0xA */ bool8 enterWithoutGameSave; // If false, the dungeon will force a quicksave before entering.
/* 0xB */ u8 HMMask; // HM mask for dungeon entry requirements (Fly, Dive, Waterfall, Surf, Water).
/* 0xC */ s16 turnLimit;
// The chance that a wild Pok<6F>mon's moveRandomly flag will be set when spawning,
// causing them to move randomly inside a room instead of exploring rooms.
/* 0xE */ s16 randomMovementChance;
} DungeonDataEntry;
extern const DungeonDataEntry gDungeons[];
extern const u8 gInvalidDungeonIDs[11];
extern const u8 gInvalidItemIDs[16];
extern const bool8 gTacticsTargetLeader[NUM_TACTICS];
extern const s16 gReqTacticLvls[NUM_TACTICS];
extern const s32 gReqIQSkillPts[NUM_IQ_SKILLS];
extern const s32 gUnknown_810A3F0[100];
extern const s16 gTypeGummiIQBoost[NUM_TYPES][NUMBER_OF_GUMMIS];
extern const s16 gUnknown_810A808[NUM_TYPES][NUMBER_OF_GUMMIS];
extern const FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS];
extern const s16 gUnknown_810AC60;
extern const s16 gUnknown_810AC62;
extern const s16 gUnknown_810AC64;
extern const s16 gUnknown_810AC66;
extern const s16 gUnknown_810AC68;
extern const u8 gUnknown_810AC6A[NUM_TYPES];
extern const bool8 gIsTypePhysicalTable[NUM_TYPES];
extern const s32 gUnknown_810AC90[10];
extern const s16 gFrenzyPlantIQReq;
extern const s16 gHydroCannonIQReq;
extern const s16 gBlastBurnIQReq;
extern const s16 gVoltTackleIQReq;
extern const u8 gDungeonWaterType[76];
extern const struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON];
#endif // GUARD_DUNGEON_DATA_H

View File

@@ -577,11 +577,7 @@ SECTIONS {
src/code_80972F4.o(.rodata);
src/code_8097504.o(.rodata);
data/data_8109D10.o(.rodata);
src/pokemon_3.o(.rodata);
src/items.o(.rodata);
src/code_8048480.o(.rodata);
src/friend_area.o(.rodata);
src/dungeon_map_access.o(.rodata);
src/dungeon_data.o(.rodata);
src/exclusive_pokemon.o(.rodata);
src/rescue_team_info.o(.rodata);
src/strings.o(.rodata);

View File

@@ -31,8 +31,7 @@
#include "dungeon_menu_moves.h"
#include "dungeon_misc.h"
#include "code_803E724.h"
extern s16 gTypeGummiIQBoost[NUM_TYPES][NUMBER_OF_GUMMIS];
#include "dungeon_data.h"
extern u8 *gUnknown_80F89F4[];
extern u8 *gUnknown_80FB580[];
@@ -66,8 +65,6 @@ extern u8 *gUnknown_80FECA0[];
extern u8 *gItemStickyDoesntWorkText[];
extern u8 *gUnknown_80F9BD8[];
#include "data/code_8048480.h"
extern void sub_8078B5C(Entity *, Entity *, u32, u32, u32);
extern void sub_8051E7C(Entity *pokemon);
extern void sub_8045BF8(u8 *, Item *);

View File

@@ -1,21 +0,0 @@
const s16 gUnknown_810A808[NUM_TYPES][NUMBER_OF_GUMMIS] =
{
[TYPE_NONE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
[TYPE_NORMAL] = {0x00, 0x3c, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x05, 0x19, 0x19, 0x19},
[TYPE_FIRE] = {0x00, 0x19, 0x3c, 0x1e, 0x14, 0x19, 0x14, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x14, 0x1e, 0x19, 0x19, 0x19, 0x14},
[TYPE_WATER] = {0x00, 0x19, 0x14, 0x3c, 0x1e, 0x1e, 0x14, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x14},
[TYPE_GRASS] = {0x00, 0x19, 0x1e, 0x14, 0x3c, 0x14, 0x1e, 0x19, 0x1e, 0x14, 0x1e, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19},
[TYPE_ELECTRIC] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x3c, 0x19, 0x19, 0x19, 0x1e, 0x14, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x14},
[TYPE_ICE] = {0x00, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x3c, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x1e},
[TYPE_FIGHTING] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x3c, 0x19, 0x19, 0x1e, 0x1e, 0x14, 0x14, 0x19, 0x19, 0x14, 0x19},
[TYPE_POISON] = {0x00, 0x19, 0x19, 0x19, 0x14, 0x19, 0x19, 0x14, 0x3c, 0x1e, 0x19, 0x1e, 0x14, 0x19, 0x19, 0x19, 0x19, 0x19},
[TYPE_GROUND] = {0x00, 0x19, 0x19, 0x1e, 0x1e, 0x05, 0x1e, 0x19, 0x14, 0x3c, 0x19, 0x19, 0x19, 0x14, 0x19, 0x19, 0x19, 0x19},
[TYPE_FLYING] = {0x00, 0x19, 0x19, 0x19, 0x14, 0x1e, 0x1e, 0x14, 0x19, 0x05, 0x3c, 0x19, 0x14, 0x1e, 0x19, 0x19, 0x19, 0x19},
[TYPE_PSYCHIC] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x14, 0x19, 0x19, 0x19, 0x3c, 0x1e, 0x19, 0x1e, 0x19, 0x1e, 0x19},
[TYPE_BUG] = {0x00, 0x19, 0x1e, 0x19, 0x14, 0x19, 0x19, 0x14, 0x19, 0x14, 0x1e, 0x19, 0x3c, 0x1e, 0x19, 0x19, 0x19, 0x19},
[TYPE_ROCK] = {0x00, 0x14, 0x14, 0x1e, 0x1e, 0x19, 0x19, 0x1e, 0x14, 0x1e, 0x14, 0x19, 0x19, 0x3c, 0x19, 0x19, 0x19, 0x1e},
[TYPE_GHOST] = {0x00, 0x05, 0x19, 0x19, 0x19, 0x19, 0x19, 0x05, 0x14, 0x19, 0x19, 0x1e, 0x14, 0x19, 0x3c, 0x19, 0x1e, 0x19},
[TYPE_DRAGON] = {0x00, 0x19, 0x14, 0x14, 0x14, 0x14, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x3c, 0x19, 0x19},
[TYPE_DARK] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x05, 0x1e, 0x19, 0x14, 0x19, 0x3c, 0x19},
[TYPE_STEEL] = {0x00, 0x14, 0x1e, 0x19, 0x14, 0x19, 0x14, 0x1e, 0x05, 0x1e, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x3c},
};

View File

@@ -1,293 +0,0 @@
static const FriendAreaSettings sFriendAreaSettings[NUM_FRIEND_AREAS] = // 810AA90
{
[FRIEND_AREA_NONE] = {
.num_pokemon = 0,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 0,
},
[BOUNTIFUL_SEA] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500,
},
[TREASURE_SEA] = {
.num_pokemon = 10,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 4500,
},
[SERENE_SEA] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8000,
},
[DEEP_SEA_FLOOR] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500,
},
[DEEP_SEA_CURRENT] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0,
},
[SEAFLOOR_CAVE] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0,
},
[SHALLOW_BEACH] = {
.num_pokemon = 5,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000,
},
[MT_DEEPGREEN] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 130,
},
[MT_CLEFT] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000,
},
[MT_MOONVIEW] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0,
},
[RAINBOW_PEAK] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500,
},
[WILD_PLAINS] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 100,
},
[BEAU_PLAINS] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 600,
},
[SKY_BLUE_PLAINS] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0,
},
[SAFARI] = {
.num_pokemon = 15,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 700,
},
[SCORCHED_PLAINS] = {
.num_pokemon = 10,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000,
},
[SACRED_FIELD] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500
},
[MIST_RISE_FOREST] = {
.num_pokemon = 14,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 150
},
[FLYAWAY_FOREST] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 550
},
[OVERGROWN_FOREST] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 600
},
[ENERGETIC_FOREST] = {
.num_pokemon = 15,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000
},
[MUSHROOM_FOREST] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[HEALING_FOREST] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[TRANSFORM_FOREST] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[SECRETIVE_FOREST] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500
},
[RUB_A_DUB_RIVER] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[TADPOLE_POND] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[TURTLESHELL_POND] = {
.num_pokemon = 10,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500
},
[MYSTIC_LAKE] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 2500
},
[WATERFALL_LAKE] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 3500
},
[PEANUT_SWAMP] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 2500
},
[POISON_SWAMP] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8500
},
[ECHO_CAVE] = {
.num_pokemon = 11,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 7500
},
[CRYPTIC_CAVE] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500
},
[DRAGON_CAVE] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0
},
[BOULDER_CAVE] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0
},
[JUNGLE] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 800
},
[DECREPIT_LAB] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[MT_DISCIPLINE] = {
.num_pokemon = 11,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1200
},
[THUNDER_MEADOW] = {
.num_pokemon = 11,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[POWER_PLANT] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 600
},
[CRATER] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 7500
},
[FURNACE_DESERT] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8500
},
[AGED_CHAMBER_AN] = {
.num_pokemon = 14,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500
},
[AGED_CHAMBER_O_EXCLAIM] = {
.num_pokemon = 14,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500
},
[ANCIENT_RELIC] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8000
},
[DARKNESS_RIDGE] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[FRIGID_CAVERN] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 9000
},
[ICE_FLOE_BEACH] = {
.num_pokemon = 5,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 9500
},
[VOLCANIC_PIT] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[STRATOS_LOOKOUT] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[RAVAGED_FIELD] = {
.num_pokemon = 5,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[MAGNETIC_QUARRY] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[LEGENDARY_ISLAND] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 7500
},
[SOUTHERN_ISLAND] = {
.num_pokemon = 2,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 9500
},
[ENCLOSED_ISLAND] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[FINAL_ISLAND] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8500
},
};

View File

@@ -1,37 +0,0 @@
// LUT for money item stack size -> money amount
// NDS=020C359C
const s32 gUnknown_810A3F0[100] = {
4, 6, 10, 14, 22, 26, 34, 38, 46, 58,
62, 74, 82, 86, 94, 106, 118, 122, 134, 142,
146, 158, 166, 178, 194, 202, 206, 214, 218, 226,
254, 262, 274, 278, 298, 302, 314, 326, 334, 346,
358, 362, 382, 386, 394, 398, 422, 446, 454, 458,
466, 478, 482, 502, 514, 526, 538, 542, 554, 562,
566, 586, 614, 622, 626, 634, 662, 674, 694, 698,
706, 718, 734, 746, 758, 768, 778, 794, 802, 818,
838, 842, 862, 866, 878, 886, 898, 914, 922, 926,
934, 958, 974, 982, 998, 1000, 1100, 1300, 1500, 20000};
const s16 gTypeGummiIQBoost[NUM_TYPES][NUMBER_OF_GUMMIS] =
{
[TYPE_NONE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
[TYPE_NORMAL] = {0x00, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03},
[TYPE_FIRE] = {0x00, 0x03, 0x07, 0x04, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x03, 0x03, 0x02, 0x04, 0x03, 0x03, 0x03, 0x02},
[TYPE_WATER] = {0x00, 0x03, 0x02, 0x07, 0x04, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02},
[TYPE_GRASS] = {0x00, 0x03, 0x04, 0x02, 0x07, 0x02, 0x04, 0x03, 0x04, 0x02, 0x04, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03},
[TYPE_ELECTRIC] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x07, 0x03, 0x03, 0x03, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02},
[TYPE_ICE] = {0x00, 0x03, 0x04, 0x03, 0x03, 0x03, 0x07, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x04},
[TYPE_FIGHTING] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x03, 0x03, 0x04, 0x04, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03},
[TYPE_POISON] = {0x00, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x07, 0x04, 0x03, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03},
[TYPE_GROUND] = {0x00, 0x03, 0x03, 0x04, 0x04, 0x01, 0x04, 0x03, 0x02, 0x07, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x03},
[TYPE_FLYING] = {0x00, 0x03, 0x03, 0x03, 0x02, 0x04, 0x04, 0x02, 0x03, 0x01, 0x07, 0x03, 0x02, 0x04, 0x03, 0x03, 0x03, 0x03},
[TYPE_PSYCHIC] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x07, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03},
[TYPE_BUG] = {0x00, 0x03, 0x04, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x02, 0x04, 0x03, 0x07, 0x04, 0x03, 0x03, 0x03, 0x03},
[TYPE_ROCK] = {0x00, 0x02, 0x02, 0x04, 0x04, 0x03, 0x03, 0x04, 0x02, 0x04, 0x02, 0x03, 0x03, 0x07, 0x03, 0x03, 0x03, 0x04},
[TYPE_GHOST] = {0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03, 0x07, 0x03, 0x04, 0x03},
[TYPE_DRAGON] = {0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x03, 0x03},
[TYPE_DARK] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x01, 0x04, 0x03, 0x02, 0x03, 0x07, 0x03},
[TYPE_STEEL] = {0x00, 0x02, 0x04, 0x03, 0x02, 0x03, 0x02, 0x04, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07},
};

View File

@@ -1,97 +0,0 @@
const u8 gInvalidDungeonIDs[11] =
{
DUNGEON_BOSS_3,
DUNGEON_BOSS_4,
DUNGEON_BOSS_9,
DUNGEON_WONDROUS_SEA,
DUNGEON_AUTOPILOT,
DUNGEON_D50,
DUNGEON_D51,
DUNGEON_D54,
DUNGEON_POISON_MAZE,
DUNGEON_D61,
DUNGEON_OUT_ON_RESCUE
};
// NDS=020C3448
const u8 gInvalidItemIDs[0x10] =
{
ITEM_G_MACHINE_6,
ITEM_G_MACHINE_7,
ITEM_G_MACHINE_8,
ITEM_TM_SPIN_SLASH,
ITEM_SWITCH_BOX,
ITEM_ALERT_SPECS,
ITEM_POSSESS_ORB,
ITEM_REVIVER_ORB,
ITEM_TM_EXCAVATE,
ITEM_TOSS_ORB,
ITEM_RING_D,
ITEM_RING_E,
ITEM_RING_F,
ITEM_OBSERVER_ORB,
ITEM_BEATUP_ORB,
NUMBER_OF_ITEM_IDS
};
const bool8 gTacticsTargetLeader[NUM_TACTICS] =
{
[TACTIC_LETS_GO_TOGETHER] = TRUE,
[TACTIC_GO_THE_OTHER_WAY] = FALSE,
[TACTIC_GO_AFTER_FOES] = FALSE,
[TACTIC_AVOID_THE_FIRST_HIT] = FALSE,
[TACTIC_ALL_FOR_ONE] = TRUE,
[TACTIC_GROUP_SAFETY] = TRUE,
[TACTIC_AVOID_TROUBLE] = TRUE,
[TACTIC_BE_PATIENT] = TRUE,
[TACTIC_KEEP_YOUR_DISTANCE] = TRUE,
[TACTIC_WAIT_THERE] = FALSE,
[TACTIC_GET_AWAY] = TRUE,
[TACTIC_UNUSED] = FALSE
};
const s16 gReqTacticLvls[NUM_TACTICS] =
{
[TACTIC_LETS_GO_TOGETHER] = 1,
[TACTIC_GO_THE_OTHER_WAY] = 25,
[TACTIC_GO_AFTER_FOES] = 1,
[TACTIC_AVOID_THE_FIRST_HIT] = 1,
[TACTIC_ALL_FOR_ONE] = 999,
[TACTIC_GROUP_SAFETY] = 999,
[TACTIC_AVOID_TROUBLE] = 35,
[TACTIC_BE_PATIENT] = 40,
[TACTIC_KEEP_YOUR_DISTANCE] = 20,
[TACTIC_WAIT_THERE] = 15,
[TACTIC_GET_AWAY] = 10,
[TACTIC_UNUSED] = 999,
};
const s32 gReqIQSkillPts[NUM_IQ_SKILLS] =
{
[IQ_NONE] = 9999,
[IQ_TYPE_ADVANTAGE_MASTER] = 105,
[IQ_ITEM_CATCHER] = 1,
[IQ_COURSE_CHECKER] = 1,
[IQ_SURE_HIT_ATTACKER] = 500,
[IQ_QUICK_DODGER] = 100,
[IQ_PP_CHECKER] = 2,
[IQ_NONTRAITOR] = 40,
[IQ_STATUS_CHECKER] = 25,
[IQ_EXP_GO_GETTER] = 200,
[IQ_EFFICIENCY_EXPERT] = 10,
[IQ_WEAK_TYPE_PICKER] = 125,
[IQ_ALL_TERRAIN_HIKER] = 400,
[IQ_SUPER_MOBILE] = 990,
[IQ_TRAP_AVOIDER] = 140,
[IQ_HOUSE_AVOIDER] = 800,
[IQ_ENERGY_SAVER] = 250,
[IQ_NONSLEEPER] = 160,
[IQ_SELF_CURER] = 70,
[IQ_TRAP_SEER] = 600,
[IQ_LAVA_EVADER] = 300,
[IQ_DEDICATED_TRAVELER] = 1,
[IQ_ITEM_MASTER] = 1,
[IQ_EXCLUSIVE_MOVE_USER] = 1,
};

View File

@@ -12,11 +12,11 @@
#include "random.h"
#include "string_format.h"
#include "strings.h"
#include "dungeon_data.h"
extern const char gUnknown_8108F10[];
extern const char gUnknown_8108F18[];
extern const char gUnknown_8108F2C[];
extern u8 gInvalidDungeonIDs[];
extern u8 gDungeonFloorCount[];
extern const u8 *const gUnknown_8108084[];
extern DungeonLocation gUnknown_8107828[];

597
src/dungeon_data.c Normal file
View File

@@ -0,0 +1,597 @@
#include "global.h"
// #include "globaldata.h" TODO: once gDungeons is moved to C
#include "dungeon_data.h"
#include "dungeon_map_access.h"
#include "constants/walkable_tile.h"
// TODO: gDungeons from `dungeon/dungeon_data.inc`
const u8 gInvalidDungeonIDs[11] =
{
DUNGEON_BOSS_3,
DUNGEON_BOSS_4,
DUNGEON_BOSS_9,
DUNGEON_WONDROUS_SEA,
DUNGEON_AUTOPILOT,
DUNGEON_D50,
DUNGEON_D51,
DUNGEON_D54,
DUNGEON_POISON_MAZE,
DUNGEON_D61,
DUNGEON_OUT_ON_RESCUE
};
// NDS=020C3448
const u8 gInvalidItemIDs[16] =
{
ITEM_G_MACHINE_6,
ITEM_G_MACHINE_7,
ITEM_G_MACHINE_8,
ITEM_TM_SPIN_SLASH,
ITEM_SWITCH_BOX,
ITEM_ALERT_SPECS,
ITEM_POSSESS_ORB,
ITEM_REVIVER_ORB,
ITEM_TM_EXCAVATE,
ITEM_TOSS_ORB,
ITEM_RING_D,
ITEM_RING_E,
ITEM_RING_F,
ITEM_OBSERVER_ORB,
ITEM_BEATUP_ORB,
NUMBER_OF_ITEM_IDS
};
const bool8 gTacticsTargetLeader[NUM_TACTICS] =
{
[TACTIC_LETS_GO_TOGETHER] = TRUE,
[TACTIC_GO_THE_OTHER_WAY] = FALSE,
[TACTIC_GO_AFTER_FOES] = FALSE,
[TACTIC_AVOID_THE_FIRST_HIT] = FALSE,
[TACTIC_ALL_FOR_ONE] = TRUE,
[TACTIC_GROUP_SAFETY] = TRUE,
[TACTIC_AVOID_TROUBLE] = TRUE,
[TACTIC_BE_PATIENT] = TRUE,
[TACTIC_KEEP_YOUR_DISTANCE] = TRUE,
[TACTIC_WAIT_THERE] = FALSE,
[TACTIC_GET_AWAY] = TRUE,
[TACTIC_UNUSED] = FALSE
};
const s16 gReqTacticLvls[NUM_TACTICS] =
{
[TACTIC_LETS_GO_TOGETHER] = 1,
[TACTIC_GO_THE_OTHER_WAY] = 25,
[TACTIC_GO_AFTER_FOES] = 1,
[TACTIC_AVOID_THE_FIRST_HIT] = 1,
[TACTIC_ALL_FOR_ONE] = 999,
[TACTIC_GROUP_SAFETY] = 999,
[TACTIC_AVOID_TROUBLE] = 35,
[TACTIC_BE_PATIENT] = 40,
[TACTIC_KEEP_YOUR_DISTANCE] = 20,
[TACTIC_WAIT_THERE] = 15,
[TACTIC_GET_AWAY] = 10,
[TACTIC_UNUSED] = 999,
};
const s32 gReqIQSkillPts[NUM_IQ_SKILLS] =
{
[IQ_NONE] = 9999,
[IQ_TYPE_ADVANTAGE_MASTER] = 105,
[IQ_ITEM_CATCHER] = 1,
[IQ_COURSE_CHECKER] = 1,
[IQ_SURE_HIT_ATTACKER] = 500,
[IQ_QUICK_DODGER] = 100,
[IQ_PP_CHECKER] = 2,
[IQ_NONTRAITOR] = 40,
[IQ_STATUS_CHECKER] = 25,
[IQ_EXP_GO_GETTER] = 200,
[IQ_EFFICIENCY_EXPERT] = 10,
[IQ_WEAK_TYPE_PICKER] = 125,
[IQ_ALL_TERRAIN_HIKER] = 400,
[IQ_SUPER_MOBILE] = 990,
[IQ_TRAP_AVOIDER] = 140,
[IQ_HOUSE_AVOIDER] = 800,
[IQ_ENERGY_SAVER] = 250,
[IQ_NONSLEEPER] = 160,
[IQ_SELF_CURER] = 70,
[IQ_TRAP_SEER] = 600,
[IQ_LAVA_EVADER] = 300,
[IQ_DEDICATED_TRAVELER] = 1,
[IQ_ITEM_MASTER] = 1,
[IQ_EXCLUSIVE_MOVE_USER] = 1,
};
// LUT for money item stack size -> money amount
// NDS=020C359C
const s32 gUnknown_810A3F0[100] = {
4, 6, 10, 14, 22, 26, 34, 38, 46, 58,
62, 74, 82, 86, 94, 106, 118, 122, 134, 142,
146, 158, 166, 178, 194, 202, 206, 214, 218, 226,
254, 262, 274, 278, 298, 302, 314, 326, 334, 346,
358, 362, 382, 386, 394, 398, 422, 446, 454, 458,
466, 478, 482, 502, 514, 526, 538, 542, 554, 562,
566, 586, 614, 622, 626, 634, 662, 674, 694, 698,
706, 718, 734, 746, 758, 768, 778, 794, 802, 818,
838, 842, 862, 866, 878, 886, 898, 914, 922, 926,
934, 958, 974, 982, 998, 1000, 1100, 1300, 1500, 20000
};
const s16 gTypeGummiIQBoost[NUM_TYPES][NUMBER_OF_GUMMIS] =
{
[TYPE_NONE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
[TYPE_NORMAL] = {0x00, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x03},
[TYPE_FIRE] = {0x00, 0x03, 0x07, 0x04, 0x02, 0x03, 0x02, 0x03, 0x03, 0x04, 0x03, 0x03, 0x02, 0x04, 0x03, 0x03, 0x03, 0x02},
[TYPE_WATER] = {0x00, 0x03, 0x02, 0x07, 0x04, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02},
[TYPE_GRASS] = {0x00, 0x03, 0x04, 0x02, 0x07, 0x02, 0x04, 0x03, 0x04, 0x02, 0x04, 0x03, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03},
[TYPE_ELECTRIC] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x07, 0x03, 0x03, 0x03, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02},
[TYPE_ICE] = {0x00, 0x03, 0x04, 0x03, 0x03, 0x03, 0x07, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x04},
[TYPE_FIGHTING] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x03, 0x03, 0x04, 0x04, 0x02, 0x02, 0x03, 0x03, 0x02, 0x03},
[TYPE_POISON] = {0x00, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x07, 0x04, 0x03, 0x04, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03},
[TYPE_GROUND] = {0x00, 0x03, 0x03, 0x04, 0x04, 0x01, 0x04, 0x03, 0x02, 0x07, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x03},
[TYPE_FLYING] = {0x00, 0x03, 0x03, 0x03, 0x02, 0x04, 0x04, 0x02, 0x03, 0x01, 0x07, 0x03, 0x02, 0x04, 0x03, 0x03, 0x03, 0x03},
[TYPE_PSYCHIC] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x07, 0x04, 0x03, 0x04, 0x03, 0x04, 0x03},
[TYPE_BUG] = {0x00, 0x03, 0x04, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x02, 0x04, 0x03, 0x07, 0x04, 0x03, 0x03, 0x03, 0x03},
[TYPE_ROCK] = {0x00, 0x02, 0x02, 0x04, 0x04, 0x03, 0x03, 0x04, 0x02, 0x04, 0x02, 0x03, 0x03, 0x07, 0x03, 0x03, 0x03, 0x04},
[TYPE_GHOST] = {0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x02, 0x03, 0x03, 0x04, 0x02, 0x03, 0x07, 0x03, 0x04, 0x03},
[TYPE_DRAGON] = {0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x03, 0x03},
[TYPE_DARK] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x03, 0x01, 0x04, 0x03, 0x02, 0x03, 0x07, 0x03},
[TYPE_STEEL] = {0x00, 0x02, 0x04, 0x03, 0x02, 0x03, 0x02, 0x04, 0x01, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x07},
};
const s16 gUnknown_810A808[NUM_TYPES][NUMBER_OF_GUMMIS] =
{
[TYPE_NONE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
[TYPE_NORMAL] = {0x00, 0x3c, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x05, 0x19, 0x19, 0x19},
[TYPE_FIRE] = {0x00, 0x19, 0x3c, 0x1e, 0x14, 0x19, 0x14, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x14, 0x1e, 0x19, 0x19, 0x19, 0x14},
[TYPE_WATER] = {0x00, 0x19, 0x14, 0x3c, 0x1e, 0x1e, 0x14, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x14},
[TYPE_GRASS] = {0x00, 0x19, 0x1e, 0x14, 0x3c, 0x14, 0x1e, 0x19, 0x1e, 0x14, 0x1e, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19},
[TYPE_ELECTRIC] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x3c, 0x19, 0x19, 0x19, 0x1e, 0x14, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x14},
[TYPE_ICE] = {0x00, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x3c, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x1e},
[TYPE_FIGHTING] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x3c, 0x19, 0x19, 0x1e, 0x1e, 0x14, 0x14, 0x19, 0x19, 0x14, 0x19},
[TYPE_POISON] = {0x00, 0x19, 0x19, 0x19, 0x14, 0x19, 0x19, 0x14, 0x3c, 0x1e, 0x19, 0x1e, 0x14, 0x19, 0x19, 0x19, 0x19, 0x19},
[TYPE_GROUND] = {0x00, 0x19, 0x19, 0x1e, 0x1e, 0x05, 0x1e, 0x19, 0x14, 0x3c, 0x19, 0x19, 0x19, 0x14, 0x19, 0x19, 0x19, 0x19},
[TYPE_FLYING] = {0x00, 0x19, 0x19, 0x19, 0x14, 0x1e, 0x1e, 0x14, 0x19, 0x05, 0x3c, 0x19, 0x14, 0x1e, 0x19, 0x19, 0x19, 0x19},
[TYPE_PSYCHIC] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x14, 0x19, 0x19, 0x19, 0x3c, 0x1e, 0x19, 0x1e, 0x19, 0x1e, 0x19},
[TYPE_BUG] = {0x00, 0x19, 0x1e, 0x19, 0x14, 0x19, 0x19, 0x14, 0x19, 0x14, 0x1e, 0x19, 0x3c, 0x1e, 0x19, 0x19, 0x19, 0x19},
[TYPE_ROCK] = {0x00, 0x14, 0x14, 0x1e, 0x1e, 0x19, 0x19, 0x1e, 0x14, 0x1e, 0x14, 0x19, 0x19, 0x3c, 0x19, 0x19, 0x19, 0x1e},
[TYPE_GHOST] = {0x00, 0x05, 0x19, 0x19, 0x19, 0x19, 0x19, 0x05, 0x14, 0x19, 0x19, 0x1e, 0x14, 0x19, 0x3c, 0x19, 0x1e, 0x19},
[TYPE_DRAGON] = {0x00, 0x19, 0x14, 0x14, 0x14, 0x14, 0x1e, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x3c, 0x19, 0x19},
[TYPE_DARK] = {0x00, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1e, 0x19, 0x19, 0x19, 0x05, 0x1e, 0x19, 0x14, 0x19, 0x3c, 0x19},
[TYPE_STEEL] = {0x00, 0x14, 0x1e, 0x19, 0x14, 0x19, 0x14, 0x1e, 0x05, 0x1e, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x3c},
};
const FriendAreaSettings gFriendAreaSettings[NUM_FRIEND_AREAS] =
{
[FRIEND_AREA_NONE] = {
.num_pokemon = 0,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 0,
},
[BOUNTIFUL_SEA] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500,
},
[TREASURE_SEA] = {
.num_pokemon = 10,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 4500,
},
[SERENE_SEA] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8000,
},
[DEEP_SEA_FLOOR] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500,
},
[DEEP_SEA_CURRENT] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0,
},
[SEAFLOOR_CAVE] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0,
},
[SHALLOW_BEACH] = {
.num_pokemon = 5,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000,
},
[MT_DEEPGREEN] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 130,
},
[MT_CLEFT] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000,
},
[MT_MOONVIEW] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0,
},
[RAINBOW_PEAK] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500,
},
[WILD_PLAINS] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 100,
},
[BEAU_PLAINS] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 600,
},
[SKY_BLUE_PLAINS] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0,
},
[SAFARI] = {
.num_pokemon = 15,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 700,
},
[SCORCHED_PLAINS] = {
.num_pokemon = 10,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000,
},
[SACRED_FIELD] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500
},
[MIST_RISE_FOREST] = {
.num_pokemon = 14,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 150
},
[FLYAWAY_FOREST] = {
.num_pokemon = 12,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 550
},
[OVERGROWN_FOREST] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 600
},
[ENERGETIC_FOREST] = {
.num_pokemon = 15,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5000
},
[MUSHROOM_FOREST] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[HEALING_FOREST] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[TRANSFORM_FOREST] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[SECRETIVE_FOREST] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500
},
[RUB_A_DUB_RIVER] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[TADPOLE_POND] = {
.num_pokemon = 9,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 500
},
[TURTLESHELL_POND] = {
.num_pokemon = 10,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500
},
[MYSTIC_LAKE] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 2500
},
[WATERFALL_LAKE] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 3500
},
[PEANUT_SWAMP] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 2500
},
[POISON_SWAMP] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8500
},
[ECHO_CAVE] = {
.num_pokemon = 11,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 7500
},
[CRYPTIC_CAVE] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 6500
},
[DRAGON_CAVE] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0
},
[BOULDER_CAVE] = {
.num_pokemon = 4,
.unlock_condition = UNLOCK_WONDER_MAIL,
.price = 0
},
[JUNGLE] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 800
},
[DECREPIT_LAB] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[MT_DISCIPLINE] = {
.num_pokemon = 11,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1200
},
[THUNDER_MEADOW] = {
.num_pokemon = 11,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[POWER_PLANT] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 600
},
[CRATER] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 7500
},
[FURNACE_DESERT] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8500
},
[AGED_CHAMBER_AN] = {
.num_pokemon = 14,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500
},
[AGED_CHAMBER_O_EXCLAIM] = {
.num_pokemon = 14,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 5500
},
[ANCIENT_RELIC] = {
.num_pokemon = 6,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8000
},
[DARKNESS_RIDGE] = {
.num_pokemon = 13,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[FRIGID_CAVERN] = {
.num_pokemon = 7,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 9000
},
[ICE_FLOE_BEACH] = {
.num_pokemon = 5,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 9500
},
[VOLCANIC_PIT] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[STRATOS_LOOKOUT] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[RAVAGED_FIELD] = {
.num_pokemon = 5,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[MAGNETIC_QUARRY] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_SHOP_STORY,
.price = 1000
},
[LEGENDARY_ISLAND] = {
.num_pokemon = 3,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 7500
},
[SOUTHERN_ISLAND] = {
.num_pokemon = 2,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 9500
},
[ENCLOSED_ISLAND] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_LEGENDARY_REQUEST,
.price = 0
},
[FINAL_ISLAND] = {
.num_pokemon = 1,
.unlock_condition = UNLOCK_SHOP_POST_GAME,
.price = 8500
},
};
const s16 gUnknown_810AC60 = 12;
const s16 gUnknown_810AC62 = 12;
const s16 gUnknown_810AC64 = 8;
const s16 gUnknown_810AC66 = 8;
const s16 gUnknown_810AC68 = 8;
const u8 gUnknown_810AC6A[NUM_TYPES] =
{
[TYPE_NONE] = TYPE_NONE,
[TYPE_NORMAL] = TYPE_GHOST,
[TYPE_FIRE] = TYPE_WATER,
[TYPE_WATER] = TYPE_GRASS,
[TYPE_GRASS] = TYPE_BUG,
[TYPE_ELECTRIC] = TYPE_GROUND,
[TYPE_ICE] = TYPE_FIRE,
[TYPE_FIGHTING] = TYPE_GHOST,
[TYPE_POISON] = TYPE_STEEL,
[TYPE_GROUND] = TYPE_FLYING,
[TYPE_FLYING] = TYPE_ROCK,
[TYPE_PSYCHIC] = TYPE_DARK,
[TYPE_BUG] = TYPE_POISON,
[TYPE_ROCK] = TYPE_FIGHTING,
[TYPE_GHOST] = TYPE_NORMAL,
[TYPE_DRAGON] = TYPE_STEEL,
[TYPE_DARK] = TYPE_DARK,
[TYPE_STEEL] = TYPE_ELECTRIC,
};
const bool8 gIsTypePhysicalTable[NUM_TYPES] = {
[TYPE_NONE] = TRUE,
[TYPE_NORMAL] = TRUE,
[TYPE_FIGHTING] = TRUE,
[TYPE_POISON] = TRUE,
[TYPE_GROUND] = TRUE,
[TYPE_FLYING] = TRUE,
[TYPE_BUG] = TRUE,
[TYPE_ROCK] = TRUE,
[TYPE_GHOST] = TRUE,
[TYPE_STEEL] = TRUE,
};
const s32 gUnknown_810AC90[10] = {2, 4, 6, 7, 8, 9, 0xA, 0xD, 0xF, 0x11};
const s16 gFrenzyPlantIQReq = 333;
const s16 gHydroCannonIQReq = 333;
const s16 gBlastBurnIQReq = 333;
const s16 gVoltTackleIQReq = 333;
const u8 gDungeonWaterType[76] = {
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_WATER,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_WATER,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
};
const struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON] = {
RED_EXCLUSIVE(MONSTER_PORYGON),
BLUE_EXCLUSIVE(MONSTER_PORYGON2),
BLUE_EXCLUSIVE(MONSTER_MAGIKARP),
BLUE_EXCLUSIVE(MONSTER_GYARADOS),
RED_EXCLUSIVE(MONSTER_FEEBAS),
RED_EXCLUSIVE(MONSTER_MILOTIC),
RED_EXCLUSIVE(MONSTER_PLUSLE),
BLUE_EXCLUSIVE(MONSTER_MINUN),
BLUE_EXCLUSIVE(MONSTER_LAPRAS),
RED_EXCLUSIVE(MONSTER_MANTINE),
RED_EXCLUSIVE(MONSTER_ROSELIA),
BLUE_EXCLUSIVE(MONSTER_AIPOM),
};

View File

@@ -39,133 +39,6 @@ EWRAM_DATA Tile gOutOfBoundsTileData = {0};
EWRAM_INIT const Tile *gCurTilesetOobTile = {NULL};
#include "constants/type.h"
const s16 gUnknown_810AC60 = 12;
const s16 gUnknown_810AC62 = 12;
const s16 gUnknown_810AC64 = 8;
const s16 gUnknown_810AC66 = 8;
const s16 gUnknown_810AC68 = 8;
const u8 gUnknown_810AC6A[NUM_TYPES] =
{
[TYPE_NONE] = TYPE_NONE,
[TYPE_NORMAL] = TYPE_GHOST,
[TYPE_FIRE] = TYPE_WATER,
[TYPE_WATER] = TYPE_GRASS,
[TYPE_GRASS] = TYPE_BUG,
[TYPE_ELECTRIC] = TYPE_GROUND,
[TYPE_ICE] = TYPE_FIRE,
[TYPE_FIGHTING] = TYPE_GHOST,
[TYPE_POISON] = TYPE_STEEL,
[TYPE_GROUND] = TYPE_FLYING,
[TYPE_FLYING] = TYPE_ROCK,
[TYPE_PSYCHIC] = TYPE_DARK,
[TYPE_BUG] = TYPE_POISON,
[TYPE_ROCK] = TYPE_FIGHTING,
[TYPE_GHOST] = TYPE_NORMAL,
[TYPE_DRAGON] = TYPE_STEEL,
[TYPE_DARK] = TYPE_DARK,
[TYPE_STEEL] = TYPE_ELECTRIC,
};
const bool8 gIsTypePhysicalTable[NUM_TYPES] = {
[TYPE_NONE] = TRUE,
[TYPE_NORMAL] = TRUE,
[TYPE_FIGHTING] = TRUE,
[TYPE_POISON] = TRUE,
[TYPE_GROUND] = TRUE,
[TYPE_FLYING] = TRUE,
[TYPE_BUG] = TRUE,
[TYPE_ROCK] = TRUE,
[TYPE_GHOST] = TRUE,
[TYPE_STEEL] = TRUE,
};
const s32 gUnknown_810AC90[] = {2, 4, 6, 7, 8, 9, 0xA, 0xD, 0xF, 0x11};
const s16 gFrenzyPlantIQReq = 333;
const s16 gHydroCannonIQReq = 333;
const s16 gBlastBurnIQReq = 333;
const s16 gVoltTackleIQReq = 333;
const u8 gDungeonWaterType[76] = {
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_WATER,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_WATER,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_LAVA,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
DUNGEON_WATER_TYPE_NONE,
};
const Tile *GetTile(s32 x, s32 y)
{
if (x >= 0 && y >= 0 && x < DUNGEON_MAX_SIZE_X && y < DUNGEON_MAX_SIZE_Y)

View File

@@ -1,21 +1,6 @@
#include "global.h"
#include "exclusive_pokemon.h"
const struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON] = {
RED_EXCLUSIVE(MONSTER_PORYGON),
BLUE_EXCLUSIVE(MONSTER_PORYGON2),
BLUE_EXCLUSIVE(MONSTER_MAGIKARP),
BLUE_EXCLUSIVE(MONSTER_GYARADOS),
RED_EXCLUSIVE(MONSTER_FEEBAS),
RED_EXCLUSIVE(MONSTER_MILOTIC),
RED_EXCLUSIVE(MONSTER_PLUSLE),
BLUE_EXCLUSIVE(MONSTER_MINUN),
BLUE_EXCLUSIVE(MONSTER_LAPRAS),
RED_EXCLUSIVE(MONSTER_MANTINE),
RED_EXCLUSIVE(MONSTER_ROSELIA),
BLUE_EXCLUSIVE(MONSTER_AIPOM),
};
#include "dungeon_data.h"
const u8 filler_ex0[8] =
{

View File

@@ -7,6 +7,7 @@
#include "items.h"
#include "pokemon.h"
#include "strings.h"
#include "dungeon_data.h"
EWRAM_DATA static bool8 sBoughtFriendAreas[NUM_FRIEND_AREAS] = {0};
@@ -15,7 +16,6 @@ EWRAM_INIT bool8 *gFriendAreas = {NULL};
// data_8107010.s
extern const u8 sUnknown_81098A4[];
extern const u8 sUnknown_81098AC[];
#include "data/friend_area_settings.h" // 810AA90
void LoadFriendAreas(void)
{
@@ -41,7 +41,7 @@ u8 sub_80923D4(s32 target)
s32 sum = 0;
for (i = 0; i < NUM_FRIEND_AREAS; i++) {
sum += sFriendAreaSettings[i].num_pokemon;
sum += gFriendAreaSettings[i].num_pokemon;
if (sum > target)
return i;
}
@@ -100,12 +100,12 @@ const u8 *GetFriendAreaName(u8 index)
u8 GetFriendAreaUnlockCondition(u8 index)
{
return sFriendAreaSettings[index].unlock_condition;
return gFriendAreaSettings[index].unlock_condition;
}
s32 GetFriendAreaPrice(u8 index)
{
return sFriendAreaSettings[index].price;
return gFriendAreaSettings[index].price;
}
void sub_8092558(u8 *buffer, u8 index)
@@ -119,7 +119,7 @@ void WriteFriendAreaName(u8 *buffer, u8 index, bool8 printPrice)
u8 priceBuffer[20];
if (printPrice) {
WriteHighDecimal(sFriendAreaSettings[index].price, priceBuffer, 1);
WriteHighDecimal(gFriendAreaSettings[index].price, priceBuffer, 1);
sprintfStatic(buffer, sUnknown_81098AC, gFriendAreaNames[index], 96, priceBuffer);
}
else
@@ -162,14 +162,14 @@ void GetFriendAreaCapacity2(u8 friendArea, FriendAreaCapacity *dst, bool8 checkL
iVar4 = 0;
for (i = 0; i < friendArea; i++)
iVar4 += sFriendAreaSettings[i].num_pokemon;
iVar4 += gFriendAreaSettings[i].num_pokemon;
dst->unk8 = iVar4;
dst->hasFriendArea = gFriendAreas[i];
if (dst->hasFriendArea) {
dst->currNoPokemon = 0;
dst->maxPokemon = sFriendAreaSettings[i].num_pokemon;
dst->maxPokemon = gFriendAreaSettings[i].num_pokemon;
for (i = 0; i < dst->maxPokemon; i++, iVar4++) {
pokeStruct = &gRecruitedPokemonRef->pokemon[iVar4];
@@ -197,14 +197,14 @@ void GetFriendAreaCapacity(u8 areaId, FriendAreaCapacity *dst, bool8 checkPartne
r5 = 0;
for (i = 0; i < areaId; i++)
r5 += sFriendAreaSettings[i].num_pokemon;
r5 += gFriendAreaSettings[i].num_pokemon;
dst->unk8 = r5;
dst->hasFriendArea = gFriendAreas[i];
if (dst->hasFriendArea) {
dst->currNoPokemon = 0;
dst->maxPokemon = sFriendAreaSettings[i].num_pokemon;
dst->maxPokemon = gFriendAreaSettings[i].num_pokemon;
max = dst->maxPokemon;
for (i = 0; i < max; i++, r5++) {

View File

@@ -14,6 +14,8 @@
#include "text_util.h"
#include "strings.h"
extern const s32 gUnknown_810A3F0[100];
extern const s16 gTypeGummiIQBoost[NUM_TYPES][NUMBER_OF_GUMMIS];
extern const char gItemParaFileName[];
extern const char gUnknown_8109794[];
extern const char gUnknown_81097A4[];
@@ -39,8 +41,6 @@ EWRAM_INIT TeamInventory *gTeamInventoryRef = {NULL}; // NDS=020EAF98
extern void SortKecleonShopInventory();
bool8 AddKecleonWareItem(u8);
#include "data/items.h"
static void sub_8090F58(u8 *, u8 *, Item *, const unkStruct_8090F58 *);
// arm9.bin::020610C0

View File

@@ -21,6 +21,7 @@
#include "strings.h"
#include "text_1.h"
#include "text_util.h"
#include "dungeon_data.h"
struct UnusedOffenseStruct
{
@@ -50,11 +51,6 @@ extern u8 gUnknown_810778C[];
extern u8 gUnknown_8107790[];
extern u8 gUnknown_8107798[];
// 2, 4, 6, 7, 8, 9, 8, 0xA, 0xD, 0xF, 0x11
extern s32 gUnknown_810AC90[10];
#include "data/pokemon_3.h"
extern void WriteDungeonLocationBits(DataSerializer*, DungeonLocation*);
extern void WritePoke1LevelBits(DataSerializer*, struct unkPokeSubStruct_C*);
void ReadDungeonLocationBits(DataSerializer*, DungeonLocation*);