mirror of https://github.com/zeldaret/mm.git
				
				
				
			
		
			
				
	
	
		
			327 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			327 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
| #ifndef Z64MESSAGE_H
 | |
| #define Z64MESSAGE_H
 | |
| 
 | |
| #include "PR/ultratypes.h"
 | |
| #include "stdbool.h"
 | |
| 
 | |
| #include "z64bombers_notebook.h"
 | |
| #include "z64font.h"
 | |
| #include "z64view.h"
 | |
| #include "unk.h"
 | |
| 
 | |
| struct Actor;
 | |
| struct MessageTableEntry;
 | |
| struct OcarinaStaff;
 | |
| struct PlayState;
 | |
| 
 | |
| typedef enum TextBoxType {
 | |
|     /* 0x00 */ TEXTBOX_TYPE_0,
 | |
|     /* 0x01 */ TEXTBOX_TYPE_1,
 | |
|     /* 0x02 */ TEXTBOX_TYPE_2,
 | |
|     /* 0x03 */ TEXTBOX_TYPE_3,
 | |
|     /* 0x04 */ TEXTBOX_TYPE_4,
 | |
|     /* 0x05 */ TEXTBOX_TYPE_5,
 | |
|     /* 0x06 */ TEXTBOX_TYPE_6,
 | |
|     /* 0x07 */ TEXTBOX_TYPE_7,
 | |
|     /* 0x08 */ TEXTBOX_TYPE_8,
 | |
|     /* 0x09 */ TEXTBOX_TYPE_9,
 | |
|     /* 0x0A */ TEXTBOX_TYPE_A,
 | |
|     /* 0x0B */ TEXTBOX_TYPE_B,
 | |
|     /* 0x0C */ TEXTBOX_TYPE_C,
 | |
|     /* 0x0D */ TEXTBOX_TYPE_D,
 | |
|     /* 0x0E */ TEXTBOX_TYPE_E,
 | |
|     /* 0x0F */ TEXTBOX_TYPE_F,
 | |
|     /* 0x10 */ TEXTBOX_TYPE_MAX
 | |
| } TextBoxType;
 | |
| 
 | |
| #define TEXTBOX_ENDTYPE_DEFAULT    0x00
 | |
| 
 | |
| #define TEXTBOX_ENDTYPE_TWO_CHOICE    0x10
 | |
| #define TEXTBOX_ENDTYPE_THREE_CHOICE    0x11
 | |
| #define TEXTBOX_ENDTYPE_12    0x12
 | |
| 
 | |
| #define TEXTBOX_ENDTYPE_NEXT    0x20
 | |
| 
 | |
| #define TEXTBOX_ENDTYPE_PERSISTENT    0x30
 | |
| 
 | |
| #define TEXTBOX_ENDTYPE_EVENT    0x40
 | |
| #define TEXTBOX_ENDTYPE_PAUSE_MENU    0x41
 | |
| #define TEXTBOX_ENDTYPE_EVENT2    0x42
 | |
| 
 | |
| #define TEXTBOX_ENDTYPE_FADE_NORMAL    0x50
 | |
| #define TEXTBOX_ENDTYPE_FADE_SKIPPABLE    0x52
 | |
| #define TEXTBOX_ENDTYPE_FADE_STAGES_1    0x55
 | |
| #define TEXTBOX_ENDTYPE_FADE_STAGES_2    0x56
 | |
| #define TEXTBOX_ENDTYPE_FADE_STAGES_3    0x57
 | |
| 
 | |
| #define TEXTBOX_ENDTYPE_INPUT_BANK    0x60
 | |
| #define TEXTBOX_ENDTYPE_INPUT_DOGGY_RACETRACK_BET    0x61
 | |
| #define TEXTBOX_ENDTYPE_INPUT_BOMBER_CODE    0x62
 | |
| #define TEXTBOX_ENDTYPE_INPUT_LOTTERY_CODE    0x63
 | |
| #define TEXTBOX_ENDTYPE_64    0x64
 | |
| 
 | |
