mirror of https://github.com/zeldaret/tmc.git
266 lines
5.4 KiB
C
266 lines
5.4 KiB
C
#ifndef AREA_H
|
|
#define AREA_H
|
|
|
|
#include "global.h"
|
|
#include "map.h"
|
|
#include "transitions.h"
|
|
|
|
#define MAX_ROOMS 64
|
|
|
|
typedef enum {
|
|
PT_TREESTUMP,
|
|
PT_ROCK,
|
|
PT_2,
|
|
PT_DUNGEON,
|
|
PT_JAR,
|
|
PT_5,
|
|
PT_TOD,
|
|
} PortalTypes;
|
|
|
|
typedef struct {
|
|
u16 pixel_width;
|
|
u16 pixel_height;
|
|
u16 map_x;
|
|
u16 map_y;
|
|
MapDataDefinition* tileSet;
|
|
MapDataDefinition* map;
|
|
MapDataDefinition* tiles;
|
|
void* bg_anim;
|
|
const Transition* exits;
|
|
void** properties;
|
|
} RoomResInfo;
|
|
static_assert(sizeof(RoomResInfo) == 0x20);
|
|
|
|
typedef struct {
|
|
u8 textBaseIndex;
|
|
u8 textIndexOffset;
|
|
u8 currentHint;
|
|
u8 unk2b;
|
|
u16 ezloHintTexts[8];
|
|
} struct_area_28;
|
|
|
|
typedef struct {
|
|
u8 areaMetadata;
|
|
u8 locationIndex;
|
|
u8 unk;
|
|
u8 dungeon_idx; /* same index as global flags for dungeons */
|
|
u16 localFlagOffset;
|
|
u8 flag_bank;
|
|
u8 filler[3];
|
|
u16 lightLevel;
|
|
u8 lightType;
|
|
u8 unk_0c_0 : 1;
|
|
u8 unk_0c_1 : 3;
|
|
u8 unk_0c_4 : 4;
|
|
u8 filler3[2];
|
|
u16 field_0x10;
|
|
u16 portal_x;
|
|
u16 portal_y;
|
|
u8 portal_exit_dir;
|
|
u8 portal_type;
|
|
u8 portal_mode;
|
|
// u8 filler3[7];
|
|
bool8 portal_in_use;
|
|
u8 portal_timer;
|
|
u8 filler2[13];
|
|
struct_area_28 unk28;
|
|
RoomResInfo roomResInfos[MAX_ROOMS];
|
|
RoomResInfo currentRoomInfo;
|
|
RoomResInfo* pCurrentRoomInfo;
|
|
u32 bgm;
|
|
u32 queued_bgm;
|
|
u8 filler6[0x20];
|
|
void* transitionManager;
|
|
void (*onEnter)();
|
|
void (*onExit)();
|
|
} Area;
|
|
static_assert(sizeof(Area) == 0x894);
|
|
extern Area gArea;
|
|
|
|
typedef struct {
|
|
u16 map_x;
|
|
u16 map_y;
|
|
u16 pixel_width;
|
|
u16 pixel_height;
|
|
u16 tileSet_id;
|
|
} FORCE_WORD_ALIGNED RoomHeader;
|
|
static_assert(sizeof(RoomHeader) == 0xa);
|
|
extern RoomHeader* gAreaRoomHeaders[];
|
|
|
|
typedef struct {
|
|
u8 flags;
|
|
u8 location;
|
|
u8 flag_bank;
|
|
u8 queueBgm;
|
|
} AreaHeader;
|
|
extern const AreaHeader gAreaMetadata[];
|
|
|
|
typedef enum {
|
|
AR_IS_OVERWORLD = 0x1,
|
|
AR_HAS_KEYS = 0x2,
|
|
AR_IS_DUNGEON = 0x4, /**< Causes the area to have a red name. */
|
|
AR_HAS_MAP = 0x8,
|
|
AR_HAS_ENEMIES = 0x10,
|
|
AR_IS_MOLE_CAVE = 0x20,
|
|
AR_HAS_NO_ENEMIES = 0x40,
|
|
AR_ALLOWS_WARP = 0x80, /**< Not used in EU. Allows to warp in areas that do not have AR_OVERWORLD set. */
|
|
} AreaFlags;
|
|
|
|
typedef enum {
|
|
AREA_MINISH_WOODS,
|
|
AREA_MINISH_VILLAGE,
|
|
AREA_HYRULE_TOWN,
|
|
AREA_HYRULE_FIELD,
|
|
AREA_CASTOR_WILDS,
|
|
AREA_RUINS,
|
|
AREA_MT_CRENEL,
|
|
AREA_CASTLE_GARDEN,
|
|
AREA_CLOUD_TOPS,
|
|
AREA_ROYAL_VALLEY,
|
|
AREA_VEIL_FALLS,
|
|
AREA_LAKE_HYLIA,
|
|
AREA_LAKE_WOODS_CAVE,
|
|
AREA_BEANSTALKS,
|
|
AREA_EMPTY,
|
|
AREA_HYRULE_DIG_CAVES,
|
|
AREA_MELARIS_MINE,
|
|
AREA_MINISH_PATHS,
|
|
AREA_CRENEL_MINISH_PATHS,
|
|
AREA_DIG_CAVES,
|
|
AREA_CRENEL_DIG_CAVE,
|
|
AREA_FESTIVAL_TOWN,
|
|
AREA_VEIL_FALLS_DIG_CAVE,
|
|
AREA_CASTOR_WILDS_DIG_CAVE,
|
|
AREA_OUTER_FORTRESS_OF_WINDS,
|
|
AREA_HYLIA_DIG_CAVES,
|
|
AREA_VEIL_FALLS_TOP,
|
|
AREA_NULL_1B,
|
|
AREA_NULL_1C,
|
|
AREA_NULL_1D,
|
|
AREA_NULL_1E,
|
|
AREA_NULL_1F,
|
|
AREA_MINISH_HOUSE_INTERIORS,
|
|
AREA_HOUSE_INTERIORS_1,
|
|
AREA_HOUSE_INTERIORS_2,
|
|
AREA_HOUSE_INTERIORS_3,
|
|
AREA_TREE_INTERIORS,
|
|
AREA_DOJOS,
|
|
AREA_CRENEL_CAVES,
|
|
AREA_MINISH_CRACKS,
|
|
AREA_HOUSE_INTERIORS_4,
|
|
AREA_GREAT_FAIRIES,
|
|
AREA_CASTOR_CAVES,
|
|
AREA_CASTOR_DARKNUT,
|
|
AREA_ARMOS_INTERIORS,
|
|
AREA_TOWN_MINISH_HOLES,
|
|
AREA_MINISH_RAFTERS,
|
|
AREA_GORON_CAVE,
|
|
AREA_WIND_TRIBE_TOWER,
|
|
AREA_WIND_TRIBE_TOWER_ROOF,
|
|
AREA_CAVES,
|
|
AREA_VEIL_FALLS_CAVES,
|
|
AREA_ROYAL_VALLEY_GRAVES,
|
|
AREA_MINISH_CAVES,
|
|
AREA_CASTLE_GARDEN_MINISH_HOLES,
|
|
AREA_37,
|
|
AREA_EZLO_CUTSCENE,
|
|
AREA_NULL_39,
|
|
AREA_NULL_3A,
|
|
AREA_NULL_3B,
|
|
AREA_NULL_3C,
|
|
AREA_NULL_3D,
|
|
AREA_NULL_3E,
|
|
AREA_NULL_3F,
|
|
AREA_40,
|
|
AREA_HYRULE_TOWN_UNDERGROUND,
|
|
AREA_GARDEN_FOUNTAINS,
|
|
AREA_HYRULE_CASTLE_CELLAR,
|
|
AREA_SIMONS_SIMULATION,
|
|
AREA_45,
|
|
AREA_NULL_46,
|
|
AREA_47,
|
|
AREA_DEEPWOOD_SHRINE,
|
|
AREA_DEEPWOOD_SHRINE_BOSS,
|
|
AREA_DEEPWOOD_SHRINE_ENTRY,
|
|
AREA_NULL_4B,
|
|
AREA_NULL_4C,
|
|
AREA_4D,
|
|
AREA_NULL_4E,
|
|
AREA_NULL_4F,
|
|
AREA_CAVE_OF_FLAMES,
|
|
AREA_CAVE_OF_FLAMES_BOSS,
|
|
AREA_NULL_52,
|
|
AREA_NULL_53,
|
|
AREA_NULL_54,
|
|
AREA_NULL_55,
|
|
AREA_NULL_56,
|
|
AREA_57,
|
|
AREA_FORTRESS_OF_WINDS,
|
|
AREA_FORTRESS_OF_WINDS_TOP,
|
|
AREA_INNER_MAZAAL,
|
|
AREA_NULL_5B,
|
|
AREA_NULL_5C,
|
|
AREA_NULL_5D,
|
|
AREA_NULL_5E,
|
|
AREA_5F,
|
|
AREA_TEMPLE_OF_DROPLETS,
|
|
AREA_NULL_61,
|
|
AREA_HYRULE_TOWN_MINISH_CAVES,
|
|
AREA_NULL_63,
|
|
AREA_NULL_64,
|
|
AREA_NULL_65,
|
|
AREA_NULL_66,
|
|
AREA_67,
|
|
AREA_ROYAL_CRYPT,
|
|
AREA_NULL_69,
|
|
AREA_NULL_6A,
|
|
AREA_NULL_6B,
|
|
AREA_NULL_6C,
|
|
AREA_NULL_6D,
|
|
AREA_NULL_6E,
|
|
AREA_6F,
|
|
AREA_PALACE_OF_WINDS,
|
|
AREA_PALACE_OF_WINDS_BOSS,
|
|
AREA_NULL_72,
|
|
AREA_NULL_73,
|
|
AREA_NULL_74,
|
|
AREA_NULL_75,
|
|
AREA_NULL_76,
|
|
AREA_77,
|
|
AREA_SANCTUARY,
|
|
AREA_NULL_79,
|
|
AREA_NULL_7A,
|
|
AREA_NULL_7B,
|
|
AREA_NULL_7C,
|
|
AREA_NULL_7D,
|
|
AREA_NULL_7E,
|
|
AREA_7F,
|
|
AREA_HYRULE_CASTLE,
|
|
AREA_SANCTUARY_ENTRANCE,
|
|
AREA_NULL_82,
|
|
AREA_NULL_83,
|
|
AREA_NULL_84,
|
|
AREA_NULL_85,
|
|
AREA_NULL_86,
|
|
AREA_87,
|
|
AREA_DARK_HYRULE_CASTLE,
|
|
AREA_DARK_HYRULE_CASTLE_OUTSIDE,
|
|
AREA_VAATIS_ARMS,
|
|
AREA_VAATI_3,
|
|
AREA_VAATI_2,
|
|
AREA_DARK_HYRULE_CASTLE_BRIDGE,
|
|
AREA_NULL_8E,
|
|
AREA_8F,
|
|
AREA_90,
|
|
AREA_91,
|
|
AREA_92,
|
|
AREA_93,
|
|
AREA_94,
|
|
AREA_95,
|
|
AREA_96,
|
|
AREA_97,
|
|
AREA_98,
|
|
} AreaID;
|
|
|
|
#endif // AREA_H
|