mirror of https://github.com/zeldaret/tmc.git
299 lines
5.7 KiB
C
299 lines
5.7 KiB
C
#ifndef GAME_H
|
|
#define GAME_H
|
|
|
|
#include "global.h"
|
|
#include "area.h"
|
|
|
|
/**
|
|
* Change the light level of the room.
|
|
*
|
|
* @param level The new light level.
|
|
*/
|
|
void ChangeLightLevel(s32 level);
|
|
|
|
/**
|
|
* Set the dislayed popup state
|
|
*
|
|
* @param type The popup type.
|
|
* @param choice_idx The choice index.
|
|
*/
|
|
void SetPopupState(u32 type, u32 choice_idx);
|
|
|
|
/**
|
|
* Check if an area is overworld (not dungeon or inside).
|
|
*
|
|
* @param area The area to check.
|
|
* @return True if the area is overworld.
|
|
*/
|
|
bool32 CheckAreaOverworld(u32 area);
|
|
|
|
/**
|
|
* Check if the current area is overworld.
|
|
*
|
|
* @return True if the current area is overworld.
|
|
*/
|
|
bool32 AreaIsOverworld(void);
|
|
|
|
/**
|
|
* Check if the current area is a dungeon.
|
|
*
|
|
* @return True if the current area is a dungeon.
|
|
*/
|
|
bool32 AreaIsDungeon(void);
|
|
|
|
/**
|
|
* Check if the current area has enemies.
|
|
*
|
|
* @return True if the current area has enemies.
|
|
*/
|
|
bool32 AreaHasEnemies(void);
|
|
|
|
/**
|
|
* Check if the current area has no enemies.
|
|
*
|
|
* @return True if the current area has no enemies.
|
|
*/
|
|
bool32 AreaHasNoEnemies(void);
|
|
|
|
/**
|
|
* Check if the current area has a map
|
|
*
|
|
* @return True if the current area has a map.
|
|
*/
|
|
bool32 AreaHasMap(void);
|
|
|
|
/**
|
|
* Check if current area has keys.
|
|
*
|
|
* @return True if the current area has keys.
|
|
*/
|
|
bool32 AreaHasKeys(void);
|
|
|
|
#ifndef EU
|
|
/**
|
|
* This function was introduced to allow warping from indoor areas (palace of winds).
|
|
*
|
|
* @return True if the current area allows warping.
|
|
*/
|
|
u32 AreaAllowsWarp(void);
|
|
|
|
/**
|
|
* Related to a music bug?
|
|
*/
|
|
void sub_08052878(void);
|
|
#endif
|
|
|
|
void sub_080526F8(s32 a1);
|
|
|
|
/**
|
|
* Check if the current dungeon has a map item.
|
|
*
|
|
* @return True if the current dungeon has a map item.
|
|
*/
|
|
bool32 HasDungeonMap(void);
|
|
|
|
/**
|
|
* Check if the current dungeon has a compass item.
|
|
*
|
|
* @return True if the current dungeon has a compass item.
|
|
*/
|
|
bool32 HasDungeonCompass(void);
|
|
|
|
/**
|
|
* Check if the current dungeon has a big key item.
|
|
*
|
|
* @return True if the current dungeon has a big key item.
|
|
*/
|
|
bool32 HasDungeonBigKey(void);
|
|
|
|
/**
|
|
* Check if the current dungeon has a small key item.
|
|
*
|
|
* @return True if the current dungeon has a small key item.
|
|
*/
|
|
bool32 HasDungeonSmallKey(void);
|
|
|
|
/**
|
|
* @brief Check if item is a sword.
|
|
*
|
|
* @param item The item to check.
|
|
* @return True if the item is a sword.
|
|
*/
|
|
bool32 ItemIsSword(u32 item);
|
|
|
|
/**
|
|
* Check if item is a shield.
|
|
*
|
|
* @return True if the item is a shield.
|
|
*/
|
|
bool32 ItemIsShield(u32 item);
|
|
|
|
/**
|
|
* @brief Get the index of the bottle containing the specified item.
|
|
*
|
|
* @param item The item to check.
|
|
* @return Bottle index, or 0 if the item is not in a bottle.
|
|
*/
|
|
u32 GetBottleContaining(u32 item);
|
|
|
|
/**
|
|
* Put an item in A or B slot.
|
|
*
|
|
* @param item The item to put.
|
|
*/
|
|
void PutItemOnSlot(u32 item);
|
|
|
|
/**
|
|
* Force equip an item.
|
|
*
|
|
* @param item The item to equip.
|
|
* @param slot The slot to equip the item in.
|
|
*/
|
|
void ForceEquipItem(u32 item, /*EquipSlot*/ u32 slot);
|
|
|
|
/**
|
|
* Get item price.
|
|
*
|
|
* @param item The item to get the price of.
|
|
* @return The price of the item.
|
|
*/
|
|
s32 GetItemPrice(u32 item);
|
|
|
|
/**
|
|
* Get the item purchase enquiry message.
|
|
*
|
|
* @param item The item to get the message for.
|
|
* @return The message index.
|
|
*/
|
|
u32 GetSaleItemConfirmMessageID(u32 item);
|
|
|
|
/**
|
|
* Automatically load overworld graphics groups.
|
|
*/
|
|
void LoadGfxGroups(void);
|
|
/**
|
|
* Load an auxiliary room (no player present).
|
|
*
|
|
* @param area Area index.
|
|
* @param room Room index.
|
|
*/
|
|
void LoadAuxiliaryRoom(u32 area, u32 room);
|
|
|
|
/**
|
|
* Initialize a loaded room.
|
|
*/
|
|
void InitRoom(void);
|
|
|
|
/**
|
|
* Initialize a parachute room.
|
|
*/
|
|
void InitParachuteRoom(void);
|
|
|
|
/**
|
|
* Register a manager for room changes.
|
|
*
|
|
* @param mgr Manager to register.
|
|
* @param onEnter Room enter callback.
|
|
* @param onExit Room exit callback.
|
|
*/
|
|
void RegisterTransitionManager(void* mgr, void (*onEnter)(void*), void (*onExit)(void*));
|
|
|
|
/**
|
|
* Call the room exit callback.
|
|
*/
|
|
void RoomExitCallback(void);
|
|
|
|
/**
|
|
* Restore the game task from a subtask.
|
|
*
|
|
* @param a1
|
|
*/
|
|
void RestoreGameTask(u32 a1);
|
|
|
|
/**
|
|
* Check if an Ezlo message can be displayed.
|
|
*
|
|
* @return True if an Ezlo message can be displayed.
|
|
*/
|
|
bool32 CanDispEzloMessage(void);
|
|
|
|
/**
|
|
* Display an Ezlo message.
|
|
*/
|
|
void DisplayEzloMessage(void);
|
|
|
|
/**
|
|
* Set the player's world map position.
|
|
*
|
|
* @param area Area index.
|
|
* @param room Room index.
|
|
* @param x X position.
|
|
* @param y Y position.
|
|
*/
|
|
void SetWorldMapPos(u32 area, u32 room, u32 x, u32 y);
|
|
|
|
/**
|
|
* Set the player's dungeon map position.
|
|
*
|
|
* @param area Area index.
|
|
* @param room Room index.
|
|
* @param x X position.
|
|
* @param y Y position.
|
|
*/
|
|
void SetDungeonMapPos(u32 area, u32 room, u32 x, u32 y);
|
|
|
|
/**
|
|
* Get flag bank offset for area
|
|
*
|
|
* @param idx Area index.
|
|
* @return Flag bank offset.
|
|
*/
|
|
u32 GetFlagBankOffset(u32 idx);
|
|
|
|
/**
|
|
* Retrieve information about the current room.
|
|
*
|
|
* @return RoomResInfo object.
|
|
*/
|
|
RoomResInfo* GetCurrentRoomInfo(void);
|
|
|
|
void sub_08052EA0(void);
|
|
void sub_08053250(void);
|
|
void sub_080533CC(void);
|
|
|
|
void StartDarkNutTimer(void);
|
|
void sub_080534AC(void);
|
|
void InitBiggoronTimer(void);
|
|
|
|
/** Game tasks states */
|
|
typedef enum {
|
|
GAMETASK_TRANSITION, /* transition from fileselect task */
|
|
GAMETASK_INIT,
|
|
GAMETASK_MAIN,
|
|
GAMETASK_EXIT, /* gameover task or reset */
|
|
} EGameTaskState;
|
|
|
|
/** game task main substates */
|
|
typedef enum {
|
|
GAMEMAIN_INITROOM,
|
|
GAMEMAIN_CHANGEROOM,
|
|
GAMEMAIN_UPDATE,
|
|
GAMEMAIN_CHANGEAREA,
|
|
GAMEMAIN_MINISHPORTAL, /* moments after viewing portal cutscene */
|
|
GAMEMAIN_BARRELUPDATE, /* barrel in deepwood shrine */
|
|
GAMEMAIN_RESERVED,
|
|
GAMEMAIN_SUBTASK,
|
|
} EGameMainState;
|
|
|
|
typedef struct {
|
|
u8 _0;
|
|
u8 _1;
|
|
u8 _2;
|
|
u8 _3;
|
|
u8 _4;
|
|
u16 _6;
|
|
} struct_08127F94;
|
|
extern struct_08127F94 gUnk_08127F94[];
|
|
|
|
#endif // GAME_H
|