Files
2024-07-08 22:09:19 -04:00

139 lines
3.8 KiB
C

#ifndef M_CHOICE_H
#define M_CHOICE_H
#include "types.h"
#include "m_lib.h"
#ifdef __cplusplus
extern "C" {
#endif
#define mChoice_CHOICE_STRING_LEN 16
#define mChoice_SELECT_STR_NUM 607
typedef struct choice_s mChoice_c;
typedef struct choice_data_s mChoice_Data_c;
enum choice {
mChoice_CHOICE0,
mChoice_CHOICE1,
mChoice_CHOICE2,
mChoice_CHOICE3,
mChoice_CHOICE4,
mChoice_CHOICE5,
mChoice_CHOICE_NUM
};
enum {
mChoice_AUTOMOVE_STOPPED,
mChoice_AUTOMOVE_INCREMENT_WAIT,
mChoice_AUTOMOVE_INCREMENT,
mChoice_AUTOMOVE_DECREMENT_WAIT,
mChoice_AUTOMOVE_DECREMENT,
mChoice_AUTOMOVE_NUM
};
enum {
mChoice_MAIN_HIDE,
mChoice_MAIN_APPEAR,
mChoice_MAIN_NORMAL,
mChoice_MAIN_DISAPPEAR,
mChoice_MAIN_INDEX_NUM
};
struct choice_data_s {
u8 strings[mChoice_CHOICE_NUM][mChoice_CHOICE_STRING_LEN];
int string_lens[mChoice_CHOICE_NUM];
u8 determination_string[mChoice_CHOICE_STRING_LEN];
int determination_len;
int choice_num;
int selected_choice_idx;
};
struct choice_s {
/* Current XY position (centered) */
/* 0x00 */ f32 center_x;
/* 0x04 */ f32 center_y;
/* Initial XY position */
/* 0x08 */ f32 center_x_begin;
/* 0x0C */ f32 center_y_begin;
/* Target XY position */
/* 0x10 */ f32 center_x_target;
/* 0x14 */ f32 center_y_target;
/* Text settings */
/* 0x18 */ rgba_t text_color;
/* 0x1C */ f32 text_scale_x;
/* 0x20 */ f32 text_scale_y;
/* 0x24 */ f32 text_x;
/* 0x28 */ f32 text_y;
/* Window scaling XY */
/* 0x2C */ f32 scale_x;
/* 0x30 */ f32 scale_y;
/* Text related data */
/* 0x34 */ mChoice_Data_c data;
/* 0xC8 */ int selected_choice_idx;
/* 0xCC */ rgba_t selected_choice_text_color;
/* 0xD0 */ rgba_t background_color;
/* 0xD4 */ f32 _D4;
/* 0xD8 */ f32 _D8;
/* 0xDC */ f32 scale; // total choice window scaling percentage
/* 0xE0 */ int main_index;
/* 0xE4 */ int requested_main_index;
/* 0xE8 */ int window_visible_flag;
/* 0xEC */ int font_visible_flag;
/* 0xF0 */ int choice_automove_type;
/* 0xF4 */ f32 choice_automove_timer;
/* 0xF8 */ f32 timer;
/* 0xFC */ u8 no_b_flag; // can't press B to select last option
/* 0xFD */ u8 no_close_flag; // pressing B won't auto-cancel the choice selection?
};
extern void mChoice_Main(mChoice_c* choice, GAME* game);
extern void mChoice_Draw(mChoice_c* choice, GAME* game, int mode);
extern void mChoice_aram_init();
extern void mChoice_ct(mChoice_c* choice, GAME* game);
extern void mChoice_dt(mChoice_c* choice, GAME* game);
extern mChoice_c* mChoice_Get_base_window_p();
extern void mChoice_Change_request_main_index(mChoice_c* choice, int request_main_index);
extern int mChoice_check_main_index(mChoice_c* choice);
extern int mChoice_check_main_normal(mChoice_c* choice);
extern void mChoice_Set_choice_data(mChoice_c* choice, u8* str0, int str0_len, u8* str1, int str1_len, u8* str2,
int str2_len, u8* str3, int str3_len, u8* str4, int str4_len, u8* str5,
int str5_len);
extern int mChoice_Get_ChoseNum(mChoice_c* choice);
extern void mChoice_Clear_ChoseNum(mChoice_c* choice);
extern void mChoice_Load_ChoseStringFromRom(mChoice_c* choice, u8* str, int str_no, ACTOR* actor);
extern void mChoice_no_b_set(mChoice_c* choice);
extern void mChoice_no_b_close_set(mChoice_c* choice);
/* Macros */
#define mChoice_CHECK_MAIN_NORMAL() mChoice_check_main_normal(mChoice_Get_base_window_p())
#define mChoice_GET_CHOSENUM() mChoice_Get_ChoseNum(mChoice_Get_base_window_p())
#define mChoice_CLEAR_CHOSENUM() mChoice_Clear_ChoseNum(mChoice_Get_base_window_p())
#define mChoice_NO_B_SET() mChoice_no_b_set(mChoice_Get_base_window_p())
#define mChoice_NO_B_CLOSE_SET() mChoice_no_b_close_set(mChoice_Get_base_window_p())
#ifdef __cplusplus
}
#endif
#endif