| typedef enum MessageMode {
 | |
|     /* 0x00 */ MSGMODE_NONE,
 | |
|     /* 0x01 */ MSGMODE_TEXT_START,
 | |
|     /* 0x02 */ MSGMODE_TEXT_BOX_GROWING,
 | |
|     /* 0x03 */ MSGMODE_TEXT_STARTING,
 | |
|     /* 0x04 */ MSGMODE_TEXT_NEXT_MSG,
 | |
|     /* 0x05 */ MSGMODE_TEXT_CONTINUING,
 | |
|     /* 0x06 */ MSGMODE_TEXT_DISPLAYING,
 | |
|     /* 0x07 */ MSGMODE_TEXT_AWAIT_INPUT,
 | |
|     /* 0x08 */ MSGMODE_TEXT_DELAYED_BREAK,
 | |
|     /* 0x09 */ MSGMODE_9,
 | |
|     /* 0x0A */ MSGMODE_OCARINA_STARTING,
 | |
|     /* 0x0B */ MSGMODE_SONG_DEMONSTRATION_STARTING,
 | |
|     /* 0x0C */ MSGMODE_SONG_PROMPT_STARTING,
 | |
|     /* 0x0D */ MSGMODE_OCARINA_PLAYING,
 | |
|     /* 0x0E */ MSGMODE_E,
 | |
|     /* 0x0F */ MSGMODE_OCARINA_FAIL,
 | |
|     /* 0x10 */ MSGMODE_OCARINA_FAIL_NO_TEXT,
 | |
|     /* 0x11 */ MSGMODE_OCARINA_NOTES_DROP,
 | |
|     /* 0x12 */ MSGMODE_SONG_PLAYED,
 | |
|     /* 0x13 */ MSGMODE_SETUP_DISPLAY_SONG_PLAYED,
 | |
|     /* 0x14 */ MSGMODE_DISPLAY_SONG_PLAYED,
 | |
|     /* 0x15 */ MSGMODE_DISPLAY_SONG_PLAYED_TEXT_BEGIN,
 | |
|     /* 0x16 */ MSGMODE_16,
 | |
|     /* 0x17 */ MSGMODE_17,
 | |
|     /* 0x18 */ MSGMODE_18,
 | |
|     /* 0x19 */ MSGMODE_19,
 | |
|     /* 0x1A */ MSGMODE_SONG_DEMONSTRATION,
 | |
|     /* 0x1B */ MSGMODE_SONG_DEMONSTRATION_DONE,
 | |
|     /* 0x1C */ MSGMODE_SONG_PROMPT,
 | |
|     /* 0x1D */ MSGMODE_SONG_PROMPT_SUCCESS,
 | |
|     /* 0x1E */ MSGMODE_SONG_PROMPT_FAIL,
 | |
|     /* 0x1F */ MSGMODE_SONG_PROMPT_NOTES_DROP,
 | |
|     /* 0x20 */ MSGMODE_OCARINA_AWAIT_INPUT,
 | |
|     /* 0x21 */ MSGMODE_21,
 | |
|     /* 0x22 */ MSGMODE_22,
 | |
|     /* 0x23 */ MSGMODE_23,
 | |
|     /* 0x24 */ MSGMODE_24,
 | |
|     /* 0x25 */ MSGMODE_25,
 | |
|     /* 0x26 */ MSGMODE_26,
 | |
|     /* 0x27 */ MSGMODE_SCARECROW_LONG_RECORDING_START,
 | |
|     /* 0x28 */ MSGMODE_SCARECROW_LONG_RECORDING_ONGOING,
 | |
|     /* 0x29 */ MSGMODE_SCARECROW_LONG_DEMONSTRATION,
 | |
|     /* 0x2A */ MSGMODE_SCARECROW_SPAWN_RECORDING_START,
 | |
|     /* 0x2B */ MSGMODE_SCARECROW_SPAWN_RECORDING_ONGOING,
 | |
|     /* 0x2C */ MSGMODE_SCARECROW_SPAWN_RECORDING_FAILED,
 | |
|     /* 0x2D */ MSGMODE_SCARECROW_SPAWN_RECORDING_DONE,
 | |
|     /* 0x2E */ MSGMODE_SCARECROW_SPAWN_DEMONSTRATION,
 | |
|     /* 0x2F */ MSGMODE_2F,
 | |
|     /* 0x30 */ MSGMODE_30,
 | |
|     /* 0x31 */ MSGMODE_31,
 | |
|     /* 0x32 */ MSGMODE_32,
 | |
|     /* 0x33 */ MSGMODE_33,
 | |
|     /* 0x34 */ MSGMODE_34,
 | |
|     /* 0x35 */ MSGMODE_35,
 | |
|     /* 0x36 */ MSGMODE_36,
 | |
|     /* 0x37 */ MSGMODE_37,
 | |
|     /* 0x38 */ MSGMODE_38,
 | |
|     /* 0x39 */ MSGMODE_39,
 | |
|     /* 0x3A */ MSGMODE_3A,
 | |
|     /* 0x3B */ MSGMODE_3B,
 | |
|     /* 0x3C */ MSGMODE_3C,
 | |
|     /* 0x3D */ MSGMODE_3D,
 | |
|     /* 0x3E */ MSGMODE_3E,
 | |
|     /* 0x3F */ MSGMODE_3F,
 | |
|     /* 0x40 */ MSGMODE_40,
 | |
|     /* 0x41 */ MSGMODE_TEXT_AWAIT_NEXT,
 | |
|     /* 0x42 */ MSGMODE_TEXT_DONE,
 | |
|     /* 0x43 */ MSGMODE_TEXT_CLOSING,
 | |
|     /* 0x44 */ MSGMODE_PAUSED, // Causes the message system to do nothing until external code sets a new message mode or calls a public function
 | |
|     /* 0x45 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_BACKGROUND, // Scene Title Card
 | |
|     /* 0x46 */ MSGMODE_SCENE_TITLE_CARD_FADE_IN_TEXT,
 | |
|     /* 0x47 */ MSGMODE_SCENE_TITLE_CARD_DISPLAYING,
 | |
|     /* 0x48 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_TEXT,
 | |
|     /* 0x49 */ MSGMODE_SCENE_TITLE_CARD_FADE_OUT_BACKGROUND,
 | |
|     /* 0x4A */ MSGMODE_NEW_CYCLE_0, // End of cycle?
 | |
|     /* 0x4B */ MSGMODE_NEW_CYCLE_1,
 | |
|     /* 0x4C */ MSGMODE_NEW_CYCLE_2,
 | |
|     /* 0x4D */ MSGMODE_OWL_SAVE_0,
 | |
|     /* 0x4E */ MSGMODE_OWL_SAVE_1,
 | |
|     /* 0x4F */ MSGMODE_OWL_SAVE_2
 | |
| } MessageMode;
 | |
