mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
1856 lines
61 KiB
C
1856 lines
61 KiB
C
#ifndef PMDSKY_DUNGEON_H
|
|
#define PMDSKY_DUNGEON_H
|
|
|
|
#include "dungeon_mode.h"
|
|
#include "enums.h"
|
|
#include "item.h"
|
|
|
|
#define MAX_TEAM_MEMBERS 4
|
|
#define DUNGEON_MAX_WILD_POKEMON 16
|
|
#define DUNGEON_MAX_POKEMON 20
|
|
#define DUNGEON_MAX_SIZE_X 56
|
|
#define DUNGEON_MAX_SIZE_Y 32
|
|
#define CORRIDOR_ROOM 0xFF
|
|
|
|
extern struct dungeon *DUNGEON_PTR[];
|
|
|
|
enum terrain_type
|
|
{
|
|
// These 3 seem to indicate the 'main' type of the terrain. See helper functions for how they're set.
|
|
TERRAIN_TYPE_WALL = 0, // x0 When neither TERRAIN_TYPE_NORMAL nor TERRAIN_TYPE_SECONDARY are set
|
|
TERRAIN_TYPE_NORMAL = 1 << 0, // x1
|
|
TERRAIN_TYPE_SECONDARY = 1 << 1, // Water or lava depending on the dungeon. x2
|
|
TERRAIN_TYPE_CHASM = 3,
|
|
TERRAIN_TYPE_NATURAL_JUNCTION = 1 << 3, // x8
|
|
TERRAIN_TYPE_IMPASSABLE_WALL = 1 << 4, // x10
|
|
TERRAIN_TYPE_SHOP = 1 << 5, // x20
|
|
TERRAIN_TYPE_IN_MONSTER_HOUSE = 1 << 6, // x40
|
|
TERRAIN_TYPE_UNBREAKABLE = 1 << 8, // x100 // Cannot be broken by Absolute Mover. Set naturally on key doors.
|
|
TERRAIN_TYPE_STAIRS = 1 << 9, // x200
|
|
};
|
|
|
|
struct monster_slots {
|
|
struct entity* party_members[MAX_TEAM_MEMBERS];
|
|
struct entity* wild_pokemon[DUNGEON_MAX_WILD_POKEMON];
|
|
};
|
|
|
|
struct weather {
|
|
enum weather_id weather; // 0x0: current weather
|
|
// 0x1: Default weather on the floor that will be reverted to if the current weather is
|
|
// artificial and ends
|
|
enum weather_id natural_weather;
|
|
// 0x2: Turns left for each weather type in enum weather_id (except WEATHER_RANDOM). If
|
|
// multiple of these are nonzero, the one with the highest number of turns left is chosen.
|
|
// Ties are broken in enum order
|
|
u16 weather_turns[8];
|
|
// 0x12: Turns left for artificial permaweather from weather-setting abilities like Drought,
|
|
// Sand Stream, Drizzle, and Snow Warning; one counter for each weather type in enum weather_id
|
|
// (except WEATHER_RANDOM). Any nonzero value triggers that weather condition (it's usually set
|
|
// to 1 or 0). If the weather's source is removed, this value becomes the normal number of turns
|
|
// left for that weather condition. Priority in the event of multiple nonzero counters is the
|
|
// same as with weather_turns.
|
|
u16 artificial_permaweather_turns[8];
|
|
// 0x22: For damaging weather conditions like sandstorm. Counts down from 9-0, damage on 9
|
|
u8 weather_damage_counter;
|
|
u8 mud_sport_turns; // 0x23: Number of turns left for the Mud Sport condition
|
|
u8 water_sport_turns; // 0x24: Number of turns left for the Water Sport condition
|
|
bool8 nullify_weather; // 0x25: Cloud Nine/Air Lock is in effect
|
|
};
|
|
|
|
// Data related to dungeon generation
|
|
struct dungeon_generation_info {
|
|
// 0x0: Set if the floor layout is guaranteed to be a Monster House, or the dungeon generation
|
|
// algorithm fails
|
|
bool8 force_create_monster_house;
|
|
// 0x1: Set if the locked door on the floor has already been opened.
|
|
bool8 locked_door_opened;
|
|
// 0x2: Set if a kecleon shop was properly spawned.
|
|
bool8 kecleon_shop_spawned;
|
|
// 0x3: When a non-zero value, the one-room orb will fail.
|
|
u8 unk_one_room_flag;
|
|
bool8 dough_seed_extra_poke_flag;
|
|
// 0x5: Room index of Monster House on the floor. 0xFF if there's no Monster House
|
|
u8 monster_house_room;
|
|
// 0x6: Related to when a monster from a fixed room faints. Maybe to check if the floor
|
|
// should be over after knocking them out?
|
|
u8 unk_fixed_room_static_monster_tracker;
|
|
u8 field_0x7;
|
|
// 0x8: The type of the hidden stairs on the current floor.
|
|
enum hidden_stairs_type hidden_stairs_type;
|
|
// 0xC: Used to check to load the corresponding hidden fixed room and information for
|
|
// the corresponding type of hidden floor.
|
|
enum hidden_stairs_type hidden_floor_type;
|
|
s16 tileset_id; // 0x10
|
|
// 0x12: Music table index (see the same field in struct floor_properties)
|
|
u16 music_table_idx;
|
|
// 0x14: Controls which trap graphics to use for the staircase. Usually 0x2B (27) and
|
|
// 0x2C (28) for down and up respectively.
|
|
u16 staircase_visual_idx;
|
|
enum fixed_room_id fixed_room_id; // 0x16
|
|
u8 field_0x17;
|
|
u8 field_0x18;
|
|
u8 field_0x19;
|
|
u16 floor_generation_attempts; // 0x1A: Number of attempts at floor layout generation
|
|
struct tile tiles[32][56]; // 0x1C
|
|
struct position team_spawn_pos; // 0x8C1C: Position of the team spawn
|
|
struct position stairs_pos; // 0x8C20: Position of the stairs spawn
|
|
// 0x8C24: Position of the Hidden Stairs spawn, or (-1, -1) if no Hidden Stairs
|
|
struct position hidden_stairs_pos;
|
|
// 0x8C28: Spawn position of each of the team members
|
|
struct position individual_team_spawn_positions[4];
|
|
// There's another 6 words that look like spawn positions right after these 4
|
|
};
|
|
|
|
// Dungeon state
|
|
struct dungeon {
|
|
u8 field_0x0; // 0x0: Initialized to 0x0.
|
|
// 0x1: Set to true with mission_destination_info::target_enemy_is_defeated. Used to ensure
|
|
// the mission complete message only shows once (ie: "Yes! Knocked out challenger
|
|
// [string:1]!". Set to false after the message is shown.
|
|
bool8 target_enemy_defeated_message;
|
|
// 0x2: Set to true when the hidden outlaw mission item is dropped. Appears to be used to check
|
|
// if the message "Huh?[K] [item:] was dropped![P]Yes![K][string:1] was the outlaw!" should
|
|
// be shown when target_enemy_defeated_message is true.
|
|
bool8 hidden_outlaw_defeated_message;
|
|
// 0x3: If true and there's an active mission on the floor, the message
|
|
// "You've reached a destination floor! But where is the target pokémon..." will be displayed.
|
|
bool8 target_monster_not_found_flag;
|
|
u8 field_0x4;
|
|
bool8 stepped_on_stairs; // 0x5: True if the leader just stepped on the stairs.
|
|
// 0x6: If equal to 1 or 2, the floor will be advanced at the end of the turn,
|
|
// unless the leader fainted. 2 is used for the leader falling through a pitfall
|
|
// trap.
|
|
u8 end_floor_flag;
|
|
// 0x7: If set in tandem with either end_floor_flag or end_floor_no_death_check_flag,
|
|
// a quicksave will occur instead of a floor advance.
|
|
bool8 quicksave_flag;
|
|
// 0x8: The floor will be advanced at the end of the turn. Set when quicksaving.
|
|
bool8 end_floor_no_death_check_flag;
|
|
// 0x9: If this is 0x0 (maybe false), appears to not initialize certain parts of the dungeon.
|
|
// Possibly a boolean for when loading from a quicksave or resuming after being rescued?
|
|
u8 field_0x9;
|
|
u8 field_0xa;
|
|
u8 field_0xb;
|
|
u8 field_0xc; // 0xC: Initialized to 0x0
|
|
u8 field_0xd; // 0xD: Initialized to 0x0
|
|
// 0xE: If true, artificial weather abilities will be activated on this turn.
|
|
// Set to false by TryActivateArtificialWeatherAbilities
|
|
bool8 activate_artificial_weather_flag;
|
|
// 0xF: True if an enemy has defeated an ally on this turn and should evolve as a result
|
|
// May also have a niche usage if an enemy gets enough experience to level up through
|
|
// something like the Joy Ribbon?
|
|
bool8 should_enemy_evolve;
|
|
u8 field_0x10; // 0x10: Initialized to 0x0.
|
|
// 0x11: True if the leader isn't doing anything right now. False if it's currently performing
|
|
// an action (such as walking or attacking)
|
|
bool8 no_action_in_progress;
|
|
bool8 iq_disabled; // 0x12: IQ skills won't work in the dungeon.
|
|
bool8 regular_attack_reveal_traps; // 0x13: Regular attacks will reveal traps.
|
|
// 0x14: If > 0, you get kicked out of the dungeon, usually because an important team member
|
|
// (such as your client) fainted.
|
|
enum forced_loss_reason forced_loss_reason;
|
|
// 0x18: Appears to be set to 1 when using the escape orb and set to 2 when completing
|
|
// a mission. dungeon::end_floor_no_death_check_flag gets set whenever this is changed.
|
|
u32 successful_exit_tracker;
|
|
// 0x1C: Increased once per frame until 0x64. Resets to 0 when the leader acts.
|
|
u8 field_0x1c;
|
|
u8 field_0x1d;
|
|
// 0x1E: Number of floors completed? (Guess). Initialized to 0.
|
|
// If this is a floor tracker, odd it is not a u16 like the others.
|
|
u8 number_completed_floors;
|
|
// 0x1F: Turn counter, Speed Boost triggers every 250 turns, then the counter is reset.
|
|
u8 speed_boost_counter;
|
|
// 0x20: Total amount of floors summed by all the previous dungeons in its group
|
|
u16 number_preceding_floors;
|
|
// 0x22: Total amount of floors passed including those in its group? (Guess)
|
|
// Set to dungeon::number_preceding_floors + dungeon::number_completed_floors
|
|
u16 total_floors_completed;
|
|
u8 field_0x24;
|
|
u8 field_0x25;
|
|
u8 field_0x26;
|
|
u8 field_0x27;
|
|
u8 field_0x28;
|
|
u8 field_0x29;
|
|
u8 field_0x2a;
|
|
u8 field_0x2b;
|
|
u8 field_0x2c;
|
|
u8 field_0x2d;
|
|
u8 field_0x2e;
|
|
u8 field_0x2f;
|
|
u8 field_0x30;
|
|
u8 field_0x31;
|
|
u8 field_0x32;
|
|
u8 field_0x33;
|
|
u8 field_0x34;
|
|
u8 field_0x35;
|
|
u8 field_0x36;
|
|
u8 field_0x37;
|
|
u8 field_0x38;
|
|
u8 field_0x39;
|
|
u8 field_0x3a;
|
|
u8 field_0x3b;
|
|
u8 field_0x3c;
|
|
u8 field_0x3d;
|
|
u8 field_0x3e;
|
|
u8 field_0x3f;
|
|
u8 field_0x40;
|
|
u8 field_0x41;
|
|
u8 field_0x42;
|
|
u8 field_0x43;
|
|
u8 field_0x44;
|
|
u8 field_0x45;
|
|
u8 field_0x46;
|
|
u8 field_0x47;
|
|
u8 field_0x48;
|
|
u8 field_0x49;
|
|
u8 field_0x4a;
|
|
u8 field_0x4b;
|
|
u8 field_0x4c;
|
|
u8 field_0x4d;
|
|
u8 field_0x4e;
|
|
u8 field_0x4f;
|
|
u8 field_0x50;
|
|
u8 field_0x51;
|
|
u8 field_0x52;
|
|
u8 field_0x53;
|
|
u8 field_0x54;
|
|
u8 field_0x55;
|
|
u8 field_0x56;
|
|
u8 field_0x57;
|
|
u8 field_0x58;
|
|
u8 field_0x59;
|
|
u8 field_0x5a;
|
|
u8 field_0x5b;
|
|
u8 field_0x5c;
|
|
u8 field_0x5d;
|
|
u8 field_0x5e;
|
|
u8 field_0x5f;
|
|
u8 field_0x60;
|
|
u8 field_0x61;
|
|
u8 field_0x62;
|
|
u8 field_0x63;
|
|
u8 field_0x64;
|
|
u8 field_0x65;
|
|
u8 field_0x66;
|
|
u8 field_0x67;
|
|
u8 field_0x68;
|
|
u8 field_0x69;
|
|
u8 field_0x6a;
|
|
u8 field_0x6b;
|
|
u8 field_0x6c;
|
|
u8 field_0x6d;
|
|
u8 field_0x6e;
|
|
u8 field_0x6f;
|
|
u8 field_0x70;
|
|
u8 field_0x71;
|
|
u8 field_0x72;
|
|
u8 field_0x73;
|
|
u8 field_0x74;
|
|
u8 field_0x75;
|
|
u8 field_0x76;
|
|
u8 field_0x77;
|
|
u8 field_0x78;
|
|
u8 field_0x79;
|
|
u8 field_0x7a;
|
|
u8 field_0x7b;
|
|
u8 field_0x7c;
|
|
u8 field_0x7d;
|
|
u8 field_0x7e;
|
|
u8 field_0x7f;
|
|
u8 field_0x80;
|
|
u8 field_0x81;
|
|
u8 field_0x82;
|
|
u8 field_0x83;
|
|
u8 field_0x84;
|
|
u8 field_0x85;
|
|
u8 field_0x86;
|
|
u8 field_0x87;
|
|
u8 field_0x88;
|
|
u8 field_0x89;
|
|
u8 field_0x8a;
|
|
u8 field_0x8b;
|
|
u8 field_0x8c;
|
|
u8 field_0x8d;
|
|
u8 field_0x8e;
|
|
u8 field_0x8f;
|
|
u8 field_0x90;
|
|
u8 field_0x91;
|
|
u8 field_0x92;
|
|
u8 field_0x93;
|
|
u8 field_0x94;
|
|
u8 field_0x95;
|
|
u8 field_0x96;
|
|
u8 field_0x97;
|
|
u8 field_0x98;
|
|
u8 field_0x99;
|
|
u8 field_0x9a;
|
|
u8 field_0x9b;
|
|
u8 field_0x9c;
|
|
u8 field_0x9d;
|
|
u8 field_0x9e;
|
|
u8 field_0x9f;
|
|
u8 field_0xa0;
|
|
u8 field_0xa1;
|
|
u8 field_0xa2;
|
|
u8 field_0xa3;
|
|
u8 field_0xa4;
|
|
u8 field_0xa5;
|
|
u8 field_0xa6;
|
|
u8 field_0xa7;
|
|
u8 field_0xa8;
|
|
u8 field_0xa9;
|
|
u8 field_0xaa;
|
|
u8 field_0xab;
|
|
u8 field_0xac;
|
|
u8 field_0xad;
|
|
u8 field_0xae;
|
|
u8 field_0xaf;
|
|
u8 field_0xb0;
|
|
u8 field_0xb1;
|
|
u8 field_0xb2;
|
|
u8 field_0xb3;
|
|
u8 field_0xb4;
|
|
u8 field_0xb5;
|
|
u8 field_0xb6;
|
|
u8 field_0xb7;
|
|
u8 field_0xb8;
|
|
u8 field_0xb9;
|
|
u8 field_0xba;
|
|
u8 field_0xbb;
|
|
u8 field_0xbc;
|
|
u8 field_0xbd;
|
|
u8 field_0xbe;
|
|
u8 field_0xbf;
|
|
u8 field_0xc0;
|
|
u8 field_0xc1;
|
|
u8 field_0xc2;
|
|
u8 field_0xc3;
|
|
// 0xC4: Pointer to the entity that is taking its turn right now
|
|
struct entity* current_active_entity;
|
|
// 0xC8: Pointer to the monster that will become the leader of the team after changing leaders
|
|
struct entity* new_leader;
|
|
// 0xCC: Entity struct of the item that was just thrown or dropped
|
|
struct entity thrown_item;
|
|
// 0x184: Info about the most recent damage calculation. Reset with each call to CalcDamage
|
|
struct damage_calc_diag last_damage_calc;
|
|
// 0x1D8: Somehow related to executing a monster's actions (including leader).
|
|
// Initialized to 0xFFFF
|
|
u16 field_0x1d8;
|
|
// 0x1DA: Somehow related to executing the leader's actions. Also maybe when leader opens
|
|
// some menus? Initialized to 0xFFFF
|
|
u16 field_0x1da;
|
|
u16 field_0x1dc; // 0x1DC: Initialized to 0xFFFF
|
|
u16 field_0x1de; // 0x1DE: Initialized to 0xFFFF
|
|
// 0x1E0: Color table. Used to apply a tint to the colors shown on screen.
|
|
// Changes depending on the current weather.
|
|
struct rgba color_table[256];
|
|
// 0x5E0: Data for Kecleon shopkeeper spawns. It's weird that there's room for more than one;
|
|
// it seems like only the first entry should ever be filled
|
|
struct spawned_shopkeeper_data shopkeeper_spawns[8];
|
|
// 0x610: Number of valid shopkeeper spawns
|
|
int shopkeeper_spawn_count;
|
|
u32 field_0x614;
|
|
// 0x618: Something related to animiations? Could be ID?
|
|
u32 unk1_animation1_value;
|
|
u32 unk2_animation1_value;
|
|
u32 unk3_animation1_value;
|
|
struct entity* animation1_entity; // 0x624: Monster pointer for the animation?
|
|
// 0x628: Something related to animiations? Could be ID?
|
|
u32 unk1_animation2_value;
|
|
u32 unk2_animation2_value;
|
|
u32 unk3_animation2_value;
|
|
struct entity* animation2_entity; // 0x634: Monster pointer for the animation?
|
|
// 0x638: Something related to animiations? Could be ID?
|
|
u32 unk1_animation3_value;
|
|
u32 unk2_animation3_value;
|
|
u32 unk3_animation3_value;
|
|
struct entity* animation3_entity; // 0x644: Monster pointer for the animation?
|
|
// 0x648: Some type of monster name related to fainting. Used for the partner, escort or
|
|
// accompanying monster, but may be be changed when any monster faints (but might not be
|
|
// used for them).
|
|
char unk_fainted_monster_name[10];
|
|
u8 field_0x652;
|
|
u8 field_0x653;
|
|
u8 field_0x654;
|
|
u8 field_0x655;
|
|
u8 field_0x656;
|
|
u8 field_0x657;
|
|
u8 field_0x658;
|
|
u8 field_0x659;
|
|
u8 field_0x65a;
|
|
u8 field_0x65b;
|
|
u8 field_0x65c;
|
|
u8 field_0x65d;
|
|
u8 field_0x65e;
|
|
u8 field_0x65f;
|
|
u8 field_0x660;
|
|
u8 field_0x661;
|
|
u8 field_0x662;
|
|
u8 field_0x663;
|
|
u8 field_0x664;
|
|
u8 field_0x665;
|
|
u8 field_0x666;
|
|
u8 field_0x667;
|
|
u8 field_0x668;
|
|
u8 field_0x669;
|
|
u8 field_0x66a;
|
|
u8 field_0x66b;
|
|
u8 field_0x66c;
|
|
u8 field_0x66d;
|
|
u8 field_0x66e;
|
|
u8 field_0x66f;
|
|
u8 field_0x670;
|
|
u8 field_0x671;
|
|
u8 field_0x672;
|
|
u8 field_0x673;
|
|
u8 field_0x674;
|
|
u8 field_0x675;
|
|
u8 field_0x676;
|
|
u8 field_0x677;
|
|
u8 field_0x678;
|
|
u8 field_0x679;
|
|
u8 field_0x67a;
|
|
u8 field_0x67b;
|
|
u8 field_0x67c;
|
|
u8 field_0x67d;
|
|
u8 field_0x67e;
|
|
u8 field_0x67f;
|
|
u8 field_0x680;
|
|
u8 field_0x681;
|
|
u8 field_0x682;
|
|
u8 field_0x683;
|
|
u8 field_0x684;
|
|
u8 field_0x685;
|
|
u8 field_0x686;
|
|
u8 field_0x687;
|
|
u8 field_0x688;
|
|
u8 field_0x689;
|
|
u8 field_0x68a;
|
|
u8 field_0x68b;
|
|
u8 field_0x68c;
|
|
u8 field_0x68d;
|
|
u8 field_0x68e;
|
|
u8 field_0x68f;
|
|
u8 field_0x690;
|
|
u8 field_0x691;
|
|
u8 field_0x692;
|
|
u8 field_0x693;
|
|
u8 field_0x694;
|
|
u8 field_0x695;
|
|
u8 field_0x696;
|
|
u8 field_0x697;
|
|
u8 field_0x698;
|
|
u8 field_0x699;
|
|
u8 field_0x69a;
|
|
u8 field_0x69b;
|
|
u8 field_0x69c;
|
|
u8 field_0x69d;
|
|
u8 field_0x69e;
|
|
u8 field_0x69f;
|
|
u8 field_0x6a0;
|
|
u8 field_0x6a1;
|
|
u8 field_0x6a2;
|
|
u8 field_0x6a3;
|
|
u8 field_0x6a4;
|
|
u8 field_0x6a5;
|
|
u8 field_0x6a6;
|
|
u8 field_0x6a7;
|
|
u8 field_0x6a8;
|
|
u8 field_0x6a9;
|
|
u8 field_0x6aa;
|
|
u8 field_0x6ab;
|
|
u8 field_0x6ac;
|
|
u8 field_0x6ad;
|
|
u8 field_0x6ae;
|
|
u8 field_0x6af;
|
|
u8 field_0x6b0;
|
|
u8 field_0x6b1;
|
|
u8 field_0x6b2;
|
|
u8 field_0x6b3;
|
|
u8 field_0x6b4;
|
|
u8 field_0x6b5;
|
|
u8 field_0x6b6;
|
|
u8 field_0x6b7;
|
|
u8 field_0x6b8;
|
|
u8 field_0x6b9;
|
|
u8 field_0x6ba;
|
|
u8 field_0x6bb;
|
|
u8 field_0x6bc;
|
|
u8 field_0x6bd;
|
|
u8 field_0x6be;
|
|
u8 field_0x6bf;
|
|
u8 field_0x6c0;
|
|
u8 field_0x6c1;
|
|
u8 field_0x6c2;
|
|
u8 field_0x6c3;
|
|
u8 field_0x6c4;
|
|
u8 field_0x6c5;
|
|
u8 field_0x6c6;
|
|
u8 field_0x6c7;
|
|
u8 field_0x6c8;
|
|
u8 field_0x6c9;
|
|
u8 field_0x6ca;
|
|
u8 field_0x6cb;
|
|
u8 field_0x6cc;
|
|
u8 field_0x6cd;
|
|
u8 field_0x6ce;
|
|
u8 field_0x6cf;
|
|
u8 field_0x6d0;
|
|
u8 field_0x6d1;
|
|
u8 field_0x6d2;
|
|
u8 field_0x6d3;
|
|
u8 field_0x6d4;
|
|
u8 field_0x6d5;
|
|
u8 field_0x6d6;
|
|
u8 field_0x6d7;
|
|
u8 field_0x6d8;
|
|
u8 field_0x6d9;
|
|
u8 field_0x6da;
|
|
u8 field_0x6db;
|
|
u8 field_0x6dc;
|
|
u8 field_0x6dd;
|
|
u8 field_0x6de;
|
|
u8 field_0x6df;
|
|
u8 field_0x6e0;
|
|
u8 field_0x6e1;
|
|
u8 field_0x6e2;
|
|
u8 field_0x6e3;
|
|
u8 field_0x6e4;
|
|
u8 field_0x6e5;
|
|
u8 field_0x6e6;
|
|
u8 field_0x6e7;
|
|
u8 field_0x6e8;
|
|
u8 field_0x6e9;
|
|
u8 field_0x6ea;
|
|
u8 field_0x6eb;
|
|
u8 field_0x6ec;
|
|
u8 field_0x6ed;
|
|
u8 field_0x6ee;
|
|
u8 field_0x6ef;
|
|
u8 field_0x6f0;
|
|
u8 field_0x6f1;
|
|
u8 field_0x6f2;
|
|
u8 field_0x6f3;
|
|
u8 field_0x6f4;
|
|
u8 field_0x6f5;
|
|
u8 field_0x6f6;
|
|
u8 field_0x6f7;
|
|
u8 field_0x6f8;
|
|
u8 field_0x6f9;
|
|
u8 field_0x6fa;
|
|
u8 field_0x6fb;
|
|
u8 field_0x6fc;
|
|
u8 field_0x6fd;
|
|
u8 field_0x6fe;
|
|
u8 field_0x6ff;
|
|
u8 field_0x700;
|
|
u8 field_0x701;
|
|
u8 field_0x702;
|
|
u8 field_0x703;
|
|
u8 field_0x704;
|
|
u8 field_0x705;
|
|
u8 field_0x706;
|
|
u8 field_0x707;
|
|
u8 field_0x708;
|
|
u8 field_0x709;
|
|
u8 field_0x70a;
|
|
u8 field_0x70b;
|
|
u8 field_0x70c;
|
|
u8 field_0x70d;
|
|
u8 field_0x70e;
|
|
u8 field_0x70f;
|
|
u8 field_0x710;
|
|
u8 field_0x711;
|
|
u8 field_0x712;
|
|
u8 field_0x713;
|
|
u8 field_0x714;
|
|
u8 field_0x715;
|
|
u8 field_0x716;
|
|
u8 field_0x717;
|
|
u8 field_0x718;
|
|
u8 field_0x719;
|
|
u8 field_0x71a;
|
|
u8 field_0x71b;
|
|
u8 field_0x71c;
|
|
u8 field_0x71d;
|
|
u8 field_0x71e;
|
|
u8 field_0x71f;
|
|
u8 field_0x720;
|
|
u8 field_0x721;
|
|
u8 field_0x722;
|
|
u8 field_0x723;
|
|
u8 field_0x724;
|
|
u8 field_0x725;
|
|
u8 field_0x726;
|
|
u8 field_0x727;
|
|
u8 field_0x728;
|
|
u8 field_0x729;
|
|
u8 field_0x72a;
|
|
u8 field_0x72b;
|
|
u8 field_0x72c;
|
|
u8 field_0x72d;
|
|
u8 field_0x72e;
|
|
u8 field_0x72f;
|
|
u8 field_0x730;
|
|
u8 field_0x731;
|
|
u8 field_0x732;
|
|
u8 field_0x733;
|
|
u8 field_0x734;
|
|
u8 field_0x735;
|
|
u8 field_0x736;
|
|
u8 field_0x737;
|
|
u8 field_0x738;
|
|
u8 field_0x739;
|
|
u8 field_0x73a;
|
|
u8 field_0x73b;
|
|
u8 field_0x73c;
|
|
u8 field_0x73d;
|
|
u8 field_0x73e;
|
|
u8 field_0x73f;
|
|
u8 field_0x740;
|
|
u8 field_0x741;
|
|
u8 field_0x742;
|
|
u8 field_0x743;
|
|
u8 field_0x744;
|
|
u8 field_0x745;
|
|
u8 field_0x746;
|
|
u8 field_0x747;
|
|
// 0x748: Current dungeon ID. Is actually a dungeon_floor_pair struct that also contains
|
|
// the floor number.
|
|
enum dungeon_id id;
|
|
u8 floor; // 0x749: Current floor number
|
|
enum dungeon_group_id group_id; // 0x74A: Same for different segments of a dungeon
|
|
u8 field_0x74b;
|
|
// 0x74C: Used as an input to GetDungeonMode, and uses output to determine if the
|
|
// override fixed room should be loaded?
|
|
u16 field_0x74c;
|
|
u8 field_0x74e;
|
|
u8 field_0x74f;
|
|
// 0x750: A ldr instruction is used at this address? Maybe used for something else before
|
|
// the rescue floor number is set?
|
|
u8 field_0x750;
|
|
u8 rescue_floor; // 0x751: Floor number where the rescue point is, if applicable
|
|
u8 field_0x752;
|
|
u8 field_0x753;
|
|
// 0x754: Should also be prng_pressed_23_bit? dungeon_init::prng_preseed_23_bit gets copied
|
|
// here, but might not be used?
|
|
u32 prng_preseed_23_bit;
|
|
// 0x758: Whether the current floor should continue or end and why
|
|
enum floor_loop_status floor_loop_status;
|
|
bool8 recruiting_enabled; // 0x759: Recruitment is allowed in this dungeon
|
|
// 0x75A: If this is 0, the game wont use GetMonsterEvoStatus when gathering information for
|
|
// the monster's summary (in stuff like the team menu).
|
|
u8 field_0x75a;
|
|
// 0x75B: When the dungeon is initialized this value gets forced to true. Likely because this
|
|
// effect seems incomplete. When false the game will stop items from being added to the bag
|
|
// but monsters are still alloweed to hold onto items normally. However, it does not seem to
|
|
// properly add items picked up by team members to the treasure bag (making it impossible to
|
|
// remove through the item menu). Additionally, items already in the bag can be used normally?
|
|
bool8 bag_enabled;
|
|
bool8 nonstory_flag; // 0x75C: Allows leader changing and continuing without the partner
|
|
bool8 send_home_disabled; // 0x75D: Sending teammates home is not allowed in this dungeon
|
|
// 0x75E: Disables sending home/leader changing, lose if partner faints. Set for dungeons
|
|
// between DUNGEON_HIDDEN_LAND and DUNGEON_TEMPORAL_PINNACLE.
|
|
bool8 hidden_land_flag;
|
|
// 0x75F: If true, the message log won't be shown and the yellow beam animation won't
|
|
// appear over team members after the leader faints. It's enabled for dungeons where you don't
|
|
// get penalized for fainting, but it's not used to perform that check.
|
|
bool8 skip_faint_animation_flag;
|
|
// 0x760: Info about the next mission destination floor, if applicable
|
|
struct mission_destination_info mission_destination;
|
|
u8 field_0x77c;
|
|
u8 field_0x77d;
|
|
// 0x77E: Appears to track if the player has already been healed by Mime Jr. to change
|
|
// the dialogue. Initialized to 0 using MemZero?
|
|
bool8 bazaar_mime_jr_heal;
|
|
u8 field_0x77f;
|
|
// 0x780: Controls when a monster at a certain speed stage is able to act.
|
|
// Increased by 1-4 each turn, depending on the team leader's speed level:
|
|
// At normal speed, this will tick up by 4 each turn (can act when x % 4 == 3)
|
|
// At +1 speed, ticks up by 2 each turn (can act when x % 2 == 1)
|
|
// At +2 speed, ticks up by 1 or 2 each turn (can act when x % 4 != 0)
|
|
// At +3 speed, ticks up by 1 each turn (an act every tick)
|
|
// The counter is increased modulo 24, goes from 0x00 to 0x17 then starts over
|
|
u16 fractional_turn;
|
|
u16 enemy_spawn_counter; // 0x782: Counts from 0-35, spawns happen at 0
|
|
s16 wind_turns; // 0x784: Countdown to the wind blowing you out of the dungeon
|
|
u16 enemy_density; // 0x786: If 0, prevents the enemy_spawn_counter for increasing
|
|
// 0x788: The genid of the next monster to be spawned. Ticks up with each spawn.
|
|
u16 next_spawn_genid;
|
|
u8 field_0x78a; // 0x78A: Initialized to 0x0.
|
|
// 0x78B: True if the leader is running. Causes the leader's action for the next turn
|
|
// to be set to action::ACTION_WALK until it hits an obstacle.
|
|
bool8 leader_running;
|
|
// 0x78C: Likely related to the actions of the leader because it is set to 0 in
|
|
// SetLeaderAction and this value gets bitwise or'd with 0x78B and then saved back to here.
|
|
u8 field_0x78c;
|
|
// 0x78D: This flag is set by the move 0x189 ("HP Gauge") which is the
|
|
// effect of the Identify Orb. If true, monsters not in the team that are
|
|
// holding an item will be marked by a blue exclamation mark icon.
|
|
bool8 identify_orb_flag;
|
|
bool8 pass_turn; // 0x78E: True if the leader has chosen to pass its turn
|
|
bool8 drought_orb_flag; // 0x78F: True if a drought orb has been used.
|
|
bool8 thief_alert; // 0x790: If you've stolen from Kecleon (actual dungeon state)
|
|
// 0x791: If you've stolen from Kecleon (triggers music and other events?)
|
|
bool8 thief_alert_event;
|
|
// 0x792: Can only be 0,1,2,3,4. Controls when to play certain special music tracks 0x7C
|
|
// (1), 0x7D (2), 0xA8 (3), 0xA9 (4). Used by the Gone Pebbble to play track 0xA8,
|
|
// challenge letter missions to play track 0x7C and dungeon failure to play 0xA9?
|
|
u8 unk_music_flag;
|
|
bool8 monster_house_triggered; // 0x793: You Entered a Monster House (actual dungeon state)
|
|
// 0x794: You entered a Monster House (triggers music and other events?)
|
|
bool8 monster_house_triggered_event;
|
|
u8 field_0x795;
|
|
// 0x796: Seems to often be 0x3E7 (999)? Somehow related to controlling or managing the
|
|
// playing music?
|
|
u16 field_0x796;
|
|
enum dungeon_objective dungeon_objective; // 0x798: Objective of the current dungeon
|
|
// 0x799: Determines which message to display when the leader's belly reaches 0. Goes up
|
|
// to 0x9 (9), but only displays a unique message for 0x1, 0x2, and 0x3.
|
|
u8 leader_hunger_message_tracker;
|
|
// 0x79A: Keeps track of which animation/message to display as the turn limit ticks down. This
|
|
// ensures that even if the number of turns given to a player is less than the number where an
|
|
// animation would play, it will still play.
|
|
u8 turn_limit_warning_tracker;
|
|
// 0x79B: Number of times you can be rescued in this dungeon
|
|
s8 rescue_attempts_left;
|
|
u32 prng_seed; // 0x79C: The dungeon PRNG seed, if set
|
|
u32 rescue_prng_preseed_23_bit; // 0x7A0: The 23 bit dungeon PRNG preseed for rescues?
|
|
u16 field_0x7a4; // 0x7A4: Initialized to 0x63.
|
|
u16 field_0x7a6; // 0x7A6: Initialized to 0x63.
|
|
// 0x7A8: Holds some data for a monster id to loads its sprite. If this value is non-zero,
|
|
// it gets loaded after loading the dungeon floor monster spawn entries. Maybe for monsters
|
|
// that need a specific item to spawn?
|
|
enum monster_id some_monster_sprite_to_load;
|
|
u8 some_monster_level; // 0x7AA: The level for dungeon::some_monster_sprite_to_load?
|
|
u8 field_0x7ab;
|
|
// 0x7AC: Second number in the default LCG sequence, used for computing the actual dungeon PRNG
|
|
// seed
|
|
u32 prng_preseed;
|
|
u8 field_0x7b0;
|
|
u8 field_0x7b1;
|
|
u8 field_0x7b2;
|
|
u8 field_0x7b3;
|
|
u8 field_0x7b4;
|
|
u8 field_0x7b5;
|
|
u8 field_0x7b6;
|
|
u8 field_0x7b7;
|
|
u8 field_0x7b8;
|
|
u8 field_0x7b9;
|
|
u8 field_0x7ba;
|
|
u8 field_0x7bb;
|
|
// 0x7BC: The amount of poke the items being bought are worth (By the player)?
|
|
u32 poke_buy_kecleon_shop;
|
|
// 0x7C0: The amount of poke the items being sold are worth (By the player)?
|
|
u32 poke_sold_kecleon_shop;
|
|
// 0x7C4: Uncertain what this tracks? This is definitely related to
|
|
// dungeon::poke_buy_kecleon_shop. Sometimes subtract dungeon::poke_buy_kecleon_shop from
|
|
// this, set this to dungeon::poke_buy_kecleon_shop, and sometimes compared to
|
|
// dungeon::poke_buy_kecleon_shop.
|
|
u32 unk_poke_kecleon_shop_tracker;
|
|
// 0x7C8: Leader standing on a Kecleon shop tile?
|
|
bool8 leader_standing_in_kecleon_shop;
|
|
// 0x7C9: You entered a Kecleon Shop (triggers music and maybe more?)
|
|
bool8 standing_in_kecleon_shop;
|
|
u8 field_0x7ca;
|
|
u8 field_0x7cb;
|
|
// 0x7CC: Controls which mappa file (Time/Darkness/Sky) to load for a dungeon. When time and
|
|
// darkness are selected their respective mappa files are loaded, the hidden stairs type
|
|
// will always return 0, treasure boxes will generate with only exclusive items that exist
|
|
// in time/darkness, use a multiple of 0x28 (40) for poke. If sky is selected, causes
|
|
// waza_p2.bin to be loaded over waza_p.bin. Because waza_p.bin is initally loaded into
|
|
// the move table and the check to load waza_p2.bin is later, waza_p2.bin can be deleted
|
|
// without causing the game to crash as the data from waza_p.bin is still loaded because
|
|
// it's not overwritten by loading waza_p2.bin
|
|
enum game_id dungeon_game_version_id;
|
|
// 0x7D0: Maybe a pointer to a spawn list or related to a spawn list?
|
|
// Possibly a 0x8 long array of a struct-like object? Each entry is 4 bytes, but maybe the
|
|
// last byte is unused??
|
|
u8 field_0x7d0;
|
|
u8 field_0x7d1;
|
|
u8 field_0x7d2;
|
|
u8 field_0x7d3;
|
|
u8 field_0x7d4;
|
|
u8 field_0x7d5;
|
|
u8 field_0x7d6;
|
|
u8 field_0x7d7;
|
|
u8 field_0x7d8;
|
|
u8 field_0x7d9;
|
|
u8 field_0x7da;
|
|
u8 field_0x7db;
|
|
u8 field_0x7dc;
|
|
u8 field_0x7dd;
|
|
u8 field_0x7de;
|
|
u8 field_0x7df;
|
|
u8 field_0x7e0;
|
|
u8 field_0x7e1;
|
|
u8 field_0x7e2;
|
|
u8 field_0x7e3;
|
|
u8 field_0x7e4;
|
|
u8 field_0x7e5;
|
|
u8 field_0x7e6;
|
|
u8 field_0x7e7;
|
|
u8 field_0x7e8;
|
|
u8 field_0x7e9;
|
|
u8 field_0x7ea;
|
|
u8 field_0x7eb;
|
|
u8 field_0x7ec;
|
|
u8 field_0x7ed;
|
|
u8 field_0x7ee;
|
|
u8 field_0x7ef;
|
|
// 0x7F0: Somehow related to dungeon::0x7D0?
|
|
u16 field_0x7f0;
|
|
// 0x7F2: May always just be a copy of dungeon::some_monster_sprite_to_load, but may also
|
|
// have another purpose.
|
|
enum monster_id some_monster_sprite;
|
|
struct monster monsters[20]; // 0x7F4: Info for all the monsters currently in the dungeon
|
|
// 0x34F4: Array that contains the spawn stats for enemies, which are only calculated
|
|
// once at the start of the floor.
|
|
// Since the enemy spawn list of a floor can only have a maximum of 16 entries,
|
|
// the remaining 48 are unused.
|
|
struct enemy_spawn_stats enemy_spawn_stats[64];
|
|
// 0x3974: Monsters that can be spawned on the floor.
|
|
// Read when spawning enemies, at initialization the one at 0x2C964 is used.
|
|
// The number of valid entries is stored in monster_spawn_table_length.
|
|
// The last 2 entries of the table are always Kecleon (0x17F) and the dummy (0x229).
|
|
struct monster_spawn_entry spawn_entries[16];
|
|
u8 field_0x39f4;
|
|
u8 field_0x39f5;
|
|
u8 field_0x39f6;
|
|
u8 field_0x39f7;
|
|
u8 field_0x39f8;
|
|
u8 field_0x39f9;
|
|
u8 field_0x39fa;
|
|
u8 field_0x39fb;
|
|
u8 field_0x39fc;
|
|
u8 field_0x39fd;
|
|
u8 field_0x39fe;
|
|
u8 field_0x39ff;
|
|
u8 field_0x3a00;
|
|
u8 field_0x3a01;
|
|
u8 field_0x3a02;
|
|
u8 field_0x3a03;
|
|
u8 field_0x3a04;
|
|
u8 field_0x3a05;
|
|
u8 field_0x3a06;
|
|
u8 field_0x3a07;
|
|
u8 field_0x3a08;
|
|
u8 field_0x3a09;
|
|
u8 field_0x3a0a;
|
|
u8 field_0x3a0b;
|
|
u8 field_0x3a0c;
|
|
u8 field_0x3a0d;
|
|
u8 field_0x3a0e;
|
|
u8 field_0x3a0f;
|
|
u8 field_0x3a10;
|
|
u8 field_0x3a11;
|
|
u8 field_0x3a12;
|
|
u8 field_0x3a13;
|
|
u8 field_0x3a14;
|
|
u8 field_0x3a15;
|
|
u8 field_0x3a16;
|
|
u8 field_0x3a17;
|
|
u8 field_0x3a18;
|
|
u8 field_0x3a19;
|
|
u8 field_0x3a1a;
|
|
u8 field_0x3a1b;
|
|
u8 field_0x3a1c;
|
|
u8 field_0x3a1d;
|
|
u8 field_0x3a1e;
|
|
u8 field_0x3a1f;
|
|
u8 field_0x3a20;
|
|
u8 field_0x3a21;
|
|
u8 field_0x3a22;
|
|
u8 field_0x3a23;
|
|
u8 field_0x3a24;
|
|
u8 field_0x3a25;
|
|
u8 field_0x3a26;
|
|
u8 field_0x3a27;
|
|
u8 field_0x3a28;
|
|
u8 field_0x3a29;
|
|
u8 field_0x3a2a;
|
|
u8 field_0x3a2b;
|
|
u8 field_0x3a2c;
|
|
u8 field_0x3a2d;
|
|
u8 field_0x3a2e;
|
|
u8 field_0x3a2f;
|
|
u8 field_0x3a30;
|
|
u8 field_0x3a31;
|
|
u8 field_0x3a32;
|
|
u8 field_0x3a33;
|
|
u8 field_0x3a34;
|
|
u8 field_0x3a35;
|
|
u8 field_0x3a36;
|
|
u8 field_0x3a37;
|
|
u8 field_0x3a38;
|
|
u8 field_0x3a39;
|
|
u8 field_0x3a3a;
|
|
u8 field_0x3a3b;
|
|
u8 field_0x3a3c;
|
|
u8 field_0x3a3d;
|
|
u8 field_0x3a3e;
|
|
u8 field_0x3a3f;
|
|
u8 field_0x3a40;
|
|
u8 field_0x3a41;
|
|
u8 field_0x3a42;
|
|
u8 field_0x3a43;
|
|
u8 field_0x3a44;
|
|
u8 field_0x3a45;
|
|
u8 field_0x3a46;
|
|
u8 field_0x3a47;
|
|
u8 field_0x3a48;
|
|
u8 field_0x3a49;
|
|
u8 field_0x3a4a;
|
|
u8 field_0x3a4b;
|
|
u8 field_0x3a4c;
|
|
u8 field_0x3a4d;
|
|
u8 field_0x3a4e;
|
|
u8 field_0x3a4f;
|
|
u8 field_0x3a50;
|
|
u8 field_0x3a51;
|
|
u8 field_0x3a52;
|
|
u8 field_0x3a53;
|
|
u8 field_0x3a54;
|
|
u8 field_0x3a55;
|
|
u8 field_0x3a56;
|
|
u8 field_0x3a57;
|
|
u8 field_0x3a58;
|
|
u8 field_0x3a59;
|
|
u8 field_0x3a5a;
|
|
u8 field_0x3a5b;
|
|
u8 field_0x3a5c;
|
|
u8 field_0x3a5d;
|
|
u8 field_0x3a5e;
|
|
u8 field_0x3a5f;
|
|
u8 field_0x3a60;
|
|
u8 field_0x3a61;
|
|
u8 field_0x3a62;
|
|
u8 field_0x3a63;
|
|
u8 field_0x3a64;
|
|
u8 field_0x3a65;
|
|
u8 field_0x3a66;
|
|
u8 field_0x3a67;
|
|
u8 field_0x3a68;
|
|
u8 field_0x3a69;
|
|
u8 field_0x3a6a;
|
|
u8 field_0x3a6b;
|
|
u8 field_0x3a6c;
|
|
u8 field_0x3a6d;
|
|
u8 field_0x3a6e;
|
|
u8 field_0x3a6f;
|
|
u8 field_0x3a70;
|
|
u8 field_0x3a71;
|
|
u8 field_0x3a72;
|
|
u8 field_0x3a73;
|
|
u8 field_0x3a74;
|
|
u8 field_0x3a75;
|
|
u8 field_0x3a76;
|
|
u8 field_0x3a77;
|
|
u8 field_0x3a78;
|
|
u8 field_0x3a79;
|
|
u8 field_0x3a7a;
|
|
u8 field_0x3a7b;
|
|
u8 field_0x3a7c;
|
|
u8 field_0x3a7d;
|
|
u8 field_0x3a7e;
|
|
u8 field_0x3a7f;
|
|
u8 field_0x3a80;
|
|
u8 field_0x3a81;
|
|
u8 field_0x3a82;
|
|
u8 field_0x3a83;
|
|
u8 field_0x3a84;
|
|
u8 field_0x3a85;
|
|
u8 field_0x3a86;
|
|
u8 field_0x3a87;
|
|
u8 field_0x3a88;
|
|
u8 field_0x3a89;
|
|
u8 field_0x3a8a;
|
|
u8 field_0x3a8b;
|
|
u8 field_0x3a8c;
|
|
u8 field_0x3a8d;
|
|
u8 field_0x3a8e;
|
|
u8 field_0x3a8f;
|
|
u8 field_0x3a90;
|
|
u8 field_0x3a91;
|
|
u8 field_0x3a92;
|
|
u8 field_0x3a93;
|
|
u8 field_0x3a94;
|
|
u8 field_0x3a95;
|
|
u8 field_0x3a96;
|
|
u8 field_0x3a97;
|
|
u8 field_0x3a98;
|
|
u8 field_0x3a99;
|
|
u8 field_0x3a9a;
|
|
u8 field_0x3a9b;
|
|
u8 field_0x3a9c;
|
|
u8 field_0x3a9d;
|
|
u8 field_0x3a9e;
|
|
u8 field_0x3a9f;
|
|
u8 field_0x3aa0;
|
|
u8 field_0x3aa1;
|
|
u8 field_0x3aa2;
|
|
u8 field_0x3aa3;
|
|
u8 field_0x3aa4;
|
|
u8 field_0x3aa5;
|
|
u8 field_0x3aa6;
|
|
u8 field_0x3aa7;
|
|
u8 field_0x3aa8;
|
|
u8 field_0x3aa9;
|
|
u8 field_0x3aaa;
|
|
u8 field_0x3aab;
|
|
u8 field_0x3aac;
|
|
u8 field_0x3aad;
|
|
u8 field_0x3aae;
|
|
u8 field_0x3aaf;
|
|
u8 field_0x3ab0;
|
|
u8 field_0x3ab1;
|
|
u8 field_0x3ab2;
|
|
u8 field_0x3ab3;
|
|
u8 field_0x3ab4;
|
|
u8 field_0x3ab5;
|
|
u8 field_0x3ab6;
|
|
u8 field_0x3ab7;
|
|
u8 field_0x3ab8;
|
|
u8 field_0x3ab9;
|
|
u8 field_0x3aba;
|
|
u8 field_0x3abb;
|
|
u8 field_0x3abc;
|
|
u8 field_0x3abd;
|
|
u8 field_0x3abe;
|
|
u8 field_0x3abf;
|
|
u8 field_0x3ac0;
|
|
u8 field_0x3ac1;
|
|
u8 field_0x3ac2;
|
|
u8 field_0x3ac3;
|
|
u8 field_0x3ac4;
|
|
u8 field_0x3ac5;
|
|
u8 field_0x3ac6;
|
|
u8 field_0x3ac7;
|
|
u8 field_0x3ac8;
|
|
u8 field_0x3ac9;
|
|
u8 field_0x3aca;
|
|
u8 field_0x3acb;
|
|
u8 field_0x3acc;
|
|
u8 field_0x3acd;
|
|
u8 field_0x3ace;
|
|
u8 field_0x3acf;
|
|
u8 field_0x3ad0;
|
|
u8 field_0x3ad1;
|
|
u8 field_0x3ad2;
|
|
u8 field_0x3ad3;
|
|
u8 field_0x3ad4;
|
|
u8 field_0x3ad5;
|
|
u8 field_0x3ad6;
|
|
u8 field_0x3ad7;
|
|
u8 field_0x3ad8;
|
|
u8 field_0x3ad9;
|
|
u8 field_0x3ada;
|
|
u8 field_0x3adb;
|
|
u8 field_0x3adc;
|
|
u8 field_0x3add;
|
|
u8 field_0x3ade;
|
|
u8 field_0x3adf;
|
|
u8 field_0x3ae0;
|
|
u8 field_0x3ae1;
|
|
u8 field_0x3ae2;
|
|
u8 field_0x3ae3;
|
|
u8 field_0x3ae4;
|
|
u8 field_0x3ae5;
|
|
u8 field_0x3ae6;
|
|
u8 field_0x3ae7;
|
|
u8 field_0x3ae8;
|
|
u8 field_0x3ae9;
|
|
u8 field_0x3aea;
|
|
u8 field_0x3aeb;
|
|
u8 field_0x3aec;
|
|
u8 field_0x3aed;
|
|
u8 field_0x3aee;
|
|
u8 field_0x3aef;
|
|
u8 field_0x3af0;
|
|
u8 field_0x3af1;
|
|
u8 field_0x3af2;
|
|
u8 field_0x3af3;
|
|
u8 field_0x3af4;
|
|
u8 field_0x3af5;
|
|
u8 field_0x3af6;
|
|
u8 field_0x3af7;
|
|
u8 field_0x3af8;
|
|
u8 field_0x3af9;
|
|
u8 field_0x3afa;
|
|
u8 field_0x3afb;
|
|
u8 field_0x3afc;
|
|
u8 field_0x3afd;
|
|
u8 field_0x3afe;
|
|
u8 field_0x3aff;
|
|
u8 field_0x3b00;
|
|
u8 field_0x3b01;
|
|
u8 field_0x3b02;
|
|
u8 field_0x3b03;
|
|
u8 field_0x3b04;
|
|
u8 field_0x3b05;
|
|
u8 field_0x3b06;
|
|
u8 field_0x3b07;
|
|
u8 field_0x3b08;
|
|
u8 field_0x3b09;
|
|
u8 field_0x3b0a;
|
|
u8 field_0x3b0b;
|
|
u8 field_0x3b0c;
|
|
u8 field_0x3b0d;
|
|
u8 field_0x3b0e;
|
|
u8 field_0x3b0f;
|
|
u8 field_0x3b10;
|
|
u8 field_0x3b11;
|
|
u8 field_0x3b12;
|
|
u8 field_0x3b13;
|
|
u8 field_0x3b14;
|
|
u8 field_0x3b15;
|
|
u8 field_0x3b16;
|
|
u8 field_0x3b17;
|
|
u8 field_0x3b18;
|
|
u8 field_0x3b19;
|
|
u8 field_0x3b1a;
|
|
u8 field_0x3b1b;
|
|
u8 field_0x3b1c;
|
|
u8 field_0x3b1d;
|
|
u8 field_0x3b1e;
|
|
u8 field_0x3b1f;
|
|
u8 field_0x3b20;
|
|
u8 field_0x3b21;
|
|
u8 field_0x3b22;
|
|
u8 field_0x3b23;
|
|
u8 field_0x3b24;
|
|
u8 field_0x3b25;
|
|
u8 field_0x3b26;
|
|
u8 field_0x3b27;
|
|
u8 field_0x3b28;
|
|
u8 field_0x3b29;
|
|
u8 field_0x3b2a;
|
|
u8 field_0x3b2b;
|
|
u8 field_0x3b2c;
|
|
u8 field_0x3b2d;
|
|
u8 field_0x3b2e;
|
|
u8 field_0x3b2f;
|
|
u8 field_0x3b30;
|
|
u8 field_0x3b31;
|
|
u8 field_0x3b32;
|
|
u8 field_0x3b33;
|
|
u8 field_0x3b34;
|
|
u8 field_0x3b35;
|
|
u8 field_0x3b36;
|
|
u8 field_0x3b37;
|
|
u8 field_0x3b38;
|
|
u8 field_0x3b39;
|
|
u8 field_0x3b3a;
|
|
u8 field_0x3b3b;
|
|
u8 field_0x3b3c;
|
|
u8 field_0x3b3d;
|
|
u8 field_0x3b3e;
|
|
u8 field_0x3b3f;
|
|
u8 field_0x3b40;
|
|
u8 field_0x3b41;
|
|
u8 field_0x3b42;
|
|
u8 field_0x3b43;
|
|
u8 field_0x3b44;
|
|
u8 field_0x3b45;
|
|
u8 field_0x3b46;
|
|
u8 field_0x3b47;
|
|
u8 field_0x3b48;
|
|
u8 field_0x3b49;
|
|
u8 field_0x3b4a;
|
|
u8 field_0x3b4b;
|
|
u8 field_0x3b4c;
|
|
u8 field_0x3b4d;
|
|
u8 field_0x3b4e;
|
|
u8 field_0x3b4f;
|
|
u8 field_0x3b50;
|
|
u8 field_0x3b51;
|
|
u8 field_0x3b52;
|
|
u8 field_0x3b53;
|
|
u8 field_0x3b54;
|
|
u8 field_0x3b55;
|
|
u8 field_0x3b56;
|
|
u8 field_0x3b57;
|
|
u8 field_0x3b58;
|
|
u8 field_0x3b59;
|
|
u8 field_0x3b5a;
|
|
u8 field_0x3b5b;
|
|
u8 field_0x3b5c;
|
|
u8 field_0x3b5d;
|
|
u8 field_0x3b5e;
|
|
u8 field_0x3b5f;
|
|
u8 field_0x3b60;
|
|
u8 field_0x3b61;
|
|
u8 field_0x3b62;
|
|
u8 field_0x3b63;
|
|
u8 field_0x3b64;
|
|
u8 field_0x3b65;
|
|
u8 field_0x3b66;
|
|
u8 field_0x3b67;
|
|
u8 field_0x3b68;
|
|
u8 field_0x3b69;
|
|
u8 field_0x3b6a;
|
|
u8 field_0x3b6b;
|
|
u8 field_0x3b6c;
|
|
u8 field_0x3b6d;
|
|
u8 field_0x3b6e;
|
|
u8 field_0x3b6f;
|
|
u8 field_0x3b70;
|
|
u8 field_0x3b71;
|
|
u8 field_0x3b72;
|
|
u8 field_0x3b73;
|
|
// 0x3B74: An array containing rankings of Pokémon species by their exp. yield, indexed by Pokémon species ID.
|
|
// This is used by the IQ skill Exp. Go-Getter so the AI knows which monsters to prioritize.
|
|
// The species with the highest exp. yield on the floor has the value 0xFF, second-highest has 0xFE, and so on.
|
|
// Species not on the floor have the value 1.
|
|
u8 exp_yield_rankings[NUM_SPECIES];
|
|
#ifndef JAPAN
|
|
// 0x3DCC: Appears to be a table that holds the statuses::statuses_unique_id value for
|
|
// the monsters. Maybe just for convenience to avoid loading it from every monster?
|
|
u32 monster_unique_id[20];
|
|
// 0x3E1C: Appears to be be an index inside or length for
|
|
// dungeon::active_monsters_unique_statuses_ids.
|
|
u32 unique_id_index;
|
|
#endif
|
|
// 0x3E20: Number of valid monster spawn entries (see spawn_entries).
|
|
int monster_spawn_entries_length;
|
|
u8 field_0x3e24;
|
|
u8 field_0x3e25;
|
|
u8 field_0x3e26;
|
|
u8 field_0x3e27;
|
|
// 0x3E28: Related in some way to the spawn entries on the floor. Does something about them
|
|
// if false, then set to true.
|
|
bool8 unk_spawn_entry_id_check;
|
|
u8 field_0x3e29;
|
|
u8 field_0x3e2a;
|
|
u8 field_0x3e2b;
|
|
// 0x3E2C: Appears to be a counter that is saved into statuses::unique_id so that every
|
|
// monster has a different id for tracking statuses such as Leech Seed and Destiny Bond, and the
|
|
// abilities Storm Drain and Lightning Rod. Initialized to 0x400 (1024)
|
|
u32 monster_unique_id_counter;
|
|
// 0x3E30: Appears to to be a counter that is used for both attacker and defender to figure
|
|
// out which pair of wrapper and wrapped are connected. This number is saved into
|
|
// statuses::wrap_pair_unique_id. Initialized to 0xA (10)
|
|
u32 monster_unique_wrap_counter;
|
|
bool8 plus_is_active[2]; // 0x3E34: A monster on the {enemy, team} side has the ability Plus
|
|
bool8 minus_is_active[2]; // 0x3E36: A monster on the {enemy, team} side has the ability Minus
|
|
// 0x3E38: If true, a monster on the floor is a decoy.
|
|
bool8 decoy_is_active;
|
|
// 0x3E39: If true, a monster with id 0x97 (Mew) cannot be spawned on the floor.
|
|
bool8 mew_cannot_spawn;
|
|
// 0x3E3A: Holds the monster ID for the Deoxys form randomly selected for this floor.
|
|
enum monster_id deoxys_floor_id;
|
|
// 0x3E3C: Gets set to true in ChangeShayminForme. Seems to also control which sprite to
|
|
// load for a Shaymin on the team?
|
|
bool8 shaymin_sky_form_loaded;
|
|
u8 field_0x3e3d;
|
|
u8 field_0x3e3e;
|
|
u8 field_0x3e3f;
|
|
struct item items[64]; // 0x3E40: Info for all the items on the ground
|
|
u16 n_items; // 0x3FC0: Number of active items in the above items array
|
|
u8 field_0x3fc2;
|
|
u8 field_0x3fc3;
|
|
struct trap traps[64]; // 0x3FC4: Info for all the traps on the floor
|
|
struct dungeon_generation_info gen_info; // 0x40C4: Stuff involved with dungeon generation
|
|
u8 field_0xccfc;
|
|
u8 field_0xccfd;
|
|
u8 field_0xccfe;
|
|
u8 field_0xccff;
|
|
u8 field_0xcd00;
|
|
u8 field_0xcd01;
|
|
u8 field_0xcd02;
|
|
u8 field_0xcd03;
|
|
u8 field_0xcd04;
|
|
u8 field_0xcd05;
|
|
u8 field_0xcd06;
|
|
u8 field_0xcd07;
|
|
u8 field_0xcd08;
|
|
u8 field_0xcd09;
|
|
u8 field_0xcd0a;
|
|
u8 field_0xcd0b;
|
|
// 0xCD0C: Appears to be an array for the team. Likely only the first 4 entries are used.
|
|
// Possibly related to dungeon_generation_info::individual_team_spawn_positions? Possibly the
|
|
// direction to spawn each team member in?
|
|
enum direction_id unk_team_direction_array[8];
|
|
// Min x of the generated Kecleon shop, if it exists. This reflects the original generation, and
|
|
// is not updated if some shop tiles are deleted by later steps in floor generation
|
|
int kecleon_shop_min_x; // 0xCD14: inclusive
|
|
int kecleon_shop_min_y; // 0xCD18: inclusive
|
|
int kecleon_shop_max_x; // 0xCD1C: inclusive
|
|
int kecleon_shop_max_y; // 0xCD20: inclusive
|
|
// Coordinates for a non full floor fixed room? Uncertain if max values are inclusive.
|
|
int fixed_room_min_x; // 0xCD24: inclusive
|
|
int fixed_room_min_y; // 0xCD28: inclusive
|
|
int fixed_room_max_x; // 0xCD2C: inclusive?
|
|
int fixed_room_max_y; // 0xCD30: inclusive?
|
|
// 0xCD34: Width of the generated fixed room?
|
|
u16 fixed_room_width;
|
|
// 0xCD36: Height of the generated fixed room?
|
|
u16 fixed_room_height;
|
|
struct weather weather; // 0xCD38
|
|
// 0xCD60: Seems to be tile data for tiles within fixed rooms
|
|
struct tile fixed_room_tiles[8][8];
|
|
u8 field_0xd260;
|
|
u8 field_0xd261;
|
|
u8 field_0xd262;
|
|
u8 field_0xd263;
|
|
u8 field_0xd264;
|
|
u8 field_0xd265;
|
|
u8 field_0xd266;
|
|
u8 field_0xd267;
|
|
u8 field_0xd268;
|
|
u8 field_0xd269;
|
|
u8 field_0xd26a;
|
|
u8 field_0xd26b;
|
|
u8 field_0xd26c;
|
|
u8 field_0xd26d;
|
|
u8 field_0xd26e;
|
|
u8 field_0xd26f;
|
|
u8 field_0xd270;
|
|
u8 field_0xd271;
|
|
u8 field_0xd272;
|
|
u8 field_0xd273;
|
|
u8 field_0xd274;
|
|
u8 field_0xd275;
|
|
u8 field_0xd276;
|
|
u8 field_0xd277;
|
|
u8 field_0xd278;
|
|
u8 field_0xd279;
|
|
u8 field_0xd27a;
|
|
u8 field_0xd27b;
|
|
u8 field_0xd27c;
|
|
u8 field_0xd27d;
|
|
u8 field_0xd27e;
|
|
u8 field_0xd27f;
|
|
u8 field_0xd280;
|
|
u8 field_0xd281;
|
|
u8 field_0xd282;
|
|
u8 field_0xd283;
|
|
u8 field_0xd284;
|
|
u8 field_0xd285;
|
|
u8 field_0xd286;
|
|
u8 field_0xd287;
|
|
u8 field_0xd288;
|
|
u8 field_0xd289;
|
|
u8 field_0xd28a;
|
|
u8 field_0xd28b;
|
|
u8 field_0xd28c;
|
|
u8 field_0xd28d;
|
|
u8 field_0xd28e;
|
|
u8 field_0xd28f;
|
|
u8 field_0xd290;
|
|
u8 field_0xd291;
|
|
u8 field_0xd292;
|
|
u8 field_0xd293;
|
|
u8 field_0xd294;
|
|
u8 field_0xd295;
|
|
u8 field_0xd296;
|
|
u8 field_0xd297;
|
|
u8 field_0xd298;
|
|
u8 field_0xd299;
|
|
u8 field_0xd29a;
|
|
u8 field_0xd29b;
|
|
u8 field_0xd29c;
|
|
u8 field_0xd29d;
|
|
u8 field_0xd29e;
|
|
u8 field_0xd29f;
|
|
u8 field_0xd2a0;
|
|
u8 field_0xd2a1;
|
|
u8 field_0xd2a2;
|
|
u8 field_0xd2a3;
|
|
u8 field_0xd2a4;
|
|
u8 field_0xd2a5;
|
|
u8 field_0xd2a6;
|
|
u8 field_0xd2a7;
|
|
u8 field_0xd2a8;
|
|
u8 field_0xd2a9;
|
|
u8 field_0xd2aa;
|
|
u8 field_0xd2ab;
|
|
u8 field_0xd2ac;
|
|
u8 field_0xd2ad;
|
|
u8 field_0xd2ae;
|
|
u8 field_0xd2af;
|
|
u8 field_0xd2b0;
|
|
u8 field_0xd2b1;
|
|
u8 field_0xd2b2;
|
|
u8 field_0xd2b3;
|
|
u8 field_0xd2b4;
|
|
u8 field_0xd2b5;
|
|
u8 field_0xd2b6;
|
|
u8 field_0xd2b7;
|
|
u8 field_0xd2b8;
|
|
u8 field_0xd2b9;
|
|
u8 field_0xd2ba;
|
|
u8 field_0xd2bb;
|
|
u8 field_0xd2bc;
|
|
u8 field_0xd2bd;
|
|
u8 field_0xd2be;
|
|
u8 field_0xd2bf;
|
|
u8 field_0xd2c0;
|
|
u8 field_0xd2c1;
|
|
u8 field_0xd2c2;
|
|
u8 field_0xd2c3;
|
|
u8 field_0xd2c4;
|
|
u8 field_0xd2c5;
|
|
u8 field_0xd2c6;
|
|
u8 field_0xd2c7;
|
|
u8 field_0xd2c8;
|
|
u8 field_0xd2c9;
|
|
u8 field_0xd2ca;
|
|
u8 field_0xd2cb;
|
|
u8 field_0xd2cc;
|
|
u8 field_0xd2cd;
|
|
u8 field_0xd2ce;
|
|
u8 field_0xd2cf;
|
|
u8 field_0xd2d0;
|
|
u8 field_0xd2d1;
|
|
u8 field_0xd2d2;
|
|
u8 field_0xd2d3;
|
|
u8 field_0xd2d4;
|
|
u8 field_0xd2d5;
|
|
u8 field_0xd2d6;
|
|
u8 field_0xd2d7;
|
|
u8 field_0xd2d8;
|
|
u8 field_0xd2d9;
|
|
u8 field_0xd2da;
|
|
u8 field_0xd2db;
|
|
u8 field_0xd2dc;
|
|
u8 field_0xd2dd;
|
|
u8 field_0xd2de;
|
|
u8 field_0xd2df;
|
|
// 0xD2E0: Appears to keep track of what tiles are the fixed room tiles when generating
|
|
// a fixed room that isn't the whole floor.
|
|
u8 fixed_room_room_index;
|
|
u8 field_0xd2e1;
|
|
u8 field_0xd2e2;
|
|
u8 field_0xd2e3;
|
|
// 0xD2E4: This is an array of pointers that point to the actual tile structs within the
|
|
// dungeon struct
|
|
struct tile* tile_ptrs[32][56];
|
|
u8 n_rooms; // 0xEEE4: Number of rooms on the current floor
|
|
u8 field_0xeee5; // Uninitialized, likely padding
|
|
u8 field_0xeee6; // Uninitialized, likely padding
|
|
u8 field_0xeee7; // Uninitialized, likely padding
|
|
// 0xEEE8: Array of structs that contain data about the rooms on the current floor
|
|
struct room_data room_data[32];
|
|
// 0xF268: Array that counts the amount of elements on each row of natural_junction_list
|
|
s16 natural_junction_list_counts[32];
|
|
// 0xF2A8: Matrix that stores the positions of up to 32 natural junctions
|
|
// for each room on the floor. Each row represents a room.
|
|
struct position natural_junction_list[32][32];
|
|
// 0x102A8: Buffer to store some file after being decompressed.
|
|
// The file that gets loaded depends on the tileset ID of the dungeon.
|
|
u8 unknown_file_buffer_0x102A8[7200];
|
|
// 0x11EC8: Matrix related to tile graphics.
|
|
// Skipping the code that initializes it at the start of the dungeon causes all tiles
|
|
// to be shown as black squares.
|
|
u16 unknown_tile_matrix[9][34];
|
|
// 0x1212C: Unknown matrix, probably related to unknown_tile_matrix
|
|
// since they get initialized together.
|
|
u16 unknown_matrix_0x1212C[9][3];
|
|
// 0x12162: Buffer to store some AT4PX file after being decompressed
|
|
// This is somehow related to tile::texture_id and tile variations?
|
|
|
|
// TODO Something is omitted from the dungeon struct in JP, but it is not known what is missing.
|
|
// For the time being, take some bytes out of this array to allow JP usage of this struct to match.
|
|
u8 unknown_file_buffer_0x12162[2352];
|
|
// 0x12A92: Unknown array, probably related to unknown_tile_matrix
|
|
// since they get initialized together.
|
|
u16 unknown_array_0x12A92[9];
|
|
// 0x12AA4: Pointer to data about the fixed room such as width and height. Gets set after
|
|
// loading the data for a fixed room when generating a floor. Gets set back to null when
|
|
// done generating a floor.
|
|
u8* unk_fixed_room_pointer;
|
|
// 0x12AA8: This flag is set by the move 0x191 ("Trapper") which is the effect
|
|
// of the Trapper Orb. If true, the game will try to spawn a trap.
|
|
bool8 trapper_orb_flag;
|
|
u8 field_0x12aa9; // Likely padding
|
|
// 0x12AAA: Location to spawn the trap by trapper_orb_flag.
|
|
struct position trapper_orb_trap_pos;
|
|
// 0x12AAE: Trap ID to spawn the trap by trapper_orb_flag. Notably, the game
|
|
// will always set this to 0x19, but could work with other values.
|
|
enum trap_id traper_orb_trap_id;
|
|
// 0x12AAF: Alignment to spawn the trap by trapper_orb_flag.
|
|
u8 trapper_orb_trap_team;
|
|
u8 field_0x12ab0;
|
|
u8 field_0x12ab1;
|
|
u8 field_0x12ab2;
|
|
u8 field_0x12ab3;
|
|
u8 field_0x12ab4;
|
|
u8 field_0x12ab5;
|
|
u8 field_0x12ab6;
|
|
u8 field_0x12ab7;
|
|
u8 field_0x12ab8;
|
|
u8 field_0x12ab9;
|
|
u8 field_0x12aba;
|
|
u8 field_0x12abb;
|
|
u8 field_0x12abc;
|
|
u8 field_0x12abd;
|
|
u8 field_0x12abe;
|
|
u8 field_0x12abf;
|
|
u8 field_0x12ac0;
|
|
u8 field_0x12ac1;
|
|
u8 field_0x12ac2;
|
|
u8 field_0x12ac3;
|
|
u8 field_0x12ac4;
|
|
u8 field_0x12ac5;
|
|
u8 field_0x12ac6;
|
|
u8 field_0x12ac7;
|
|
u8 field_0x12ac8;
|
|
u8 field_0x12ac9;
|
|
u8 field_0x12aca;
|
|
u8 field_0x12acb;
|
|
u8 field_0x12acc;
|
|
u8 field_0x12acd;
|
|
u8 field_0x12ace;
|
|
u8 field_0x12acf;
|
|
u8 field_0x12ad0;
|
|
u8 field_0x12ad1;
|
|
u8 field_0x12ad2;
|
|
u8 field_0x12ad3;
|
|
u8 field_0x12ad4;
|
|
u8 field_0x12ad5;
|
|
u8 field_0x12ad6;
|
|
u8 field_0x12ad7;
|
|
u8 field_0x12ad8;
|
|
u8 field_0x12ad9;
|
|
u8 field_0x12ada;
|
|
u8 field_0x12adb;
|
|
u8 field_0x12adc;
|
|
u8 field_0x12add;
|
|
u8 field_0x12ade;
|
|
u8 field_0x12adf;
|
|
u8 field_0x12ae0;
|
|
u8 field_0x12ae1;
|
|
u8 field_0x12ae2;
|
|
u8 field_0x12ae3;
|
|
u8 field_0x12ae4;
|
|
u8 field_0x12ae5;
|
|
u8 field_0x12ae6;
|
|
u8 field_0x12ae7;
|
|
u8 field_0x12ae8;
|
|
u8 field_0x12ae9;
|
|
u8 field_0x12aea;
|
|
u8 field_0x12aeb;
|
|
u8 field_0x12aec;
|
|
u8 field_0x12aed;
|
|
u8 field_0x12aee;
|
|
u8 field_0x12aef;
|
|
u8 field_0x12af0;
|
|
u8 field_0x12af1;
|
|
u8 field_0x12af2;
|
|
u8 field_0x12af3;
|
|
u8 field_0x12af4;
|
|
u8 field_0x12af5;
|
|
u8 field_0x12af6;
|
|
u8 field_0x12af7;
|
|
// 0x12AF8: The amount of items "sniffed" by the Acute Sniffer iq skill when a floor starts.
|
|
u16 acute_sniffer_item_count;
|
|
// 0x12AFA: Number of normal item spawns. Does not include monster held items and additional
|
|
// items in walls or Monster Houses
|
|
u16 n_normal_item_spawns;
|
|
bool8 gravity; // 0x12AFC: Gravity is in effect
|
|
u8 field_0x12afd;
|
|
// 0x12AFE: Victories on one floor counter.
|
|
s16 victory_counter;
|
|
u8 field_0x12b00;
|
|
u8 field_0x12b01;
|
|
u8 field_0x12b02;
|
|
u8 field_0x12b03;
|
|
u8 field_0x12b04;
|
|
u8 field_0x12b05;
|
|
u8 field_0x12b06;
|
|
u8 field_0x12b07;
|
|
u8 field_0x12b08;
|
|
u8 field_0x12b09;
|
|
u8 field_0x12b0a;
|
|
u8 field_0x12b0b;
|
|
u8 field_0x12b0c;
|
|
u8 field_0x12b0d;
|
|
u8 field_0x12b0e;
|
|
u8 field_0x12b0f;
|
|
u8 field_0x12b10;
|
|
u8 field_0x12b11;
|
|
u8 field_0x12b12;
|
|
u8 field_0x12b13;
|
|
u8 field_0x12b14;
|
|
u8 field_0x12b15;
|
|
u8 field_0x12b16;
|
|
u8 field_0x12b17;
|
|
u8 field_0x12b18;
|
|
u8 field_0x12b19;
|
|
u8 field_0x12b1a;
|
|
u8 field_0x12b1b;
|
|
u8 field_0x12b1c;
|
|
u8 field_0x12b1d;
|
|
u8 field_0x12b1e;
|
|
u8 field_0x12b1f;
|
|
// 0x12B20: Probably counts how many sprites or monster entries the fixed room wants
|
|
// loaded.
|
|
u32 fixed_room_monster_sprite_counter;
|
|
// 0x12B24: Whether or not the kecleon shop spawn chance be boosted for the floor
|
|
bool8 boost_kecleon_shop_spawn_chance;
|
|
// 0x12B25: Whether or not the hidden stairs spawn chance be boosted for the floor
|
|
// (by 20%; see HIDDEN_STAIRS_SPAWN_CHANCE_MULTIPLIER)
|
|
bool8 boost_hidden_stairs_spawn_chance;
|
|
u8 field_0x12b26;
|
|
u8 field_0x12b27;
|
|
|
|
//struct entity_table entity_table; // 0x12B28: Table of all entities in the dungeon
|
|
// The pointers point into the entities array
|
|
// 0x12B28 / 0x0: A list of all monster pointers, whether they're used or not
|
|
union {
|
|
struct monster_slots monster_slots;
|
|
struct entity* monster_slot_ptrs[DUNGEON_MAX_POKEMON];
|
|
};
|
|
// 0x12B78 / 0x50: Null-terminated array of pointers to actually active monsters
|
|
struct entity* active_monster_ptrs[DUNGEON_MAX_POKEMON];
|
|
struct entity* item_ptrs[64]; // 0x12BC8 / 0xA0
|
|
struct entity* trap_ptrs[64]; // 0x12CC8 / 0x1A0
|
|
struct entity* hidden_stairs_ptr; // 0x12DC8 / 0x2A0
|
|
struct entity entities[149]; // 0x12DCC / 0x2A4 : All the entities in a dungeon
|
|
|
|
// 0x198E4: An ally monster related to storm drain/lightning rod and maybe other checks?
|
|
struct entity* unk_ally_monster1;
|
|
u32 unk_ally_monster_unique_id1; // 0x198E8: statuses::unique_id from that monster?
|
|
// 0x198EC: An ally monster related to storm drain/lightning rod and maybe other checks?
|
|
struct entity* unk_ally_monster2;
|
|
u32 unk_ally_monster_unique_id2; // 0x198F0: statuses::unique_id from that monster?
|
|
// 0x198F4: An enemy monster related to storm drain/lightning rod and maybe other checks?
|
|
struct entity* unk_enemy_monster1;
|
|
u32 unk_enemy_monster_unique_id1; // 0x198F8: statuses::unique_id from that monster?
|
|
// 0x198FC: An enemy monster related to storm drain/lightning rod and maybe other checks?
|
|
struct entity* unk_enemy_monster2;
|
|
u32 unk_enemy_monster_unique_id2; // 0x19900: statuses::unique_id from that monster?
|
|
// 0x19904: Pointer to the monster that will snatch the effect of a move.
|
|
struct entity* snatch_monster;
|
|
// 0x19908: Pointer to the entity to be spawned by the effect of Illuminate
|
|
struct entity* illuminate_spawn_entity;
|
|
// 0x1990C: Stores statuses::unique_id for the monster pointed to by dungeon::snatch_monster.
|
|
u32 snatch_status_unique_id;
|
|
// 0x19910: Spawn genid of the monster to be spawned by the effect of Illuminate
|
|
u16 illuminate_spawn_genid;
|
|
u8 field_0x19912;
|
|
u8 field_0x19913;
|
|
// 0x19914: List that matches monster IDs with their sprite index on this floor
|
|
enum monster_id sprite_indexes[1155];
|
|
u8 field_0x1a21a;
|
|
u8 field_0x1a21b;
|
|
// 0x1A21C: Data about the map, the camera and the touchscreen numbers
|
|
struct display_data display_data;
|
|
struct minimap_display_data minimap_display_data; // 0x1A264: Data used to display the minimap
|
|
// 0x286B0: Initialized to 0xFF, then set to a copy of dungeon::group_id
|
|
enum dungeon_group_id group_id_copy;
|
|
// 0x286B1: Initialized to 0xFF, then set to a copy of dungeon::0x74B
|
|
u8 field_0x286b1;
|
|
struct floor_properties floor_properties; // 0x286B2: Properties about the current floor
|
|
// 0x286D2: Maybe a 0x10 long array?
|
|
u16 field_0x286d2;
|
|
u16 field_0x286d4;
|
|
u16 field_0x286d6;
|
|
u16 field_0x286d8;
|
|
u16 field_0x286da;
|
|
u16 field_0x286dc;
|
|
u16 field_0x286de;
|
|
u16 field_0x286e0;
|
|
u16 field_0x286e2;
|
|
u16 field_0x286e4;
|
|
u16 field_0x286e6;
|
|
u16 field_0x286e8;
|
|
u16 field_0x286ea;
|
|
u16 field_0x286ec;
|
|
u16 field_0x286ee;
|
|
u16 field_0x286f0;
|
|
// 0x286F2: Spawn weights for regular items. It's the unrolled form of this floor's regular
|
|
// item spawn list.
|
|
// It has enough space to hold 1416 entries (1400 items + 16 categories), but only the
|
|
// first 0x16C slots are used since spawn lists can't encode item IDs larger than that.
|
|
u16 regular_item_weights[1416];
|
|
// 0x29202: Spawn weights for Kecleon shop items. Same format as regular_item_weights.
|
|
u16 kecleon_item_weights[1416];
|
|
// 0x29D12: Spawn weights for monster house items. Same format as regular_item_weights.
|
|
u16 monster_house_item_weights[1416];
|
|
// 0x2A822: Spawn weights for buried items. Same format as regular_item_weights.
|
|
u16 buried_item_weights[1416];
|
|
// 0x2B332: Spawn weights for bazaar grab bag items. Same format as regular_item_weights.
|
|
u16 grab_bag_item_weights[1416];
|
|
// 0x2BE42: Spawn weights for secret room items in treasure boxes.
|
|
// Same format as regular_item_weights? For some reason the weights for the secret rooms
|
|
// are of a different length than the other item weight lists before it. The trap weights
|
|
// appear to overlap what would be entries 1400-1415.
|
|
u16 secret_room_item_weights[1400];
|
|
// 0x2C932: Spawn weights for traps.
|
|
u16 trap_weights[25];
|
|
// 0x2C964: List of spawn entries on this floor
|
|
// This is used during initialization, enemies are spawned using the copy at 0x3974
|
|
struct monster_spawn_entry spawn_entries_master[16];
|
|
// 0x2C9E4: The total number of spawn entries loaded or to be loaded?
|
|
u16 number_sprites_loaded;
|
|
// 0x2C9E6: Highest level among all the enemies that spawn on this floor
|
|
u16 highest_enemy_level;
|
|
// 0x2C9E8: ID of an item guaranteed to spawn on the floor, if applicable
|
|
// (e.g., certain mission types)
|
|
enum item_id guaranteed_item_id;
|
|
// 0x2C9EA: List of the indices in the complete monster spawn table for this floor that were
|
|
// chosen to spawn on it. It gets rerandomized at the start of each new floor.
|
|
u16 spawn_table_entries_chosen[16];
|
|
u8 field_0x2ca0a;
|
|
u8 field_0x2ca0b;
|
|
// 0x2CA0C: Holds the name for the entity that caused the faint. The exact size is a guess.
|
|
// Likely larger because of entities like the Explosion Trap.
|
|
char fainted_monster_cause_entity_name[10];
|
|
u8 field_0x2ca16;
|
|
u8 field_0x2ca17;
|
|
u8 field_0x2ca18;
|
|
u8 field_0x2ca19;
|
|
u8 field_0x2ca1a;
|
|
u8 field_0x2ca1b;
|
|
u8 field_0x2ca1c;
|
|
u8 field_0x2ca1d;
|
|
u8 field_0x2ca1e;
|
|
u8 field_0x2ca1f;
|
|
u8 field_0x2ca20;
|
|
u8 field_0x2ca21;
|
|
u8 field_0x2ca22;
|
|
u8 field_0x2ca23;
|
|
u8 field_0x2ca24;
|
|
u8 field_0x2ca25;
|
|
u8 field_0x2ca26;
|
|
u8 field_0x2ca27;
|
|
u8 field_0x2ca28;
|
|
u8 field_0x2ca29;
|
|
// 0x2CA2A: Holds the name for the monster that fainted. The exact size is a guess.
|
|
char fainted_monster_name[10];
|
|
u8 field_0x2ca34;
|
|
u8 field_0x2ca35;
|
|
u8 field_0x2ca36;
|
|
u8 field_0x2ca37;
|
|
u8 field_0x2ca38;
|
|
u8 field_0x2ca39;
|
|
u8 field_0x2ca3a;
|
|
u8 field_0x2ca3b;
|
|
u8 field_0x2ca3c;
|
|
u8 field_0x2ca3d;
|
|
u8 field_0x2ca3e;
|
|
u8 field_0x2ca3f;
|
|
u8 field_0x2ca40;
|
|
u8 field_0x2ca41;
|
|
u8 field_0x2ca42;
|
|
u8 field_0x2ca43;
|
|
u8 field_0x2ca44;
|
|
u8 field_0x2ca45;
|
|
u8 field_0x2ca46;
|
|
u8 field_0x2ca47;
|
|
// 0x2CA48: A monster name that is copied from dungeon::unk_fainted_monster_name. Maybe for
|
|
// situations where the player loses because the partner, escort, or accompanying monster
|
|
// fainted? Another poossible use is when leaving a dungeon after a mission? Exact size is
|
|
// a guess.
|
|
char loss_related_monster_name[10];
|
|
u8 field_0x2ca52;
|
|
u8 field_0x2ca53;
|
|
u8 field_0x2ca54;
|
|
u8 field_0x2ca55;
|
|
u8 field_0x2ca56;
|
|
u8 field_0x2ca57;
|
|
u8 field_0x2ca58;
|
|
u8 field_0x2ca59;
|
|
u8 field_0x2ca5a;
|
|
u8 field_0x2ca5b;
|
|
u8 field_0x2ca5c;
|
|
u8 field_0x2ca5d;
|
|
u8 field_0x2ca5e;
|
|
u8 field_0x2ca5f;
|
|
u8 field_0x2ca60;
|
|
u8 field_0x2ca61;
|
|
u8 field_0x2ca62;
|
|
u8 field_0x2ca63;
|
|
u8 field_0x2ca64;
|
|
u8 field_0x2ca65;
|
|
// 0x02CA66: The cause of the mission over. Identical to the damage source in HandleFaint,
|
|
// but can be set to some non-damage related reasons manually by the game. IE: "cleared the
|
|
// dungeon." and "succeeded in the rescue mission."
|
|
union damage_source fainted_monster_dungeon_end_reason;
|
|
enum dungeon_id fainted_id; // 0x2CA68: Copied from dungeon::id, upon fainting.
|
|
u8 fainted_floor; // 0x2CA69: Copied from dungeon::floor, upon fainting.
|
|
// 0x2CA6A: Copy of the fainted monster's held item.
|
|
struct item fainted_monster_held_item;
|
|
int fainted_monster_exp; // 0x2CA70: Copy of fainted monster's experience.
|
|
// 0x2CA74: Copy of the fainted monster's ACTUAL max hp (monster::max_hp_stat +
|
|
// monster::max_hp_boost)
|
|
s16 fainted_monster_max_hp;
|
|
// 0x2CA76: Copy of the fainted monster's offensive stats.
|
|
u8 fainted_monster_offensive_stats[2];
|
|
// 0x2CA78: Copy of the fainted monster's defenive stats.
|
|
u8 fainted_monster_defensive_stats[2];
|
|
u8 fainted_monster_level; // 0x2CA7A: Copy of fainted monster's level.
|
|
u8 field_0x2ca7b;
|
|
// 0x2CA7C: This is a monster summary related to the menu when leaving a dungeon. When
|
|
// succesfully exiting a dungeon it is the leader. May be other allies when they faint?
|
|
struct monster_summary getout_monster_summary;
|
|
// 0x2CAF4: One more than the maximum number of floors in the current dungeon
|
|
u8 n_floors_plus_one;
|
|
u8 field_0x2caf5;
|
|
u8 field_0x2caf6;
|
|
u8 field_0x2caf7;
|
|
// 0x2CAF8: Related to playing dungeon music? Initialized to 0x4.
|
|
u32 field_0x2caf8;
|
|
// Related to playing dungeon music?
|
|
u8 field_0x2cafc;
|
|
u8 field_0x2cafd;
|
|
u8 field_0x2cafe;
|
|
u8 field_0x2caff;
|
|
// Related to playing dungeon music?
|
|
u16 field_0x2cb00;
|
|
// Related to playing dungeon music?
|
|
u16 field_0x2cb02;
|
|
// 0x2CB04: Related to playing dungeon music?
|
|
u16 field_0x2cb04;
|
|
// 0x2CB06: Current Dunegon Music ID
|
|
enum music_id dungeon_music_playing_id;
|
|
u8 field_0x2cb08;
|
|
u8 field_0x2cb09;
|
|
u8 field_0x2cb0a;
|
|
u8 field_0x2cb0b;
|
|
u8 field_0x2cb0c;
|
|
u8 field_0x2cb0d;
|
|
u8 field_0x2cb0e;
|
|
u8 field_0x2cb0f;
|
|
// 0x2CB10: Somehow related to display_data::hallucinating and seems to maybe control
|
|
// the sleeping animations when the camera is pointed away from a hallucinating monster?
|
|
// Initialized to 0x1.
|
|
bool8 unk_camera_tracker;
|
|
u8 field_0x2cb11;
|
|
u8 field_0x2cb12;
|
|
u8 field_0x2cb13;
|
|
};
|
|
|
|
// Entry for a single dungeon in the dungeon restriction list
|
|
struct dungeon_restriction {
|
|
// 0x0: flags: 2-byte bitfield
|
|
u32 flags;
|
|
// bool8 f_dungeon_goes_up : 1; // Dungeon goes up (stairs ascend, floors are labeled 1F, 2F, ...)
|
|
// bool8 f_enemies_evolve : 1; // Enemies evolve after they defeat another monster
|
|
// bool8 f_enemies_give_exp : 1; // Enemies give experience
|
|
// bool8 f_recruitment_allowed : 1; // Recruitment is allowed
|
|
// bool8 f_reset_to_level_1 : 1; // Team members are reset to level 1 for the dungeon
|
|
// bool8 f_money_allowed : 1; // Money is allowed to be brought into the dungeon
|
|
// bool8 f_leader_change_enabled : 1; // The team leader can be changed within the dungeon
|
|
// bool8 f_enter_without_saving : 1; // If false, the game will be saved upon entering
|
|
// bool8 f_disable_iq_skills : 1; // IQ skills won't work in the dungeon
|
|
// bool8 f_no_trap_uncovering : 1; // Traps cannot be revealed by attacking or throwing items
|
|
// bool8 f_treasure_box_drops : 1; // Enemies can drop Treasure Boxes
|
|
u8 max_rescue_attempts; // 0x4: 0xFF means no rescues allowed
|
|
u8 max_items_allowed; // 0x5: Maximum number of items that can be brought into the dungeon
|
|
u8 max_party_size; // 0x6: Maximum number of team members that can enter the dungeon
|
|
s16 turn_limit_per_floor; // 0x8: Number of turns per floor before the wind blows you out
|
|
// 0xA: Chance of setting the monster::random_movement field to 1 when spawning an enemy
|
|
s16 random_movement_chance;
|
|
};
|
|
|
|
// A common structure for pairs of dungeon/floor values
|
|
struct dungeon_floor_pair {
|
|
u8 dungeon_id;
|
|
u8 floor_id;
|
|
};
|
|
|
|
#endif // PMDSKY_DUNGEON_H
|