tmc/include/area.h

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