| 
 | |
| typedef enum FaceReactionSet {
 | |
|     /* 0x11 */ FACE_REACTION_SET_JIM = 0x11,
 | |
|     /* 0x12 */ FACE_REACTION_SET_BOMBERS,
 | |
|     /* 0x15 */ FACE_REACTION_SET_BOMBERS_HIDEOUT_GUARD = 0x15,
 | |
|     /* 0x2D */ FACE_REACTION_SET_TREASURE_CHEST_SHOP_GAL = 0x2D,
 | |
|     /* 0x2F */ FACE_REACTION_SET_CURIOSITY_SHOP_MAN = 0x2F,
 | |
|     /* 0x30 */ FACE_REACTION_SET_TOWN_SHOOTING_GALLERY_MAN,
 | |
|     /* 0x31 */ FACE_REACTION_SET_SWAMP_SHOOTING_GALLERY_MAN,
 | |
|     /* 0x36 */ FACE_REACTION_SET_PART_TIMER = 0x36
 | |
| } FaceReactionSet;
 | |
| 
 | |
| u16 Text_GetFaceReaction(struct PlayState* play, FaceReactionSet reactionSet);
 | |
| 
 | |
| typedef enum TextState {
 | |
|     /*  0 */ TEXT_STATE_NONE,
 | |
|     /*  1 */ TEXT_STATE_NEXT,
 | |
|     /*  2 */ TEXT_STATE_CLOSING,
 | |
|     /*  3 */ TEXT_STATE_FADING,
 | |
|     /*  4 */ TEXT_STATE_CHOICE,
 | |
|     /*  5 */ TEXT_STATE_EVENT,
 | |
|     /*  6 */ TEXT_STATE_DONE,
 | |
|     /*  7 */ TEXT_STATE_SONG_DEMO_DONE,
 | |
|     /*  8 */ TEXT_STATE_8,
 | |
|     /*  9 */ TEXT_STATE_9,
 | |
|     /* 10 */ TEXT_STATE_AWAITING_NEXT,
 | |
|     /* 11 */ TEXT_STATE_11,
 | |
|     /* 12 */ TEXT_STATE_12,
 | |
|     /* 13 */ TEXT_STATE_13,
 | |
|     /* 14 */ TEXT_STATE_INPUT_RUPEES,
 | |
|     /* 15 */ TEXT_STATE_INPUT_BOMBER_CODE,
 | |
|     /* 16 */ TEXT_STATE_PAUSE_MENU,
 | |
|     /* 17 */ TEXT_STATE_INPUT_LOTTERY_CODE,
 | |
|     /* 18 */ TEXT_STATE_18
 | |
| } TextState;
 | |
