#ifndef SF64_MESG
#define SF64_MESG

#include "libultra/ultra64.h"
#include "libc/stdbool.h"

typedef struct {
    s32 msgId;
    u16* msgPtr;
} MsgLookup;

u16* Message_PtrFromId(u16 msgId);
u16 Message_IdFromPtr(u16*);
s32 Message_GetWidth(u16* msgPtr);
s32 Message_GetCharCount(u16* msgPtr);
void Message_DisplayChar(Gfx** gfxPtr, u16 msgChar, s32 xpos, s32 ypos);
bool Message_DisplayText(Gfx** gfxPtr, u16* msgPtr, s32 xPos, s32 yPos, s32 len);
void Message_DisplayScrollingText(Gfx** gfxPtr, u16* msgPtr, s32 xPos, s32 yPos, s32 yRangeHi, s32 yRangeLo, s32 len);
bool Message_IsPrintingChar(u16* msgPtr, s32 charPos);

typedef enum RadioCharacterId {
    RCID_FOX = 0,
    RCID_FOX_OPEN,
    RCID_STATIC = 2,
    RCID_STATIC_FLIP,
    RCID_FOX_RED = 5,
    RCID_FOX_RED_OPEN,
    RCID_FALCO = 10,
    RCID_FALCO_OPEN,
    RCID_FALCO_RED = 15,
    RCID_FALCO_RED_OPEN,
    RCID_SLIPPY = 20,
    RCID_SLIPPY_OPEN,
    RCID_SLIPPY_RED = 25,
    RCID_SLIPPY_RED_OPEN,
    RCID_PEPPY = 30,
    RCID_PEPPY_OPEN,
    RCID_PEPPY_RED = 35,
    RCID_PEPPY_RED_OPEN,
    RCID_KATT = 40,
    RCID_KATT_OPEN,
    RCID_ANDROSS = 50,
    RCID_ANDROSS_OPEN,
    RCID_ANDROSS_RED = 55,
    RCID_ANDROSS_RED_OPEN,
    RCID_JAMES = 60,
    RCID_JAMES_OPEN,
    RCID_GEN_PEPPER = 70,
    RCID_GEN_PEPPER_OPEN,
    RCID_BOSS_CORNERIA = 80,
    RCID_BOSS_CORNERIA_OPEN,
    RCID_ROB64 = 90,
    RCID_ROB64_OPEN,
    RCID_ROB64_RED = 95,
    RCID_ROB64_RED_OPEN,
    RCID_BOSS_METEO = 100,
    RCID_BOSS_METEO_OPEN,
    RCID_BOSS_CORNERIA2 = 110,
    RCID_BOSS_CORNERIA2_OPEN,
    RCID_BOSS_AREA6 = 120,
    RCID_BOSS_AREA6_OPEN,
    RCID_BOSS_ZONESS = 130,
    RCID_BOSS_ZONESS_OPEN,
    RCID_ROB64_2 = 140,
    RCID_ROB64_2_OPEN,
    RCID_BOSS_SECTORX = 150,
    RCID_BOSS_SECTORX_OPEN,
    RCID_BOSS_SECTORY = 160,
    RCID_BOSS_SECTORY_OPEN,
    RCID_BILL = 170,
    RCID_BILL_OPEN,
    RCID_CAIMAN_AREA6 = 180,
    RCID_CAIMAN_AREA6_OPEN,
    RCID_BOSS_MACBETH = 190,
    RCID_BOSS_MACBETH_OPEN,
    RCID_WOLF = 200,
    RCID_WOLF_OPEN,
    RCID_PIGMA = 210,
    RCID_PIGMA_OPEN,
    RCID_LEON = 220,
    RCID_LEON_OPEN,
    RCID_ANDREW = 230,
    RCID_ANDREW_OPEN,
    RCID_WOLF_2 = 240,
    RCID_WOLF_2_OPEN,
    RCID_PIGMA_2 = 250,
    RCID_PIGMA_2_OPEN,
    RCID_LEON_2 = 260,
    RCID_LEON_2_OPEN,
    RCID_ANDREW_2 = 270,
    RCID_ANDREW_2_OPEN,
    RCID_ROB64_TITLE = 300,
    RCID_ROB64_TITLE_OPEN,
    RCID_GEN_PEPPER_TITLE = 310,
    RCID_GEN_PEPPER_TITLE_OPEN,
    RCID_TR = 350,
    RCID_TR_OPEN,
    RCID_FOX_EXPERT = 400,
    RCID_FOX_EXPERT_OPEN,
    RCID_1000 = 1000,
} RadioCharacterId;

