Files
ac-decomp/src/m_choice.c
T
2023-12-24 10:58:59 -05:00

122 lines
3.6 KiB
C

#include "m_choice.h"
#include "audio.h"
#include "jsyswrap.h"
#include "libultra/libultra.h"
#include "m_common_data.h"
#include "m_font.h"
#include "m_msg.h"
#include "sys_matrix.h"
typedef void (*mChoice_MAIN_PROC)(mChoice_c*, GAME*);
static void mChoice_MainSetup(mChoice_c* choice, GAME* game);
static u32 Choice_table_rom_start = 0;
static u32 Choice_rom_start = 0;
#ifdef MUST_MATCH
/* Force assetrip to detect these assets. They're used in a .c_inc file. */
static u8 unused_con_waku_swaku3_tex[] = {
#ifndef __INTELLISENSE__
#include "assets/con_waku_swaku3_tex.inc"
#endif
};
static Vtx unused_con_sentaku2_v[] = {
#ifndef __INTELLISENSE__
#include "assets/con_sentaku2_v.inc"
#endif
};
#endif
static void mChoice_MainSetup_Hide(mChoice_c*, GAME*);
static void mChoice_MainSetup_Appear(mChoice_c*, GAME*);
static void mChoice_MainSetup_Normal(mChoice_c*, GAME*);
static void mChoice_MainSetup_Disappear(mChoice_c*, GAME*);
static void mChoice_init(mChoice_c* choice, GAME* game);
static void mChoice_check_ct(mChoice_c* choice);
static void mChoice_SetMatrix(mChoice_c* choice, GAME* game, int type);
static void mChoice_SetMatrixDisplay(mChoice_c* choice, GAME* game, int type);
static void mChoice_UnSetMatrix();
static void mChoice_UnSetMatrixDisplay(GAME* game, int type);
static void mChoice_DrawWindowBody(mChoice_c* choice, GAME* game, int type);
static void mChoice_DrawFont(mChoice_c* choice, GAME* game, int type);
static void mChoice_Main_Hide(mChoice_c*, GAME*);
static void mChoice_Main_Appear(mChoice_c*, GAME*);
static void mChoice_Main_Normal(mChoice_c*, GAME*);
static void mChoice_Main_Disappear(mChoice_c*, GAME*);
static void mChoice_MainSetup(mChoice_c* choice, GAME* game) {
static mChoice_MAIN_PROC proc[mChoice_MAIN_INDEX_NUM] = {
&mChoice_MainSetup_Hide,
&mChoice_MainSetup_Appear,
&mChoice_MainSetup_Normal,
&mChoice_MainSetup_Disappear
};
int index = choice->requested_main_index;
/* This is necessary lol */
if (index < 0) {
return;
}
else if (index < 0 || index >= mChoice_MAIN_INDEX_NUM || proc[index] == NULL) {
return;
}
(*proc[index])(choice, game);
}
extern void mChoice_Main(mChoice_c* choice, GAME* game) {
static mChoice_MAIN_PROC proc[mChoice_MAIN_INDEX_NUM] = {
&mChoice_Main_Hide,
&mChoice_Main_Appear,
&mChoice_Main_Normal,
&mChoice_Main_Disappear
};
int index = choice->main_index;
if (index < 0 || index >= mChoice_MAIN_INDEX_NUM || proc[index] == NULL) {
return;
}
(*proc[index])(choice, game);
}
extern void mChoice_Draw(mChoice_c* choice, GAME* game, int mode) {
if (choice->window_visible_flag) {
mFont_SetMatrix(game->graph, mode);
mChoice_SetMatrix(choice, game, mode);
mChoice_SetMatrixDisplay(choice, game, mode);
mChoice_DrawWindowBody(choice, game, mode);
mChoice_UnSetMatrixDisplay(game, mode);
mChoice_DrawFont(choice, game, mode);
mChoice_UnSetMatrix();
mFont_UnSetMatrix(game->graph, mode);
}
}
extern void mChoice_aram_init() {
Choice_table_rom_start = JW_GetAramAddress(RESOURCE_SELECT_TABLE);
Choice_rom_start = JW_GetAramAddress(RESOURCE_SELECT);
}
extern void mChoice_ct(mChoice_c* choice, GAME* game) {
mChoice_check_ct(choice);
mChoice_init(choice, game);
}
extern void mChoice_dt(mChoice_c* choice, GAME* game) { }
#include "../src/m_choice_main.c_inc"
#include "../src/m_choice_sound.c_inc"
#include "../src/m_choice_main_hide.c_inc"
#include "../src/m_choice_main_appear.c_inc"
#include "../src/m_choice_main_normal.c_inc"
#include "../src/m_choice_main_disappear.c_inc"
#include "../src/m_choice_draw.c_inc"