mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-10-19 19:52:39 +00:00
6bfdcbcb7b
Now level changes and area changes are separated. Entity deletions are properly tracked on level change or area change. Late entity synchronization is now triggered on any area change.
159 lines
5.7 KiB
C
159 lines
5.7 KiB
C
#ifndef INGAME_MENU_H
|
|
#define INGAME_MENU_H
|
|
|
|
#include <PR/ultratypes.h>
|
|
|
|
#define ASCII_TO_DIALOG(asc) \
|
|
(((asc) >= '0' && (asc) <= '9') ? ((asc) - '0') : \
|
|
((asc) >= 'A' && (asc) <= 'Z') ? ((asc) - 'A' + 0x0A) : \
|
|
((asc) >= 'a' && (asc) <= 'z') ? ((asc) - 'a' + 0x24) : 0x00)
|
|
|
|
#define MENU_MTX_PUSH 1
|
|
#define MENU_MTX_NOPUSH 2
|
|
|
|
#define MENU_SCROLL_VERTICAL 1
|
|
#define MENU_SCROLL_HORIZONTAL 2
|
|
|
|
// Japanese File Select uses an unique table
|
|
// to print specific Japanese HUD chars
|
|
#define HUD_LUT_JPMENU 1
|
|
#define HUD_LUT_GLOBAL 2
|
|
|
|
// For file select JP HUD difference
|
|
#ifdef VERSION_JP
|
|
#define HUD_LUT_DIFF HUD_LUT_JPMENU
|
|
#else
|
|
#define HUD_LUT_DIFF HUD_LUT_GLOBAL
|
|
#endif
|
|
|
|
#define RENDER_PAUSE_SCREEN 1
|
|
#define RENDER_COURSE_DONE_SCREEN 2
|
|
|
|
|
|
extern s8 gDialogCourseActNum;
|
|
extern s8 gHudFlash;
|
|
|
|
struct DialogEntry
|
|
{
|
|
/*0x00*/ u32 unused;
|
|
/*0x04*/ s8 linesPerBox;
|
|
/*0x06*/ s16 leftOffset;
|
|
/*0x08*/ s16 width;
|
|
/*0x0C*/ const u8 *str;
|
|
};
|
|
|
|
// EU only
|
|
enum HudSpecialHUDChars {
|
|
HUD_CHAR_A_UMLAUT = 0x3A,
|
|
HUD_CHAR_O_UMLAUT = 0x3B,
|
|
HUD_CHAR_U_UMLAUT = 0x3C
|
|
};
|
|
|
|
enum SpecialFontChars {
|
|
GLOBAL_CHAR_SPACE = 0x9E,
|
|
GLOBAR_CHAR_TERMINATOR = 0xFF
|
|
};
|
|
|
|
// definitions for some of the special characters defined in charmap.txt
|
|
enum DialogSpecialChars {
|
|
#ifdef VERSION_EU
|
|
DIALOG_CHAR_LOWER_A_GRAVE = 0x60, // 'a' grave
|
|
DIALOG_CHAR_LOWER_A_CIRCUMFLEX = 0x61, // 'a' circumflex
|
|
DIALOG_CHAR_LOWER_A_UMLAUT = 0x62, // 'a' umlaut
|
|
DIALOG_CHAR_UPPER_A_GRAVE = 0x64, // 'A' grave
|
|
DIALOG_CHAR_UPPER_A_CIRCUMFLEX = 0x65, // 'A' circumflex
|
|
DIALOG_CHAR_UPPER_A_UMLAUT = 0x66, // 'A' umlaut
|
|
DIALOG_CHAR_LOWER_E_GRAVE = 0x70, // 'e' grave
|
|
DIALOG_CHAR_LOWER_E_CIRCUMFLEX = 0x71, // 'e' circumflex
|
|
DIALOG_CHAR_LOWER_E_UMLAUT = 0x72, // 'e' umlaut
|
|
DIALOG_CHAR_LOWER_E_ACUTE = 0x73, // 'e' acute
|
|
DIALOG_CHAR_UPPER_E_GRAVE = 0x74, // 'E' grave
|
|
DIALOG_CHAR_UPPER_E_CIRCUMFLEX = 0x75, // 'E' circumflex
|
|
DIALOG_CHAR_UPPER_E_UMLAUT = 0x76, // 'E' umlaut
|
|
DIALOG_CHAR_UPPER_E_ACUTE = 0x77, // 'E' acute
|
|
DIALOG_CHAR_LOWER_U_GRAVE = 0x80, // 'u' grave
|
|
DIALOG_CHAR_LOWER_U_CIRCUMFLEX = 0x81, // 'u' circumflex
|
|
DIALOG_CHAR_LOWER_U_UMLAUT = 0x82, // 'u' umlaut
|
|
DIALOG_CHAR_UPPER_U_GRAVE = 0x84, // 'U' grave
|
|
DIALOG_CHAR_UPPER_U_CIRCUMFLEX = 0x85, // 'U' circumflex
|
|
DIALOG_CHAR_UPPER_U_UMLAUT = 0x86, // 'U' umlaut
|
|
DIALOG_CHAR_LOWER_O_CIRCUMFLEX = 0x91, // 'o' circumflex
|
|
DIALOG_CHAR_LOWER_O_UMLAUT = 0x92, // 'o' umlaut
|
|
DIALOG_CHAR_UPPER_O_CIRCUMFLEX = 0x95, // 'O' circumflex
|
|
DIALOG_CHAR_UPPER_O_UMLAUT = 0x96, // 'O' umlaut
|
|
DIALOG_CHAR_LOWER_I_CIRCUMFLEX = 0xA1, // 'i' circumflex
|
|
DIALOG_CHAR_LOWER_I_UMLAUT = 0xA2, // 'i' umlaut
|
|
DIALOG_CHAR_I_NO_DIA = 0xEB, // 'i' without diacritic
|
|
DIALOG_CHAR_DOUBLE_LOW_QUOTE = 0xF0, // German opening quotation mark
|
|
#endif
|
|
#if defined(VERSION_US) || defined(VERSION_EU)
|
|
DIALOG_CHAR_SLASH = 0xD0,
|
|
DIALOG_CHAR_MULTI_THE = 0xD1, // 'the'
|
|
DIALOG_CHAR_MULTI_YOU = 0xD2, // 'you'
|
|
#endif
|
|
DIALOG_CHAR_PERIOD = 0x6E,
|
|
DIALOG_CHAR_COMMA = 0x6F,
|
|
DIALOG_CHAR_SPACE = 0x9E,
|
|
DIALOG_CHAR_STAR_COUNT = 0xE0, // number of stars
|
|
DIALOG_CHAR_UMLAUT = 0xE9,
|
|
DIALOG_CHAR_DAKUTEN = 0xF0,
|
|
DIALOG_CHAR_PERIOD_OR_HANDAKUTEN = 0xF1,
|
|
DIALOG_CHAR_STAR_FILLED = 0xFA,
|
|
DIALOG_CHAR_STAR_OPEN = 0xFD,
|
|
DIALOG_CHAR_NEWLINE = 0xFE,
|
|
DIALOG_CHAR_TERMINATOR = 0xFF
|
|
};
|
|
|
|
extern s32 gDialogResponse;
|
|
extern u16 gDialogColorFadeTimer;
|
|
extern s8 gLastDialogLineNum;
|
|
extern s32 gDialogVariable;
|
|
extern u16 gDialogTextAlpha;
|
|
extern s16 gCutsceneMsgXOffset;
|
|
extern s16 gCutsceneMsgYOffset;
|
|
extern s8 gRedCoinsCollected;
|
|
|
|
void create_dl_identity_matrix(void);
|
|
void create_dl_translation_matrix(s8 pushOp, f32 x, f32 y, f32 z);
|
|
void create_dl_ortho_matrix(void);
|
|
void render_generic_char(u8 c);
|
|
void str_ascii_to_dialog(const char* string, u8* dialog, u16 length);
|
|
f32 get_generic_dialog_width(u8* dialog);
|
|
f32 get_generic_ascii_string_width(const char* ascii);
|
|
f32 get_generic_dialog_height(u8* dialog);
|
|
f32 get_generic_ascii_string_height(const char* ascii);
|
|
void print_generic_ascii_string(s16 x, s16 y, const char* ascii);
|
|
void print_generic_string(s16 x, s16 y, const u8 *str);
|
|
void print_hud_lut_string(s8 hudLUT, s16 x, s16 y, const u8 *str);
|
|
void print_menu_generic_string(s16 x, s16 y, const u8 *str);
|
|
void handle_menu_scrolling(s8 scrollDirection, s8 *currentIndex, s8 minIndex, s8 maxIndex);
|
|
#if defined(VERSION_US) || defined(VERSION_EU)
|
|
s16 get_str_x_pos_from_center(s16 centerPos, u8 *str, f32 scale);
|
|
#endif
|
|
#ifdef VERSION_JP
|
|
#define get_str_x_pos_from_center get_str_x_pos_from_center_scale
|
|
#endif
|
|
#if defined(VERSION_JP) || defined(VERSION_EU)
|
|
s16 get_str_x_pos_from_center_scale(s16 centerPos, u8 *str, f32 scale);
|
|
#endif
|
|
void print_hud_my_score_coins(s32 useCourseCoinScore, s8 fileNum, s8 courseNum, s16 x, s16 y);
|
|
void int_to_str(s32 num, u8 *dst);
|
|
s16 get_dialog_id(void);
|
|
void create_dialog_box(s16 dialog);
|
|
void create_dialog_box_with_var(s16 dialog, s32 dialogVar);
|
|
void create_dialog_inverted_box(s16 dialog);
|
|
void create_dialog_box_with_response(s16 dialog);
|
|
void reset_dialog_render_state(void);
|
|
void set_menu_mode(s16 mode);
|
|
void reset_cutscene_msg_fade(void);
|
|
void dl_rgba16_begin_cutscene_msg_fade(void);
|
|
void dl_rgba16_stop_cutscene_msg_fade(void);
|
|
void print_credits_str_ascii(s16 x, s16 y, const char *str);
|
|
void set_cutscene_message(s16 xOffset, s16 yOffset, s16 msgIndex, s16 msgDuration);
|
|
void do_cutscene_handler(void);
|
|
void render_hud_cannon_reticle(void);
|
|
void reset_red_coins_collected(void);
|
|
s16 render_menus_and_dialogs(void);
|
|
void create_dl_scale_matrix(s8 pushOp, f32 x, f32 y, f32 z);
|
|
|
|
#endif // INGAME_MENU_H
|