| 
 | |
| typedef struct MessageContext {
 | |
|     /* 0x00000 */ View view;
 | |
|     /* 0x00168 */ Font font;
 | |
|     /* 0x11EF8 */ u8* textboxSegment;
 | |
|     /* 0x11EFC */ UNK_TYPE1 unk11EFC[0x4];
 | |
|     /* 0x11F00 */ struct OcarinaStaff* ocarinaStaff;
 | |
|     /* 0x11F04 */ u16 currentTextId;
 | |
|     /* 0x11F06 */ u16 choiceTextId; // s16?
 | |
|     /* 0x11F08 */ u16 unk11F08;
 | |
|     /* 0x11F0A */ u8 textBoxType;
 | |
|     /* 0x11F0B */ u8 textBoxPos;
 | |
|     /* 0x11F0C */ u8 unk11F0C;
 | |
|     /* 0x11F10 */ s32 msgLength;
 | |
|     /* 0x11F14 */ u16 nextTextId;
 | |
|     /* 0x11F16 */ u16 itemId;
 | |
|     /* 0x11F18 */ u8 unk11F18;
 | |
|     /* 0x11F1A */ s16 unk11F1A[3];
 | |
|     /* 0x11F20 */ UNK_TYPE1 unk11F20[0x2];
 | |
|     /* 0x11F22 */ u8 msgMode;
 | |
|     /* 0x11F23 */ UNK_TYPE1 unk11F23;
 | |
|     /* 0x11F24 */ union {
 | |
|         char schar[200];
 | |
|         u16 wchar[100];
 | |
|     } decodedBuffer;
 | |
|     /* 0x11FEC */ u16 msgBufPos;
 | |
|     /* 0x11FEE */ u16 textDrawPos;
 | |
|     /* 0x11FF0 */ u16 decodedTextLen;
 | |
|     /* 0x11FF2 */ u16 textUnskippable;
 | |
|     /* 0x11FF4 */ s16 textPosX;
 | |
|     /* 0x11FF6 */ s16 textPosY;
 | |
|     /* 0x11FF8 */ s16 unk11FF8;
 | |
|     /* 0x11FFA */ s16 unk11FFA;
 | |
|     /* 0x11FFC */ s16 unk11FFC;
 | |
|     /* 0x11FFE */ s16 unk11FFE[0x3];
 | |
|     /* 0x12004 */ s16 textboxXTarget;
 | |
|     /* 0x12006 */ s16 textboxYTarget;
 | |
|     /* 0x12008 */ s16 unk12008;
 | |
|     /* 0x1200A */ s16 unk1200A;
 | |
|     /* 0x1200C */ s16 unk1200C;
 | |
|     /* 0x1200E */ s16 unk1200E;
 | |
|     /* 0x12010 */ s16 unk12010;
 | |
|     /* 0x12012 */ s16 unk12012;
 | |
|     /* 0x12014 */ s16 unk12014;
 | |
|     /* 0x12014 */ s16 unk12016;
 | |
|     /* 0x12018 */ s16 textColorR;
 | |
|     /* 0x1201A */ s16 textColorG;
 | |
|     /* 0x1201C */ s16 textColorB;
 | |
|     /* 0x1201E */ s16 textColorAlpha;
 | |
|     /* 0x12020 */ u8 textboxEndType;
 | |
|     /* 0x12021 */ u8 choiceIndex;
 | |
|     /* 0x12022 */ u8 choiceNum;
 | |
|     /* 0x12023 */ u8 stateTimer;
 | |
|     /* 0x12024 */ u16 textDelayTimer;
 | |
|     /* 0x12026 */ u16 textDelay;
 | |
|     /* 0x12028 */ u16 songPlayed;
 | |
|     /* 0x1202A */ u16 ocarinaMode;
 | |
|     /* 0x1202C */ u16 ocarinaAction;
 | |
|     /* 0x1202E */ u16 lastPlayedSong;
 | |
|     /* 0x12030 */ s16 unk_12030;
 | |
|     /* 0x12032 */ UNK_TYPE1 unk_12032[0x2];
 | |
|     /* 0x12034 */ s16 textboxColorRed;
 | |
|     /* 0x12036 */ s16 textboxColorGreen;
 | |
|     /* 0x12038 */ s16 textboxColorBlue;
 | |
|     /* 0x1203A */ s16 textboxColorAlphaTarget;
 | |
|     /* 0x1203C */ s16 textboxColorAlphaCurrent;
 | |
|     /* 0x1203E */ s16 unk1203E;
 | |
|     /* 0x12040 */ struct Actor* talkActor;
 | |
|     /* 0x12044 */ s16 unk12044;
 | |
|     /* 0x12046 */ s16 blockSunsSong;
 | |
|     /* 0x12048 */ u8 ocarinaButtonIndex;
 | |
|     /* 0x1204A */ s16 ocarinaButtonsPosY[5];
 | |
|     /* 0x12054 */ s16 unk12054[6]; // First, second and third digits in lottery code guess
 | |
|     /* 0x1205A */ UNK_TYPE1 unk12060[0x8];
 | |
|     /* 0x12068 */ s16 textboxX;
 | |
|     /* 0x1206A */ s16 textboxY;
 | |
|     /* 0x1206C */ s32 unk1206C;
 | |
|     /* 0x12070 */ s32 unk12070;
 | |
|     /* 0x12074 */ s32 unk12074;
 | |
|     /* 0x12078 */ s32 rupeesSelected; // Used for bank and doggy racetrack bet
 | |
|     /* 0x1207C */ s32 rupeesTotal; // Used for bank and doggy racetrack bet
 | |
|     /* 0x12080 */ struct MessageTableEntry* messageTable;
 | |
|     /* 0x12084 */ struct MessageTableEntry* messageTableNES;
 | |
|     /* 0x12088 */ UNK_TYPE1 unk12088[0x4];
 | |
|     /* 0x1208C */ struct MessageTableEntry* messageTableCredits;
 | |
|     /* 0x12090 */ s16 textIsCredits;
 | |
|     /* 0x12092 */ s16 messageHasSetSfx;
 | |
|     /* 0x12094 */ u8 textboxSkipped;
 | |
|     /* 0x12098 */ f32 textCharScale;
 | |
|     /* 0x1209C */ s16 textFade;
 | |
|     /* 0x120A0 */ s32 ocarinaAvailableSongs;
 | |
|     /* 0x120A4 */ s16 stickAdjX;
 | |
|     /* 0x120A6 */ s16 stickAdjY;
 | |
|     /* 0x120A8 */ s16 stickXRepeatState;
 | |
|     /* 0x120AA */ s16 stickYRepeatState;
 | |
|     /* 0x120AC */ s16 stickXRepeatTimer;
 | |
|     /* 0x120AE */ s16 stickYRepeatTimer;
 | |
|     /* 0x120B0 */ u8 ocarinaSongEffectActive;
 | |
|     /* 0x120B1 */ u8 bombersNotebookEventQueueCount;
 | |
|     /* 0x120B2 */ u8 bombersNotebookEventQueue[10];
 | |
|     /* 0x120BC */ u16 hudVisibility;
 | |
|     /* 0x120BE */ s16 unk120BE;
 | |
|     /* 0x120C0 */ s16 unk120C0;
 | |
|     /* 0x120C2 */ s16 unk120C2;
 | |
|     /* 0x120C4 */ s32 unk120C4;
 | |
|     /* 0x120C8 */ s16 unk120C8;
 | |
|     /* 0x120CA */ s16 unk120CA;
 | |
|     /* 0x120CC */ s16 unk120CC;
 | |
|     /* 0x120CE */ s16 unk120CE;
 | |
|     /* 0x120D0 */ s16 unk120D0;
 | |
|     /* 0x120D2 */ s16 unk120D2;
 | |
|     /* 0x120D4 */ s16 unk120D4;
 | |
|     /* 0x120D6 */ s16 unk120D6;
 | |
|     /* 0x120D8 */ s16 unk120D8;
 | |
|     /* 0x120DA */ UNK_TYPE1 unk_120DA[0x6];
 | |
| } MessageContext; // size = 0x120E0
 | |
