tmc/include/message.h

229 lines
4.2 KiB
C

#ifndef MESSAGE_H
#define MESSAGE_H
#include "global.h"
#include "entity.h"
#include "structures.h"
#define MESSAGE_ACTIVE 0x7f
typedef struct {
u8 state;
u8 unk;
u8 textSpeed;
u8 unk3; // HI?
u8 textWindowWidth;
u8 textWindowHeight;
u8 textWindowPosX;
u8 textWindowPosY;
u16 textIndex;
u16 unk2; // HI?
u32 flags;
u32 rupees; // item price, shells, minigame timer
u32 field_0x14; // number of cuccos
u32 field_0x18; // unused
u32 field_0x1c; // unused
} Message;
extern Message gMessage;
typedef struct {
u8 unk00 : 1;
u8 unk01 : 4;
u8 unk05 : 2;
u8 unk06 : 1;
u8 code; // first byte read
u16 param; // second byte read
u16 extended; // ascii adjusted for jp chars
u16 _6;
u16 textIndex;
void* _c;
const u8* buf[8];
} Token;
typedef struct {
Message message;
Token curToken;
WStruct _50;
char player_name[10];
u8 _66[0x10];
u8 _76;
u8 _77[0x11];
u8 msgStatus;
u8 renderStatus;
u8 newlineDelay;
u8 _8b;
u8 _8c;
u8 _8d;
u8 _8e;
u8 _8f;
u8 _90;
u8 _91;
s8 typeSpeed;
u8 _93;
u8 _94;
u8 delay;
u8 _96;
u8 _97;
union {
u32 word;
struct {
u8 lineNo;
u8 b1;
u8 b2;
s8 sizeScale;
} bytes;
} _98;
u8 _9c;
u8 updateDraw;
u16 beginTiles[4];
u16 _a6;
} TextRender;
extern TextRender gTextRender;
static_assert(sizeof(TextRender) == 0xa8);
/**
* @brief Initialize the message system.
*/
void MessageInitialize(void);
/**
* @brief Update the message system.
*
*/
void MessageMain(void);
/**
* @brief Show a message on screen.
*
* @param index u32 Message index
*/
void MessageRequest(u32 index);
/**
* @brief Show a message at screen posiiton.
*
* @param index u32 Message index
* @param x u32 Screen x
* @param y u32 Screen y
*/
void MessageAtPos(u32 index, u32 x, u32 y);
/**
* @brief Show a message that attempts not to obscure the entity.
*
* @param index u32 Message index
* @param entity Entity* Your important entity
*/
void MessageNoOverlap(u32 index, Entity* entity);
/**
* @brief Show a message that attempts not to obscure the camera target.
*
* @param index u32 Message index
*/
void MessageFromTarget(u32 index);
/**
* @brief Display message at y position.
*
* @param index u32 Message index
* @param y u32 Screen y
*/
void MessageAtHeight(u32 index, u32 y);
/**
* @brief Close message.
*/
void MessageClose(void);
void DispMessageFrame(u16*, s32, s32, u32);
void sub_08057044(u32, struct_020227E8*, u32);
typedef enum {
TEXT_SAVE,
TEXT_CREDITS,
TEXT_NAMES,
TEXT_NEWSLETTER,
TEXT_ITEMS,
TEXT_ITEM_GET,
TEXT_LOCATIONS,
TEXT_WINDCRESTS,
TEXT_FIGURINE_NAMES,
TEXT_FIGURINE_DESCRIPTIONS,
TEXT_EMPTY,
TEXT_EZLO,
TEXT_EZLO2,
TEXT_MINISH,
TEXT_KINSTONE,
TEXT_PICORI,
TEXT_PROLOGUE,
TEXT_FINDING_EZLO,
TEXT_MINISH2,
TEXT_VAATI,
TEXT_GUSTAF,
TEXT_PANEL_TUTORIAL,
TEXT_VAATI2,
TEXT_GUSTAF2,
TEXT_EMPTY2,
TEXT_EMPTY3,
TEXT_FARMERS,
TEXT_CARPENTERS,
TEXT_EZLO_ELEMENTS_DONE,
TEXT_GORONS,
TEXT_EMPTY4,
TEXT_BELARI,
TEXT_LON_LON,
TEXT_FOREST_MINISH,
TEXT_EZLO_PORTAL,
TEXT_PERCY,
TEXT_BREAK_VAATI_CURSE,
TEXT_FESTIVAL,
TEXT_EMPTY5,
TEXT_TREASURE_GUARDIAN,
TEXT_DAMPE,
TEXT_BUSINESS_SCRUB,
TEXT_EMPTY6,
TEXT_PICOLYTE,
TEXT_STOCKWELL,
TEXT_SYRUP,
TEXT_ITEM_PRICES,
TEXT_WIND_TRIBE,
TEXT_ANJU,
TEXT_GORMAN_ORACLES,
TEXT_SMITH,
TEXT_PHONOGRAPH,
TEXT_TOWN,
TEXT_TOWN2,
TEXT_TOWN3,
TEXT_TOWN4,
TEXT_TOWN5,
TEXT_TOWN6,
TEXT_TOWN7,
TEXT_MILK,
TEXT_BAKERY,
TEXT_SIMON,
TEXT_SCHOOL,
TEXT_TINGLE,
TEXT_POST,
TEXT_MUTOH,
TEXT_BURLOV,
TEXT_CARLOV,
TEXT_REM,
TEXT_HAPPY_HEARTH,
TEXT_BLADE_MASTERS,
TEXT_ANSWER_HOUSE,
TEXT_UNK_WISE,
TEXT_LIBRARY,
TEXT_TOWN_MINISH1,
TEXT_TOWN_MINISH2,
TEXT_HAGEN,
TEXT_DR_LEFT,
TEXT_TOWN8,
TEXT_CAFE,
} TextCategory;
#define TEXT_INDEX(category, index) ((category << 8) | index)
#endif // MESSAGE_H