void Radio_PlayMessage(u16*, enum RadioCharacterId);
void func_radio_800BB388(void);
void func_radio_800BB5D0(void);

typedef enum {
    MSGCHAR_END,
    MSGCHAR_NWL,
    MSGCHAR_NP2,
    MSGCHAR_NP3,
    MSGCHAR_NP4,
    MSGCHAR_NP5,
    MSGCHAR_NP6,
    MSGCHAR_NP7,
    MSGCHAR_PRI0,
    MSGCHAR_PRI1,
    MSGCHAR_PRI2,
    MSGCHAR_PRI3,
    MSGCHAR_SPC,
    MSGCHAR_QSP,
    MSGCHAR_HSP,
    MSGCHAR_NXT,
    MSGCHAR_CLF,
    MSGCHAR_CUP,
    MSGCHAR_CRT,
    MSGCHAR_CDN,
    MSGCHAR_AUP,
    MSGCHAR_ALF,
    MSGCHAR_ADN,
    MSGCHAR_ART,
    MSGCHAR_A,
    MSGCHAR_B,
    MSGCHAR_C,
    MSGCHAR_D,
    MSGCHAR_E,
    MSGCHAR_F,
    MSGCHAR_G,
    MSGCHAR_H,
    MSGCHAR_I,
    MSGCHAR_J,
    MSGCHAR_K,
    MSGCHAR_L,
    MSGCHAR_M,
    MSGCHAR_N,
    MSGCHAR_O,
    MSGCHAR_P,
    MSGCHAR_Q,
    MSGCHAR_R,
    MSGCHAR_S,
    MSGCHAR_T,
    MSGCHAR_U,
    MSGCHAR_V,
    MSGCHAR_W,
    MSGCHAR_X,
    MSGCHAR_Y,
    MSGCHAR_Z,
    MSGCHAR_a,
    MSGCHAR_b,
    MSGCHAR_c,
    MSGCHAR_d,
    MSGCHAR_e,
    MSGCHAR_f,
    MSGCHAR_g,
    MSGCHAR_h,
    MSGCHAR_i,
    MSGCHAR_j,
    MSGCHAR_k,
    MSGCHAR_l,
    MSGCHAR_m,
    MSGCHAR_n,
    MSGCHAR_o,
    MSGCHAR_p,
    MSGCHAR_q,
    MSGCHAR_r,
    MSGCHAR_s,
    MSGCHAR_t,
    MSGCHAR_u,
    MSGCHAR_v,
    MSGCHAR_w,
    MSGCHAR_x,
    MSGCHAR_y,
    MSGCHAR_z,
    MSGCHAR_EXM,
    MSGCHAR_QST,
    MSGCHAR_DSH,
    MSGCHAR_CMA,
    MSGCHAR_PRD,
    MSGCHAR_0,
    MSGCHAR_1,
    MSGCHAR_2,
    MSGCHAR_3,
    MSGCHAR_4,
    MSGCHAR_5,
    MSGCHAR_6,
    MSGCHAR_7,
    MSGCHAR_8,
    MSGCHAR_9,
    MSGCHAR_APS,
    MSGCHAR_LPR,
    MSGCHAR_RPR,
    MSGCHAR_CLN,
    MSGCHAR_PIP,
} MsgCharCode;

#endif