| 
 | |
| bool Message_ShouldAdvance(struct PlayState* play);
 | |
| void Message_CloseTextbox(struct PlayState* play);
 | |
| void Message_DrawTextChar(struct PlayState* play, TexturePtr texture, Gfx** gfxP);
 | |
| void Message_DrawItemIcon(struct PlayState* play, Gfx** gfxP);
 | |
| void Message_HandleOcarina(struct PlayState* play);
 | |
| void Message_LoadItemIcon(struct PlayState* play, u16 itemId, s16 arg2);
 | |
| void Message_DecodeHeader(struct PlayState* play);
 | |
| void func_801514B0(struct PlayState* play, u16 arg1, u8 arg2);
 | |
| void Message_StartTextbox(struct PlayState* play, u16 textId, struct Actor* actor);
 | |
| void Message_ContinueTextbox(struct PlayState* play, u16 textId);
 | |
| void Message_DisplaySceneTitleCard(struct PlayState* play, u16 textId);
 | |
| void Message_BombersNotebookQueueEvent(struct PlayState* play, u8 event);
 | |
| void Message_DisplayOcarinaStaff(struct PlayState* play, u16 ocarinaAction);
 | |
| void Message_DisplayOcarinaStaffBlockSunsSong(struct PlayState* play, u16 ocarinaAction);
 | |
| u8 Message_GetState(MessageContext* msgCtx);
 | |
| void Message_Draw(struct PlayState* play);
 | |
| void Message_Update(struct PlayState* play);
 | |
| void Message_Init(struct PlayState* play);
 | |
| void Message_FindMessageNES(struct PlayState* play, u16 textId);
 | |
| void Message_DrawTextNES(struct PlayState* play, Gfx** gfxP, u16 textDrawPos);
 | |
| void Message_DecodeNES(struct PlayState* play);
 | |
| void Message_FindCreditsMessage(struct PlayState* play, u16 textId);
 | |
| void Message_DrawTextCredits(struct PlayState* play, Gfx** gfxP);
 | |
| void Message_DecodeCredits(struct PlayState* play);
 | |
| 
 | |
| extern u8 gPageSwitchNextButtonStatus[6][5];
 | |
| extern u16 gBombersNotebookWeekEventFlags[BOMBERS_NOTEBOOK_EVENT_MAX];
 | |
| extern s16 gOcarinaSongItemMap[];
 | |
| 
 | |
| #endif
 |