This commit is contained in:
AltoXorg 2024-11-09 11:19:32 +08:00 committed by GitHub
parent 355f5b3a76
commit c356a0e330
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
121 changed files with 11804 additions and 17182 deletions

View File

@ -2092,7 +2092,8 @@ typedef struct SaveGlobals {
/* 0x34 */ s32 crc2;
/* 0x38 */ s32 useMonoSound;
/* 0x3C */ u32 lastFileSelected;
/* 0x40 */ s8 reserved[64]; // unused
/* 0x40 */ u32 language; // only used for PAL
/* 0x44 */ s8 reserved[60]; // unused
} SaveGlobals; // size = 0x80
typedef struct SaveMetadata {
@ -2253,7 +2254,7 @@ typedef struct {
#if VERSION_JP
#define DISPLAYCONTEXT_GFX_COUNT 0x2000
#elif VERSION_IQUE
#elif VERSION_IQUE || VERSION_PAL
#define DISPLAYCONTEXT_GFX_COUNT 0x2200
#else
#define DISPLAYCONTEXT_GFX_COUNT 0x2080
@ -2265,10 +2266,6 @@ typedef struct {
/* 0x00030 */ Mtx camPerspMatrix[8]; // could only be length 4, unsure
/* 0x00230 */ Gfx mainGfx[DISPLAYCONTEXT_GFX_COUNT];
/* 0x10630 */ Gfx backgroundGfx[0x200]; // used by gfx_task_background
#if VERSION_PAL
// TODO: find where this space belongs to
s32 pad[0x300];
#endif
/* 0x11630 */ Mtx matrixStack[0x200];
} DisplayContext; // size = 0x19630

View File

@ -5352,31 +5352,43 @@ enum FileMenuMessages {
/* 14 */ FILE_MESSAGE_YES, // Yes[End]
/* 15 */ FILE_MESSAGE_NO, // No[End]
/* 16 */ FILE_MESSAGE_DELETE, // Delete[End]
#if !VERSION_PAL
/* 17 */ FILE_MESSAGE_OVERRIDE_TO_NEW_DATA, // Override to New Data[End]
/* 18 */ FILE_MESSAGE_SAVE_OK, // Save OK?[End]
#endif
/* 19 */ FILE_MESSAGE_FILE_NAME_IS, // File name is :[End]
/* 20 */ FILE_MESSAGE_PERIOD_20, // .[End]
/* 21 */ FILE_MESSAGE_OK, // OK?[End]
/* 22 */ FILE_MESSAGE_FILE_22, // File[End]
#if VERSION_PAL
FILE_MESSAGE_PAL_FILE_20, // File[End] / Dat.[End] / Fich.[End]
#endif
/* 23 */ FILE_MESSAGE_WILL_BE_DELETED, // will be deleted.[End]
/* 24 */ FILE_MESSAGE_OK_TO_COPY_TO_THIS_FILE, // OK to copy to this file?[End]
/* 25 */ FILE_MESSAGE_START_GAME_WITH, // Start game with[End]
#if VERSION_PAL
FILE_MESSAGE_PAL_QUESTION_24, // ?[End] / beginnen?[End]
#endif
/* 26 */ FILE_MESSAGE_FILE_26, // File[End]
/* 27 */ FILE_MESSAGE_HAS_BEEN_DELETED, // has been deleted.[End]
/* 28 */ FILE_MESSAGE_28, // [End]
/* 29 */ FILE_MESSAGE_COPY_FROM, // Copy from[End]
/* 30 */ FILE_MESSAGE_TO, // to[End]
#if VERSION_PAL
FILE_MESSAGE_PAL_PERIOD_30, // .[End] / kopieren.[End]
#endif
/* 31 */ FILE_MESSAGE_HAS_BEEN_CREATED, // has been created.[End]
#if VERSION_PAL
// TODO: determine where these new entries should be placed
FILE_MESSAGE_PAL_UNK1,
FILE_MESSAGE_PAL_UNK2,
FILE_MESSAGE_PAL_ARTICLE, // [End] / Le[End] / El[End]
#endif
/* 32 */ FILE_MESSAGE_ENTER_A_FILE_NAME, // Enter a file name![End]
/* 33 */ FILE_MESSAGE_QUESTION, // ?[End]
/* 34 */ FILE_MESSAGE_PERIOD_34, // .[End]
#if VERSION_PAL
FILE_MESSAGE_PAL_UNK3,
FILE_MESSAGE_PAL_FILENUM_1,
FILE_MESSAGE_PAL_FILENUM_2,
FILE_MESSAGE_PAL_FILENUM_3,
FILE_MESSAGE_PAL_FILENUM_4,
#endif
};

View File

@ -531,9 +531,9 @@ typedef s32 Difficulty2D[AC_DIFFICULTY_LEN][2];
#endif
#if VERSION_PAL
#define DT (50.0f/60.0f)
#define DT (50.0/60.0)
#else
#define DT (1.0f)
#define DT (1.0)
#endif
#define DMA_COPY_SEGMENT(segment) dma_copy(segment##_ROM_START, segment##_ROM_END, segment##_VRAM)

View File

@ -680,6 +680,8 @@ extern u32 nuGfxDisplay; /* Display on/off flag */
extern u32 nuGfxCfbCounter; /* For frame buffer swapping */
//extern OSMesgQueue nuGfxMesgQ;
extern OSThread nuGfxThread; /* graphic thread */
extern s32 nuGfxUcodeFifoSize;
extern u64* nuGfxUcodeFifoPtr;
/*--------------------------------------*/
/* controller Manager variables */
@ -791,6 +793,7 @@ extern void nuGfxPreNMIFuncSet(NUGfxPreNMIFunc func);
extern void nuGfxSwapCfbFuncSet(NUGfxSwapCfbFunc func);
extern void nuGfxSetCfb(u16** framebuf, u32 framebufnum);
extern void nuGfxSwapCfb(void* framebuffer);
extern void nuGfxSetUcodeFifo(void* fifoBufPtr, s32 size);
extern void nuGfxTaskEndFuncSet(NUGfxTaskEndFunc func);
extern void nuGfxTaskAllEndWait(void);

View File

@ -142,7 +142,7 @@ def main(args):
sizes, vrams = get_func_info()
total_size = sum(sizes.values())
# TODO hack for now since non-us roms aren't mapped out
if args.version not in ("us", "ique"):
if args.version not in ("us", "ique", "pal"):
total_size = 3718612
all_funcs = set(sizes.keys())

View File

@ -343,10 +343,6 @@ void func_800F16CC(void) {
gPopupState = POPUP_STATE_20;
}
#if VERSION_PAL
s32 popup_menu_update(void);
INCLUDE_ASM(s32, "8a860_len_3f30", popup_menu_update);
#else
s32 popup_menu_update(void) {
s32 posX;
s32 posY;
@ -359,10 +355,11 @@ s32 popup_menu_update(void) {
s32 one;
s32 i;
s32 var_s6 = 0;
s32 var_s5 = 0;
s32 var_s6 = 0; // maybe 6 before 5
s32 msgWidth;
s32 width2;
s32 height2;
s32 posX2;
switch (gPopupState) {
@ -371,7 +368,6 @@ s32 popup_menu_update(void) {
D_8010D67C = 32;
D_8010D67E = 72;
D_8010D680 = 32;
PopupMenu_StarPieceCounterPosX = 32;
#else
D_8010D67C = 20;
D_8010D67E = 72;
@ -380,9 +376,7 @@ s32 popup_menu_update(void) {
D_8010D682 = 186;
D_8010D684 = 16;
D_8010D686 = 88;
#if !VERSION_JP
PopupMenu_StarPieceCounterPosX = 32;
#endif
PopupMenu_StarPieceCounterPosY = 164;
if (PopupNotBattle) {
#if VERSION_JP
@ -601,12 +595,14 @@ s32 popup_menu_update(void) {
set_window_properties(WIN_POPUP_CONTENT, posX, posY, var_s6, (PopupMenu_DisplayedEntryCount * LINE_HEIGHT) + 26,
WINDOW_PRIORITY_20, popup_menu_draw_menu_contents, NULL, -1);
if (gPopupMenu->unk_338 == 0) {
set_window_properties(WIN_POPUP_TITLE_A, posX2, -6, width2, 16, WINDOW_PRIORITY_21,
posX = posX2; //! required to match
set_window_properties(WIN_POPUP_TITLE_A, posX, -6, width2, 16, WINDOW_PRIORITY_21,
popup_menu_draw_title_contents, NULL, WIN_POPUP_CONTENT);
set_window_update(WIN_POPUP_TITLE_A, 1);
set_window_update(WIN_POPUP_TITLE_B, 2);
} else {
set_window_properties(WIN_POPUP_TITLE_B, posX2, -6, width2, 16, WINDOW_PRIORITY_21,
posX = posX2; //! required to match
set_window_properties(WIN_POPUP_TITLE_B, posX, -6, width2, 16, WINDOW_PRIORITY_21,
popup_menu_draw_title_contents, NULL, WIN_POPUP_CONTENT);
set_window_update(WIN_POPUP_TITLE_A, 2);
set_window_update(WIN_POPUP_TITLE_B, 1);
@ -804,11 +800,11 @@ s32 popup_menu_update(void) {
posY = D_8010D686;
#if VERSION_PAL
height = 32;
height2 = 32;
if (get_msg_lines(gPopupMenu->unk_33C) == 2) {
height = 40;
height2 = 40;
}
set_window_properties(WIN_POPUP_PROMPT, posX, posY, gPopupMenu->unk_340 + 144, height, WINDOW_PRIORITY_20, func_800F4944, NULL, -1);
set_window_properties(WIN_POPUP_PROMPT, posX, posY, gPopupMenu->unk_340 + 144, height2, WINDOW_PRIORITY_20, func_800F4944, NULL, -1);
#else
switch (gPopupMenu->popupType) {
#if VERSION_JP
@ -1388,7 +1384,6 @@ s32 popup_menu_update(void) {
gPopupMenu->result = POPUP_RESULT_CHOOSING;
return 0;
}
#endif
void popup_menu_draw_menu_contents(s32* userData, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening) {
s32 x, y;

View File

@ -39,10 +39,18 @@ typedef u8* WaveData;
#define ALIGN16_(val) (((val) + 0xF) & 0xFFF0)
#define AU_FILE_RELATIVE(base,offset) ((void*)((s32)(offset) + (s32)(base)))
#define AUDIO_HEAP_SIZE 0x56000
// NU_AU_AUDIO_SAMPLES ?
#define AUDIO_SAMPLES 184
#if VERSION_PAL
#define AUDIO_FRAMES_PER_SECOND 50
#define AUDIO_HEAP_SIZE 0x5B000
#define AUDIO_MAX_SAMPLES (AUDIO_SAMPLES * 2)
#define AUDIO_COMMAND_LIST_BUFFER_SIZE 0x5558
#else
#define AUDIO_FRAMES_PER_SECOND 60
#define AUDIO_HEAP_SIZE 0x56000
#define AUDIO_MAX_SAMPLES AUDIO_SAMPLES
#define AUDIO_COMMAND_LIST_BUFFER_SIZE 0x4000
#endif
#define ADPCMFBYTES 9

View File

@ -51,13 +51,13 @@ void create_audio_system(void) {
config.num_pvoice = 24;
config.num_bus = 4;
outputRate = osAiSetFrequency(32000);
frameSize = (nusched.retraceCount * outputRate + 59) / 60;
frameSize = (nusched.retraceCount * outputRate + (AUDIO_FRAMES_PER_SECOND - 1)) / AUDIO_FRAMES_PER_SECOND;
config.outputRate = outputRate;
config.unk_0C = 0;
config.heap = &nuAuHeap;
config.dmaNew = nuAuDmaNew;
AlFrameSize = ((frameSize / AUDIO_SAMPLES) + 1) * AUDIO_SAMPLES;
AlMinFrameSize = AlFrameSize - AUDIO_SAMPLES;
AlMinFrameSize = AlFrameSize - AUDIO_MAX_SAMPLES;
for (i = 0; i < ARRAY_COUNT(AlCmdListBuffers); i++) {
AlCmdListBuffers[i] = alHeapAlloc(config.heap, 1, AUDIO_COMMAND_LIST_BUFFER_SIZE);
@ -166,7 +166,7 @@ void nuAuMgr(void* arg) {
cmdListBuf = AlCmdListBuffers[cmdListIndex];
bufferPtr = D_800A3628[bufferIndex];
}
if (sampleSize < AUDIO_SAMPLES || cond) {
if (sampleSize < AUDIO_MAX_SAMPLES || cond) {
samples = AlFrameSize;
cond = FALSE;
} else {

View File

@ -19,6 +19,8 @@ extern f32 AlTuneScaling[];
#define SBN_ROM_OFFSET (s32) audio_ROM_START
#elif VERSION_JP
#define SBN_ROM_OFFSET 0xFC0000
#elif VERSION_PAL
#define SBN_ROM_OFFSET 0x13A0000
#else
#define SBN_ROM_OFFSET 0xF00000
#endif

View File

@ -263,6 +263,7 @@ void btl_update(void) {
s32 cond;
if (battleStatus->inputBitmask != -1) {
#if !VERSION_PAL
if ((battleStatus->flags1 & BS_FLAGS1_PARTNER_ACTING) && gGameStatusPtr->multiplayerEnabled) {
s32 inputBitmask = battleStatus->inputBitmask;
@ -272,6 +273,7 @@ void btl_update(void) {
battleStatus->stickX = gGameStatusPtr->stickX[1];
battleStatus->stickY = gGameStatusPtr->stickY[1];
} else {
#endif
s32 inputBitmask2 = battleStatus->inputBitmask;
battleStatus->curButtonsDown = gGameStatusPtr->curButtons[0] & inputBitmask2;
@ -279,7 +281,9 @@ void btl_update(void) {
battleStatus->curButtonsHeld = gGameStatusPtr->heldButtons[0] & inputBitmask2;
battleStatus->stickX = gGameStatusPtr->stickX[0];
battleStatus->stickY = gGameStatusPtr->stickY[0];
#if !VERSION_PAL
}
#endif
}
get_stick_input_radial(&outAngle, &outMagnitude);

View File

@ -87,6 +87,7 @@ void create_target_list(Actor* actor, b32 targetHomePos) {
s32 sampleCol;
s32 sampleRow;
s32 removeTarget;
s8 *targetIndexIt;
// a target has been manually selected
if (battleStatus->curTargetListFlags & TARGET_FLAG_OVERRIDE) {
@ -247,9 +248,14 @@ void create_target_list(Actor* actor, b32 targetHomePos) {
// ------------------------------------------------------------------------
// remove targets based on simple criteria (coarse pass)
// TODO find someway into removing this do-while loop hack
#if VERSION_PAL
actor->selectedTargetIndex = 0;
#else
do {
actor->selectedTargetIndex = 0;
} while (0);
#endif
actor->targetListLength = numTargets;
/// @bug this should be % 4
@ -494,11 +500,23 @@ void create_target_list(Actor* actor, b32 targetHomePos) {
targetDataList = actor->targetData;
#if VERSION_PAL
targetIndexList = actor->targetIndexList;
numTargets = actor->targetListLength;
i = ARRAY_COUNT(actor->targetIndexList) - 1;
targetIndexIt = &actor->targetIndexList[ARRAY_COUNT(actor->targetIndexList) - 1];
while (i >= 0) {
*targetIndexIt-- = i--;
}
#else
numTargets = actor->targetListLength;
targetIndexList = actor->targetIndexList;
for (i = 0; i < numTargets; i++) {
targetIndexList[i] = i;
}
#endif
// sort targets by priority
for (i = 0; i < numTargets - 1; i++) {
@ -3156,6 +3174,7 @@ EvtScript EVS_BattleRumble_PlayerMin = {
End
};
#if !VERSION_PAL
EvtScript EVS_BattleRumble_PlayerLight = {
Call(N(StartRumbleWithParams), 150, 20)
Return
@ -3179,6 +3198,7 @@ EvtScript EVS_BattleRumble_PlayerMax = {
Return
End
};
#endif
void start_rumble_type(u32 type) {
if (bCurRumbleScript != 0) {

View File

@ -14,8 +14,8 @@ enum {
// how much to subtract from the meter per frame after overfilling it
#define METER_DRAIN_RATE 250
s32 N(DrainRateTable)[] = { 300, 300, 265, 220, 175, 175 };
s32 N(FillRateTable)[] = { 300, 300, 265, 220, 175, 175 };
s32 N(DrainRateTable)[] = { 300 / DT, 300 / DT, 265 / DT, 220 / DT, 175 / DT, 175 / DT };
s32 N(FillRateTable)[] = { 300 / DT, 300 / DT, 265 / DT, 220 / DT, 175 / DT, 175 / DT };
// bug: the sixth entry is not accessible due to the way idx is calculated in these macros
#define GET_DRAIN_RATE(pct) (N(DrainRateTable)[((pct) / (ONE_PCT_MASH / 5))])

View File

@ -369,7 +369,7 @@ void N(update)(void) {
&& acs->threeChances.time >= -5
) {
s32 (*difficultyVec)[2] = (s32 (*)[2])battleStatus->actionCmdDifficultyTable;
window = difficultyVec[acs->difficulty][0] + difficultyVec[acs->difficulty][1] + ANTI_MASH_TIME;
window = difficultyVec[acs->difficulty][0] + difficultyVec[acs->difficulty][1] + (s32)(ANTI_MASH_TIME * DT);
pos = battleStatus->inputBufferPos;
pos -= window;
if (pos < 0) {
@ -452,7 +452,7 @@ void N(update)(void) {
&& acs->threeChances.time >= -5
) {
s32 (*difficultyVec)[2] = (s32 (*)[2])battleStatus->actionCmdDifficultyTable;
window = difficultyVec[acs->difficulty][0] + difficultyVec[acs->difficulty][1] + ANTI_MASH_TIME - 1;
window = difficultyVec[acs->difficulty][0] + difficultyVec[acs->difficulty][1] + (s32)((ANTI_MASH_TIME - 1) * DT);
if (window < 6) {
window = 6;
}
@ -540,7 +540,7 @@ void N(update)(void) {
&& acs->threeChances.time >= -5
) {
s32 (*difficultyVec)[2] = (s32 (*)[2])battleStatus->actionCmdDifficultyTable;
window = difficultyVec[acs->difficulty][0] + difficultyVec[acs->difficulty][1] + ANTI_MASH_TIME - 2;
window = difficultyVec[acs->difficulty][0] + difficultyVec[acs->difficulty][1] + (s32)((ANTI_MASH_TIME - 2) * DT);
if (window < 6) {
window = 6;
}

View File

@ -111,6 +111,32 @@ extern HudScript HES_POWCostReducedTwice;
extern HudScript HES_StatusFlower;
extern HudScript HES_NotEnoughFP;
extern HudScript HES_NotEnoughPOW;
#if VERSION_PAL
extern HudScript HES_FPCost_de;
extern HudScript HES_FPCost_fr;
extern HudScript HES_FPCost_es;
extern HudScript HES_FPCostReduced_de;
extern HudScript HES_FPCostReduced_fr;
extern HudScript HES_FPCostReduced_es;
extern HudScript HES_FPCostReducedTwice_de;
extern HudScript HES_FPCostReducedTwice_fr;
extern HudScript HES_FPCostReducedTwice_es;
extern HudScript HES_POWCost_de;
extern HudScript HES_POWCost_fr;
extern HudScript HES_POWCost_es;
extern HudScript HES_POWCostReduced_de;
extern HudScript HES_POWCostReduced_fr;
extern HudScript HES_POWCostReduced_es;
extern HudScript HES_POWCostReducedTwice_de;
extern HudScript HES_POWCostReducedTwice_fr;
extern HudScript HES_POWCostReducedTwice_es;
extern HudScript HES_NotEnoughFP_de;
extern HudScript HES_NotEnoughFP_fr;
extern HudScript HES_NotEnoughFP_es;
extern HudScript HES_NotEnoughPOW_de;
extern HudScript HES_NotEnoughPOW_fr;
extern HudScript HES_NotEnoughPOW_es;
#endif
extern HudScript HES_ProjectorBeam;
extern HudScript HES_ProjectorReel;
extern HudScript HES_ProjectorSpot;
@ -127,6 +153,38 @@ s16 D_802AB340[] = { 28, 40 };
s16 D_802AB344[] = { 0, -2 };
#endif
#if VERSION_PAL
u8 D_PAL_802AB4C8[] = { 144, 158, 148, 144 };
u8 D_PAL_802AB4CC[] = { 144, 160, 160, 160 };
u8 D_PAL_802AB4D0[] = { 0, 20, 20, 20 };
u8 D_PAL_802AB4D4[] = { 0, 16, 16, 16 };
u8 D_PAL_802AB4D8[] = { 8, 24, 8, 16 };
u8 D_PAL_802AB4DC[] = { 100, 81, 116, 98 };
u8 D_PAL_802AB4E0[] = { 5, 16, 8, 16 };
u8 D_PAL_802AB4E4[] = { 156, 158, 158, 158 };
u8 D_PAL_802AB4E8[] = { 4, 6, 6, 6 };
u8 D_PAL_802AB4EC[] = { 18, 14, 18, 14 };
u8 D_PAL_802AB4F0[] = { 89, 101, 90, 101 };
u8 D_PAL_802AB4F4[] = { 16, 10, 14, 10 };
u8 D_PAL_802AB4F8[] = { 0, 2, 2, 2 };
HudScript* D_PAL_802AB4FC[][4] = {
{ &HES_FPCost, &HES_FPCost_de, &HES_FPCost_fr, &HES_FPCost_es },
{ &HES_FPCostReduced, &HES_FPCostReduced_de, &HES_FPCostReduced_fr, &HES_FPCostReduced_es },
{ &HES_FPCostReducedTwice, &HES_FPCostReducedTwice_de, &HES_FPCostReducedTwice_fr, &HES_FPCostReducedTwice_es },
};
HudScript* D_PAL_802AB52C[] = { &HES_NotEnoughFP, &HES_NotEnoughFP_de, &HES_NotEnoughFP_fr, &HES_NotEnoughFP_es };
HudScript* D_PAL_802AB53C[][4] = {
{ &HES_POWCost, &HES_POWCost_de, &HES_POWCost_fr, &HES_POWCost_es },
{ &HES_POWCostReduced, &HES_POWCostReduced_de, &HES_POWCostReduced_fr, &HES_POWCostReduced_es },
{ &HES_POWCostReducedTwice, &HES_POWCostReducedTwice_de, &HES_POWCostReducedTwice_fr, &HES_POWCostReducedTwice_es },
};
HudScript* D_PAL_802AB56C[] = { &HES_NotEnoughPOW, &HES_NotEnoughPOW_de, &HES_NotEnoughPOW_fr, &HES_NotEnoughPOW_es };
#endif
IconHudScriptPair battle_menu_JumpHudScripts[] = {
{ &HES_MenuBoots1Disabled, &HES_MenuBoots1Disabled },
{ &HES_MenuBoots1, &HES_MenuBoots1Disabled },
@ -306,7 +364,9 @@ s32 PartnerNameMessages[] = {
MSG_Menus_Party_Goombaria,
MSG_Menus_Party_Twink,
MSG_Menus_Party_Peach,
#if !VERSION_PAL
MSG_NONE
#endif
};
BSS s32 D_802ACC60;
@ -323,7 +383,7 @@ BSS s8 D_802AD004;
BSS s16 D_802AD006;
BSS s16 BattleMenuAlpha;
BSS s16 D_802AD00A;
#if !VERSION_IQUE
#if !VERSION_IQUE && !VERSION_PAL
BSS s16 D_802AD00C; // unused?
#endif
BSS s32 D_802AD010[6];
@ -551,25 +611,38 @@ s32 btl_main_menu_update(void) {
for (i = 0; i < BattleMenu_NumOptions; i++) {
D_802AD010[i] = hid = hud_element_create(BattleMenu_HudScripts[i]);
hud_element_set_render_depth(hid, 5);
#if VERSION_PAL
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80 | HUD_ELEMENT_FLAG_FILTER_TEX | HUD_ELEMENT_FLAG_DISABLED);
#else
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_DISABLED);
#endif
hud_element_set_scale(hid, 0.75f);
D_802AD028[i] = hid = hud_element_create(&HES_ProjectorSpot);
hud_element_create_transform_B(hid);
hud_element_set_render_depth(hid, 10);
#if VERSION_PAL
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80 | HUD_ELEMENT_FLAG_FILTER_TEX | HUD_ELEMENT_FLAG_DISABLED);
#else
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_DISABLED);
#endif
}
D_802AD040 = hid = hud_element_create(&HES_ProjectorSpot);
hud_element_create_transform_B(hid);
hud_element_set_render_depth(hid, 7);
#if VERSION_PAL
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80 | HUD_ELEMENT_FLAG_FILTER_TEX | HUD_ELEMENT_FLAG_DISABLED);
#else
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_DISABLED);
#endif
D_802AD044 = hid = hud_element_create(&HES_ProjectorReel);
hud_element_create_transform_B(hid);
@ -599,9 +672,13 @@ s32 btl_main_menu_update(void) {
hud_element_set_transform_rotation_pivot(hid, 0, 0);
hud_element_set_transform_rotation(hid, 0.0f, 0.0f, -45.0f);
hud_element_set_alpha(hid, 200);
#if VERSION_PAL
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80 | HUD_ELEMENT_FLAG_FILTER_TEX | HUD_ELEMENT_FLAG_DISABLED);
#else
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_FILTER_TEX);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_DISABLED);
#endif
D_802AD05C = hid = hud_element_create(&HES_SwapBackground);
hud_element_set_render_depth(hid, 0);
@ -1083,23 +1160,38 @@ void func_802A2C58(void) {
battle_menu_moveState = BTL_SUBMENU_MOVES_STATE_UNK_1E;
}
#if VERSION_JP
#if VERSION_PAL
#define MOVES_OPTIONS_W D_PAL_802AB4E4[gCurrentLanguage]
#define MOVES_TITLE_X D_PAL_802AB4EC[gCurrentLanguage]
#define MOVES_TITLE_W D_PAL_802AB4F0[gCurrentLanguage]
#define MOVES_ICON_X 120 + D_PAL_802AB4F8[gCurrentLanguage]
#define STAR_SPIRITS_OPTIONS_W D_PAL_802AB4CC[gCurrentLanguage]
#define STAR_SPIRITS_TITLE_X D_PAL_802AB4D8[gCurrentLanguage]
#define STAR_SPIRITS_TITLE_W D_PAL_802AB4DC[gCurrentLanguage]
#define STAR_SPIRITS_ICON_X 110 + D_PAL_802AB4D4[gCurrentLanguage]
#define POS_X 20
#define WIDTH_3 280
#elif VERSION_JP
#define MOVES_OPTIONS_W 150
#define MOVES_TITLE_X 10
#define MOVES_TITLE_W 80
#define MOVES_ICON_X 104
#define STAR_SPIRITS_OPTIONS_W 144
#define STAR_SPIRITS_TITLE_X 10
#define STAR_SPIRITS_TITLE_W 80
#define STAR_SPIRITS_ICON_X 104
#define POS_X 32
#define OFFSET_X_1 10
#define OFFSET_X_2 104
#define OFFSET_X_3 104
#define MOVE_X 32
#define WIDTH_1 80
#define WIDTH_2 80
#define WIDTH_3 242
#else
#define MOVES_OPTIONS_W 150
#define MOVES_TITLE_X 16
#define MOVES_TITLE_W 90
#define MOVES_ICON_X 114
#define STAR_SPIRITS_OPTIONS_W 144
#define STAR_SPIRITS_TITLE_X 10
#define STAR_SPIRITS_TITLE_W 100
#define STAR_SPIRITS_ICON_X 110
#define POS_X 20
#define OFFSET_X_1 16
#define OFFSET_X_2 114
#define OFFSET_X_3 110
#define MOVE_X 20
#define WIDTH_1 90
#define WIDTH_2 100
#define WIDTH_3 280
#endif
@ -1190,6 +1282,21 @@ s32 btl_submenu_moves_update(void) {
for (i = 0; i < BattleMenu_Moves_OptionCount; i++) {
if (!BattleMenu_UsingSpiritsSubmenu) {
#if VERSION_PAL
switch (battle_menu_moveOptionDisplayCostReductionColors[i]) {
case 0:
hid = 0;
break;
case 1:
hid = 1;
break;
default:
hid = 2;
break;
}
hid = hud_element_create(D_PAL_802AB4FC[hid][gCurrentLanguage]);
BattleMenu_Moves_OptionCostUnitIDs[i] = hid;
#else
switch (battle_menu_moveOptionDisplayCostReductionColors[i]) {
case 0:
hid = hud_element_create(&HES_FPCost);
@ -1204,7 +1311,23 @@ s32 btl_submenu_moves_update(void) {
BattleMenu_Moves_OptionCostUnitIDs[i] = hid;
break;
}
#endif
} else {
#if VERSION_PAL
switch (battle_menu_moveOptionDisplayCostReductionColors[i]) {
case 0:
hid = 0;
break;
case 1:
hid = 1;
break;
default:
hid = 2;
break;
}
hid = hud_element_create(D_PAL_802AB53C[hid][gCurrentLanguage]);
BattleMenu_Moves_OptionCostUnitIDs[i] = hid;
#else
switch (battle_menu_moveOptionDisplayCostReductionColors[i]) {
case 0:
hid = hud_element_create(&HES_POWCost);
@ -1219,6 +1342,7 @@ s32 btl_submenu_moves_update(void) {
BattleMenu_Moves_OptionCostUnitIDs[i] = hid;
break;
}
#endif
}
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(hid, BattleMenu_Moves_PosX + 56, BattleMenu_Moves_PosY);
@ -1233,22 +1357,22 @@ s32 btl_submenu_moves_update(void) {
#endif
if (!BattleMenu_UsingSpiritsSubmenu) {
#if !VERSION_JP
set_window_properties(WIN_BTL_MOVES_MENU, moveX, moveY, 150, (D_802AD10E * 13) + 28, 0, btl_menu_moves_draw_content, NULL, -1);
set_window_properties(WIN_BTL_MOVES_MENU, moveX, moveY, MOVES_OPTIONS_W, (D_802AD10E * 13) + 28, 0, btl_menu_moves_draw_content, NULL, -1);
#endif
set_window_properties(WIN_BTL_MOVES_TITLE, moveX + OFFSET_X_1, moveY - 6, WIDTH_1, 16, 1, btl_menu_moves_show_title, NULL, -1);
set_window_properties(WIN_BTL_MOVES_ICON, moveX + OFFSET_X_2, moveY - 12, 32, 32, 1, btl_menu_moves_show_icon, NULL, -1);
set_window_properties(WIN_BTL_MOVES_TITLE, moveX + MOVES_TITLE_X, moveY - 6, MOVES_TITLE_W, 16, 1, btl_menu_moves_show_title, NULL, -1);
set_window_properties(WIN_BTL_MOVES_ICON, moveX + MOVES_ICON_X, moveY - 12, 32, 32, 1, btl_menu_moves_show_icon, NULL, -1);
} else {
s16 new_var;
#if !VERSION_JP
set_window_properties(WIN_BTL_MOVES_MENU, moveX, moveY, 144, (D_802AD10E * 13) + 28, 0, btl_menu_moves_draw_content, NULL, -1);
set_window_properties(WIN_BTL_MOVES_MENU, moveX, moveY, STAR_SPIRITS_OPTIONS_W, (D_802AD10E * 13) + 28, 0, btl_menu_moves_draw_content, NULL, -1);
#endif
new_var = moveY; // todo required to match
set_window_properties(WIN_BTL_SPIRITS_TITLE, moveX + 10, new_var - 6, WIDTH_2, 16, 1, btl_menu_moves_show_title, 0, -1);
set_window_properties(WIN_BTL_SPIRITS_ICON, moveX + OFFSET_X_3, new_var - 12, 32, 35, 1, btl_menu_moves_show_icon, 0, -1);
set_window_properties(WIN_BTL_SPIRITS_TITLE, moveX + STAR_SPIRITS_TITLE_X, new_var - 6, STAR_SPIRITS_TITLE_W, 16, 1, btl_menu_moves_show_title, 0, -1);
set_window_properties(WIN_BTL_SPIRITS_ICON, moveX + STAR_SPIRITS_ICON_X, new_var - 12, 32, 35, 1, btl_menu_moves_show_icon, 0, -1);
}
moveX = MOVE_X;
moveX = POS_X;
moveY = BattleMenu_Moves_PosY;
set_window_properties(WIN_BTL_DESC_BOX, moveX, 186, WIDTH_3, 32, WINDOW_PRIORITY_20, btl_menu_moves_show_desc, NULL, -1);
set_window_update(WIN_BTL_MOVES_MENU, WINDOW_UPDATE_SHOW);
@ -1498,23 +1622,42 @@ s32 btl_submenu_moves_update(void) {
}
#if VERSION_IQUE
#define Y_VAR1 2
#define MOVE_TEXT_Y 2
#define X_VAR254 153
#define X_VAR255 31
#define X_VAR1 104
#define X_VAR2 89
#define FP_COST_X 104
#define SP_COST_X 89
#define HUD_NOT_ENOUGH_FP &HES_NotEnoughFP
#define HUD_FP_COST_X 116
#define HUD_NOT_ENOUGH_POW &HES_NotEnoughPOW
#define HUD_SP_COST_X 102
#define X_VAR3 24
#elif VERSION_PAL
#define MOVE_TEXT_Y 0
#define X_VAR254 169
#define X_VAR255 31
#define FP_COST_X 108 + D_PAL_802AB4E8[gCurrentLanguage]
#define SP_COST_X 93 + D_PAL_802AB4D0[gCurrentLanguage]
#define HUD_NOT_ENOUGH_FP D_PAL_802AB52C[gCurrentLanguage]
#define HUD_FP_COST_X 116 + D_PAL_802AB4E8[gCurrentLanguage]
#define HUD_NOT_ENOUGH_POW D_PAL_802AB56C[gCurrentLanguage]
#define HUD_SP_COST_X 102 + D_PAL_802AB4D0[gCurrentLanguage]
#define X_VAR3 24
#elif VERSION_JP
#define Y_VAR1 0
#define MOVE_TEXT_Y 0
#define X_VAR254 139
#define X_VAR255 35
#define X_VAR3 26
#else
#define Y_VAR1 0
#define MOVE_TEXT_Y 0
#define X_VAR254 153
#define X_VAR255 31
#define X_VAR1 108
#define X_VAR2 93
#define FP_COST_X 108
#define SP_COST_X 93
#define HUD_NOT_ENOUGH_FP &HES_NotEnoughFP
#define HUD_FP_COST_X 116
#define HUD_NOT_ENOUGH_POW &HES_NotEnoughPOW
#define HUD_SP_COST_X 102
#define X_VAR3 24
#endif
@ -1575,7 +1718,7 @@ void btl_menu_moves_draw_content(void* data, s32 x, s32 y) {
if (battle_menu_moveOptionNames[BattleMenu_Moves_OptionIndexMap[idx]] >= 0) {
draw_msg(
battle_menu_moveOptionNames[BattleMenu_Moves_OptionIndexMap[idx]],
xPos, yPos - Y_VAR1, BattleMenu_Moves_TextAlpha, palette, 1
xPos, yPos - MOVE_TEXT_Y, BattleMenu_Moves_TextAlpha, palette, 1
);
}
@ -1662,24 +1805,24 @@ void btl_menu_moves_draw_content(void* data, s32 x, s32 y) {
if (!BattleMenu_UsingSpiritsSubmenu) {
draw_number(
num, xPos + X_VAR1, yPos, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha,
num, xPos + FP_COST_X, yPos, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha,
DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT
);
if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[idx]] <= 0) {
hud_element_set_script(id, &HES_NotEnoughFP);
hud_element_set_script(id, HUD_NOT_ENOUGH_FP);
}
yRenderPos = yPos + 7;
hud_element_set_render_pos(id, xPos + 116, yRenderPos);
hud_element_set_render_pos(id, xPos + HUD_FP_COST_X, yRenderPos);
} else {
draw_number(
num, xPos + X_VAR2, yPos, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha,
num, xPos + SP_COST_X, yPos, DRAW_NUMBER_CHARSET_THIN, palette, BattleMenu_Moves_TextAlpha,
DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT
);
if (BattleMenu_Moves_OptionEnabled[BattleMenu_Moves_OptionIndexMap[idx]] <= 0) {
hud_element_set_script(id, &HES_NotEnoughPOW);
hud_element_set_script(id, HUD_NOT_ENOUGH_POW);
}
yRenderPos = yPos + 7;
hud_element_set_render_pos(id, xPos + 102, yRenderPos);
hud_element_set_render_pos(id, xPos + HUD_SP_COST_X, yRenderPos);
}
#endif
hud_element_set_alpha(id, BattleMenu_Moves_TextAlpha);
@ -1749,35 +1892,24 @@ void btl_menu_moves_draw_content(void* data, s32 x, s32 y) {
}
}
#if VERSION_JP
#define X_VAR4 28
#define X_VAR5 24
#if VERSION_PAL
#define TEXT_ABILITIES_X D_PAL_802AB4F4[gCurrentLanguage]
#define TEXT_STAR_SPIRITS_X D_PAL_802AB4E0[gCurrentLanguage]
#elif VERSION_JP
#define TEXT_ABILITIES_X 28
#define TEXT_STAR_SPIRITS_X 24
#else
#define X_VAR4 16
#define X_VAR5 6
#define TEXT_ABILITIES_X 16
#define TEXT_STAR_SPIRITS_X 6
#endif
void btl_menu_moves_show_title(void* data, s32 x, s32 y) {
s32 msgID;
s32 posX;
s32 posY;
s32 opacity;
s32 palette;
if (!BattleMenu_UsingSpiritsSubmenu) {
msgID = MSG_Menus_Abilities;
posX = x + X_VAR4;
posY = y + 2;
opacity = BattleMenu_Moves_TextAlpha;
palette = MSG_PAL_30;
draw_msg(MSG_Menus_Abilities, x + TEXT_ABILITIES_X, y + 2, BattleMenu_Moves_TextAlpha, MSG_PAL_30, DRAW_MSG_STYLE_MENU);
} else {
msgID = MSG_Menus_StarSpirits;
posX = x + X_VAR5;
posY = y + 2;
opacity = BattleMenu_Moves_TextAlpha;
palette = MSG_PAL_31;
draw_msg(MSG_Menus_StarSpirits, x + TEXT_STAR_SPIRITS_X, y + 2, BattleMenu_Moves_TextAlpha, MSG_PAL_31, DRAW_MSG_STYLE_MENU);
}
draw_msg(msgID, posX, posY, opacity, palette, DRAW_MSG_STYLE_MENU);
}
void btl_menu_moves_show_icon(void* data, s32 x, s32 y) {
@ -1984,7 +2116,9 @@ s32 btl_update_strats_menu(void) {
D_802AD618 = hid = hud_element_create(&HES_AnimatedHandPointer);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
hud_element_set_render_pos(hid, D_802AD63C, D_802AD63E);
x = D_802AD63C; //! required to match
y = D_802AD63E;
hud_element_set_render_pos(hid, x, y);
HID_GreenArrowUp = hid = hud_element_create(&HES_GreenArrowUp);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_DROP_SHADOW | HUD_ELEMENT_FLAG_80);
@ -1997,8 +2131,16 @@ s32 btl_update_strats_menu(void) {
D_802AD614 = MSG_PAL_STANDARD;
x = D_802AD63C;
y = D_802AD63E;
#if VERSION_PAL
width = get_msg_width(MSG_Menus_Strategies, 0) + 32;
set_window_properties(WIN_BTL_STRATS_MENU, x, y, D_PAL_802AB4C8[gCurrentLanguage], (StratsMenuLines * 13) + 26,
0, btl_menu_strats_draw_content, NULL, -1);
set_window_properties(WIN_BTL_STRATS_TITLE, x + (D_PAL_802AB4C8[gCurrentLanguage] - width) / 2, y - 6, width, 16,
1, btl_menu_strats_show_title, NULL, -1);
#else
set_window_properties(WIN_BTL_STRATS_MENU, x, y, W_VAR1, (StratsMenuLines * 13) + 26, 0, btl_menu_strats_draw_content, NULL, -1);
set_window_properties(WIN_BTL_STRATS_TITLE, x + X_VAR6, y - 6, W_VAR2, 16, 1, btl_menu_strats_show_title, NULL, -1);
#endif
x = X_VAR7;
y = 186;
set_window_properties(WIN_BTL_DESC_BOX, x, y, W_VAR3, 32, WINDOW_PRIORITY_20, btl_menu_strats_show_desc, NULL, -1);
@ -2123,7 +2265,13 @@ s32 btl_update_strats_menu(void) {
break;
}
width = get_msg_width(msgID, 0) + 23;
set_window_properties(WIN_BTL_POPUP, (SCREEN_WIDTH / 2) - (width / 2), 80, width, 28, 20, btl_menu_strats_show_error, NULL, -1);
x = (SCREEN_WIDTH / 2) - (width / 2);
#if VERSION_PAL
set_window_properties(WIN_BTL_POPUP, x, 80, width, D_802AB340[get_msg_lines(msgID) - 1],
20, btl_menu_strats_show_error, NULL, -1);
#else
set_window_properties(WIN_BTL_POPUP, x, 80, width, 28, 20, btl_menu_strats_show_error, NULL, -1);
#endif
set_window_update(WIN_BTL_POPUP, WINDOW_UPDATE_SHOW);
D_802AD612 = 60;
BattleSubmenuStratsState = BTL_SUBMENU_STRATS_STATE_ERROR_DONE;
@ -2147,14 +2295,17 @@ s32 btl_update_strats_menu(void) {
}
#if VERSION_IQUE
#define X_VAR8 142
#define Y_VAR2 3
#define STRATS_OPTION_Y 3
#define STRATS_SUBMENU_WIDTH 142
#elif VERSION_PAL
#define STRATS_OPTION_Y 0
#define STRATS_SUBMENU_WIDTH 182
#elif VERSION_JP
#define X_VAR8 106
#define Y_VAR2 0
#define STRATS_OPTION_Y 0
#define STRATS_SUBMENU_WIDTH 106
#else
#define X_VAR8 142
#define Y_VAR2 0
#define STRATS_OPTION_Y 0
#define STRATS_SUBMENU_WIDTH 142
#endif
void btl_menu_strats_draw_content(void* data, s32 x, s32 y) {
@ -2186,7 +2337,7 @@ void btl_menu_strats_draw_content(void* data, s32 x, s32 y) {
xPos = x + 4;
yPos = y + 18;
var_t0 = yPos + 1 + (StratsMenuLines * 13);
gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, xPos, yPos, x + X_VAR8, var_t0);
gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, xPos, yPos, x + STRATS_SUBMENU_WIDTH, var_t0);
xPos = x + 33;
yPos = y + 19 + D_802AD60C;
@ -2201,7 +2352,7 @@ void btl_menu_strats_draw_content(void* data, s32 x, s32 y) {
if (D_802AD690[idx] == 0) {
palette = MSG_PAL_0B;
}
draw_msg(D_802AD658[idx], xPos, yPos - Y_VAR2, D_802AD624, palette, DRAW_MSG_STYLE_MENU);
draw_msg(D_802AD658[idx], xPos, yPos - STRATS_OPTION_Y, D_802AD624, palette, DRAW_MSG_STYLE_MENU);
yPos += 13;
}
@ -2290,6 +2441,9 @@ void btl_menu_strats_show_error(void* data, s32 x, s32 y) {
msgID = MSG_Menus_Battle_CantRunAway;
break;
}
#if VERSION_PAL
y += D_802AB344[get_msg_lines(msgID) - 1];
#endif
draw_msg(msgID, x, y, 255, MSG_PAL_0F, 0);
}
@ -3988,6 +4142,9 @@ void btl_state_update_partner_menu(void) {
return;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_1:
set_actor_anim(ACTOR_PARTNER, 0, BattleMenu_PartnerThinkAnims[playerData->curPartner]);
#if VERSION_PAL
btl_init_menu_partner();
#endif
gBattleSubState = BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_2;
case BTL_SUBSTATE_PARTNER_MENU_MAIN_MENU_2:
entryIdx = btl_main_menu_update();

View File

@ -55,7 +55,9 @@ BSS HudElemID LevelUpSelectTextID;
BSS s32 CelebrateSubstateTime;
BSS s32 D_8029FB50;
BSS s32 EndBattleRewardStep;
#if !VERSION_PAL
BSS s32 D_8029FB58[2]; // unused?
#endif
BSS s32 CantLevelUpStat[3];
BSS s32 EndBattleRewardTotal;
BSS s32 EndBattleRewardIncrement;
@ -69,6 +71,14 @@ BSS s32 LevelUpSelectTextVelX;
extern EntityModelScript EMS_starpoint_starpoint;
extern EntityModelScript EMS_starpoint_starpoints;
#if VERSION_PAL
extern EntityModelScript EMS_starpoint_starpoint_de;
extern EntityModelScript EMS_starpoint_starpoint_fr;
extern EntityModelScript EMS_starpoint_starpoint_es;
extern EntityModelScript EMS_starpoint_starpoints_de;
extern EntityModelScript EMS_starpoint_starpoints_fr;
extern EntityModelScript EMS_starpoint_starpoints_es;
#endif
extern EntityModelScript EMS_starpoint_digit_0;
extern EntityModelScript EMS_starpoint_digit_1;
extern EntityModelScript EMS_starpoint_digit_2;
@ -82,6 +92,11 @@ extern EntityModelScript EMS_starpoint_digit_9;
extern EntityModelScript EMS_starpoint_dummy;
extern EntityModelScript EMS_level_up;
#if VERSION_PAL
extern EntityModelScript EMS_level_up_en_de;
extern EntityModelScript EMS_level_up_fr;
extern EntityModelScript EMS_level_up_es;
#endif
extern HudScript HES_level_up_flower;
extern HudScript HES_level_up_leaves;
@ -92,6 +107,17 @@ extern HudScript HES_level_up_badge;
extern HudScript HES_level_up_FP;
extern HudScript HES_level_up_HP;
extern HudScript HES_level_up_BP;
#if VERSION_PAL
extern HudScript HES_level_up_FP_de;
extern HudScript HES_level_up_FP_fr;
extern HudScript HES_level_up_FP_es;
extern HudScript HES_level_up_HP_de;
extern HudScript HES_level_up_HP_fr;
extern HudScript HES_level_up_HP_es;
extern HudScript HES_level_up_BP_de;
extern HudScript HES_level_up_BP_fr;
extern HudScript HES_level_up_BP_es;
#endif
extern HudScript HES_level_up_green_digit_0;
extern HudScript HES_level_up_green_digit_1;
@ -159,9 +185,64 @@ extern HudScript HES_level_up_small_blue_digit_9;
extern HudScript HES_level_up_small_blue_arrow;
extern HudScript HES_level_up_select_one_to_upgrade;
#if VERSION_PAL
extern HudScript HES_level_up_select_one_to_upgrade_de;
extern HudScript HES_level_up_select_one_to_upgrade_fr;
extern HudScript HES_level_up_select_one_to_upgrade_es;
#endif
s32 bFadeToBlackAmt = 255;
#if VERSION_PAL
s16 D_PAL_80284614[] = { 28, 40 };
s16 D_PAL_80284618[] = { 0, -2 };
u8* LevelUpLetters_RomStart[] = {
level_up_letters_en_de_ROM_START,
level_up_letters_en_de_ROM_START,
level_up_letters_fr_ROM_START,
level_up_letters_es_ROM_START,
};
u8* LevelUpLetters_RomEnd[] = {
level_up_letters_en_de_ROM_END,
level_up_letters_en_de_ROM_END,
level_up_letters_fr_ROM_END,
level_up_letters_es_ROM_END,
};
u8* LevelUpLetters_Vram[] = {
level_up_letters_en_de_VRAM,
level_up_letters_en_de_VRAM,
level_up_letters_fr_VRAM,
level_up_letters_es_VRAM,
};
u8* StarpointText_RomStart[] = {
starpoint_en_ROM_START,
starpoint_de_ROM_START,
starpoint_fr_ROM_START,
starpoint_es_ROM_START,
};
u8* StarpointText_RomEnd[] = {
starpoint_en_ROM_END,
starpoint_de_ROM_END,
starpoint_fr_ROM_END,
starpoint_es_ROM_END,
};
u8* StarpointText_Vram[] = {
starpoint_en_VRAM,
starpoint_de_VRAM,
starpoint_fr_VRAM,
starpoint_es_VRAM,
};
HudScript* HES_LevelUpUpgradeLanguages[] = {
&HES_level_up_select_one_to_upgrade,
&HES_level_up_select_one_to_upgrade_de,
&HES_level_up_select_one_to_upgrade_fr,
&HES_level_up_select_one_to_upgrade_es,
};
#endif
s32 D_80284154[] = {
[PARTNER_NONE] = 0,
[PARTNER_GOOMBARIO] = ANIM_BattleGoombario_Walk,
@ -193,11 +274,34 @@ EntityModelScript* starpoint_digit_scripts[] = {
EntityModelScript* starpoint_space_script = &EMS_starpoint_dummy;
#if VERSION_PAL
HudScript* levelup_stat_scripts[][4] = {
{
&HES_level_up_FP,
&HES_level_up_FP_de,
&HES_level_up_FP_fr,
&HES_level_up_FP_es,
},
{
&HES_level_up_HP,
&HES_level_up_HP_de,
&HES_level_up_HP_fr,
&HES_level_up_HP_es,
},
{
&HES_level_up_BP,
&HES_level_up_BP_de,
&HES_level_up_BP_fr,
&HES_level_up_BP_es,
},
};
#else
HudScript* levelup_stat_scripts[3] = {
&HES_level_up_FP,
&HES_level_up_HP,
&HES_level_up_BP,
};
#endif
HudScript* HES_LevelUpDigits[3][10] = {
{
@ -358,12 +462,38 @@ EvtScript EVS_ShowStarpoints = {
Return
EndIf
IfLt(LVar0, 2)
#if VERSION_PAL
Call(GetLanguage, LVar1)
Switch(LVar1)
CaseEq(LANGUAGE_EN)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoint))
CaseEq(LANGUAGE_DE)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoint_de))
CaseEq(LANGUAGE_FR)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoint_fr))
CaseEq(LANGUAGE_ES)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoint_es))
EndSwitch
#else
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoint))
#endif
Call(SetVirtualEntityPosition, LVar6, -278, 68, 70)
Call(SetVirtualEntityScale, LVar6, Float(0.5), Float(0.5), Float(0.5))
Else
#if VERSION_JP
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoint))
#elif VERSION_PAL
Call(GetLanguage, LVar1)
Switch(LVar1)
CaseEq(LANGUAGE_EN)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoints))
CaseEq(LANGUAGE_DE)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoints_de))
CaseEq(LANGUAGE_FR)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoints_fr))
CaseEq(LANGUAGE_ES)
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoints_es))
EndSwitch
#else
Call(CreateVirtualEntity, LVar6, Ref(EMS_starpoint_starpoints))
#endif
@ -460,7 +590,21 @@ EvtScript EVS_ShowStarpoints = {
};
EvtScript EVS_ShowLevelUp = {
#if VERSION_PAL
Call(GetLanguage, LVar0)
Switch(LVar0)
CaseEq(LANGUAGE_EN)
Call(CreateVirtualEntity, LVar9, Ref(EMS_level_up_en_de))
CaseEq(LANGUAGE_DE)
Call(CreateVirtualEntity, LVar9, Ref(EMS_level_up_en_de))
CaseEq(LANGUAGE_FR)
Call(CreateVirtualEntity, LVar9, Ref(EMS_level_up_fr))
CaseEq(LANGUAGE_ES)
Call(CreateVirtualEntity, LVar9, Ref(EMS_level_up_es))
EndSwitch
#else
Call(CreateVirtualEntity, LVar9, Ref(EMS_level_up))
#endif
Call(SetVirtualEntityPosition, LVar9, 0, 210, 70)
Call(InitLevelUpModelFlags)
ChildThread
@ -512,6 +656,9 @@ void btl_state_update_celebration(void) {
s32 i;
s32 j;
#if VERSION_PAL
s32 numLines;
#endif
HudScript* new_var;
switch (gBattleSubState) {
@ -546,6 +693,9 @@ void btl_state_update_celebration(void) {
CelebrateSubstateTime--;
} else if (btl_cam_is_moving_done()) {
DMA_COPY_SEGMENT(starpoint);
#if VERSION_PAL
dma_copy(StarpointText_RomStart[gCurrentLanguage], StarpointText_RomEnd[gCurrentLanguage], StarpointText_Vram[gCurrentLanguage]);
#endif
script = start_script(&EVS_ShowStarpoints, EVT_PRIORITY_A, 0);
EndBattleRewardsDone = FALSE;
// divide reward into 20 increments
@ -631,6 +781,9 @@ void btl_state_update_celebration(void) {
btl_cam_use_preset(BTL_CAM_DEFAULT);
btl_cam_move(5);
DMA_COPY_SEGMENT(level_up);
#if VERSION_PAL
dma_copy(LevelUpLetters_RomStart[gCurrentLanguage], LevelUpLetters_RomEnd[gCurrentLanguage], LevelUpLetters_Vram[gCurrentLanguage]);
#endif
sfx_play_sound(SOUND_LOOP_CHEERING);
CelebrateStateTime = 0;
gBattleSubState = BTL_SUBSTATE_CELEBRATE_LEVEL_UP_BEGIN;
@ -686,7 +839,11 @@ void btl_state_update_celebration(void) {
hud_element_set_render_pos(hid, 6, 140);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
#if VERSION_PAL
hid = hud_element_create(levelup_stat_scripts[0][gCurrentLanguage]);
#else
hid = hud_element_create(levelup_stat_scripts[0]);
#endif
LevelUpStatTextIDs[LVL_UP_FP][LVL_UP_TITLE] = hid;
hud_element_set_render_pos(hid, 160, 317);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
@ -698,7 +855,11 @@ void btl_state_update_celebration(void) {
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80 | HUD_ELEMENT_FLAG_DISABLED);
}
#if VERSION_PAL
hid = hud_element_create(levelup_stat_scripts[1][gCurrentLanguage]);
#else
hid = hud_element_create(levelup_stat_scripts[1]);
#endif
LevelUpStatTextIDs[LVL_UP_HP][LVL_UP_TITLE] = hid;
hud_element_set_render_pos(hid, 312, 117);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
@ -710,7 +871,11 @@ void btl_state_update_celebration(void) {
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80 | HUD_ELEMENT_FLAG_DISABLED);
}
#if VERSION_PAL
hid = hud_element_create(levelup_stat_scripts[2][gCurrentLanguage]);
#else
hid = hud_element_create(levelup_stat_scripts[2]);
#endif
LevelUpStatTextIDs[LVL_UP_BP][LVL_UP_TITLE] = hid;
hud_element_set_render_pos(hid, 8, 117);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
@ -932,7 +1097,11 @@ void btl_state_update_celebration(void) {
hud_element_set_alpha(hid, 200);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_FILTER_TEX | HUD_ELEMENT_FLAG_80);
#if VERSION_PAL
LevelUpSelectTextID = hid = hud_element_create(HES_LevelUpUpgradeLanguages[gCurrentLanguage]);
#else
LevelUpSelectTextID = hid = hud_element_create(&HES_level_up_select_one_to_upgrade);
#endif
hud_element_set_render_pos(hid, 0, 0);
hud_element_set_flags(hid, HUD_ELEMENT_FLAG_80);
battleStatus->curSubmenu = 1;
@ -1142,10 +1311,19 @@ void btl_state_update_celebration(void) {
gBattleSubState = BTL_SUBSTATE_END_BATTLE_EXEC_STAGE_SCRIPT;
break;
case BTL_SUBSTATE_CELEBRATE_LEVEL_UP_INVALID:
#if VERSION_PAL
width = get_msg_width(MSG_Menus_CantIncrease, 0) + 32;
numLines = get_msg_lines(MSG_Menus_CantIncrease) - 1;
x = 160 - (width / 2);
y = 80;
set_window_properties(WIN_BTL_POPUP, x, y, width, D_PAL_80284614[numLines],
WINDOW_PRIORITY_10, draw_content_cant_increase_popup, NULL, -1);
#else
width = get_msg_width(MSG_Menus_CantIncrease, 0) + 31;
x = 160 - (width / 2);
y = 80;
set_window_properties(WIN_BTL_POPUP, x, y, width, 28, WINDOW_PRIORITY_10, draw_content_cant_increase_popup, NULL, -1);
#endif
set_window_update(WIN_BTL_POPUP, WINDOW_UPDATE_SHOW);
CelebrateSubstateTime = 60;
gBattleSubState = BTL_SUBSTATE_CELEBRATE_LEVEL_UP_INVALID_DELAY;
@ -1516,5 +1694,9 @@ void draw_content_level_up_textbox(void* data, s32 posX, s32 posY) {
}
void draw_content_cant_increase_popup(void* data, s32 posX, s32 posY) {
#if VERSION_PAL
draw_msg(MSG_Menus_CantIncrease, posX + 16, posY + 6 + D_PAL_80284618[get_msg_lines(MSG_Menus_CantIncrease) - 1], 255, MSG_PAL_0F, 0);
#else
draw_msg(MSG_Menus_CantIncrease, posX + 11, posY + 6, 255, MSG_PAL_0F, 0);
#endif
}

View File

@ -11,6 +11,14 @@
extern HudScript HES_Happy;
extern HudScript HES_HPDrain;
#if VERSION_PAL
extern HudScript HES_Happy_de;
extern HudScript HES_Happy_fr;
extern HudScript HES_Happy_es;
extern HudScript HES_HPDrain_de;
extern HudScript HES_HPDrain_fr;
extern HudScript HES_HPDrain_es;
#endif
extern EvtScript EVS_Player_Celebrate;
extern EvtScript EVS_Player_SimpleHit;
@ -49,6 +57,7 @@ void btl_set_player_idle_anims(void) {
}
}
#if !VERSION_PAL
API_CALLABLE(IsPlayerImmobile) {
BattleStatus* battleStatus = &gBattleStatus;
Actor* playerActor = battleStatus->playerActor;
@ -66,6 +75,7 @@ API_CALLABLE(IsPlayerImmobile) {
script->varTable[0] = isImmobile;
return ApiStatus_DONE2;
}
#endif
API_CALLABLE(ActivateDefend) {
ActorPart* actorPart = &gBattleStatus.playerActor->partsTable[0];
@ -189,6 +199,7 @@ API_CALLABLE(GiveRefund) {
f32 angle = 0.0f;
s32 delayTime = 0;
f32 posX, posY, posZ;
HudElemID hid;
posY = player->curPos.y + player->size.y;
if (player_team_is_ability_active(player, ABILITY_REFUND) && sellValue > 0) {
@ -213,8 +224,25 @@ API_CALLABLE(GiveRefund) {
posY = player->curPos.y;
posZ = player->curPos.z;
get_screen_coords(gCurrentCameraID, posX, posY, posZ, &iconPosX, &iconPosY, &iconPosZ);
HID_Refund = hud_element_create(&HES_Refund);
hud_element_set_render_pos(HID_Refund, iconPosX + 36, iconPosY - 63);
#if VERSION_PAL
switch (gCurrentLanguage) {
case LANGUAGE_EN:
HID_Refund = hid = hud_element_create(&HES_Refund);
break;
case LANGUAGE_DE:
HID_Refund = hid = hud_element_create(&HES_Refund_de);
break;
case LANGUAGE_FR:
HID_Refund = hid = hud_element_create(&HES_Refund_fr);
break;
case LANGUAGE_ES:
HID_Refund = hid = hud_element_create(&HES_Refund_es);
break;
}
#else
HID_Refund = hid = hud_element_create(&HES_Refund);
#endif
hud_element_set_render_pos(hid, iconPosX + 36, iconPosY - 63);
}
script->varTable[0] = delayTime;
@ -489,6 +517,7 @@ API_CALLABLE(SpawnTurnEndFX) {
s32 screenX;
s32 screenY;
s32 screenZ;
HudElemID hid;
get_screen_coords(gCurrentCameraID, x, y, z, &screenX, &screenY, &screenZ);
@ -496,14 +525,48 @@ API_CALLABLE(SpawnTurnEndFX) {
screenY -= 19;
if (script->varTable[10] > 0) {
HID_HPDrain = hud_element_create(&HES_HPDrain);
hud_element_set_render_pos(HID_HPDrain, screenX, screenY);
#if VERSION_PAL
switch (gCurrentLanguage) {
case LANGUAGE_EN:
HID_HPDrain = hid = hud_element_create(&HES_HPDrain);
break;
case LANGUAGE_DE:
HID_HPDrain = hid = hud_element_create(&HES_HPDrain_de);
break;
case LANGUAGE_FR:
HID_HPDrain = hid = hud_element_create(&HES_HPDrain_fr);
break;
case LANGUAGE_ES:
HID_HPDrain = hid = hud_element_create(&HES_HPDrain_es);
break;
}
#else
HID_HPDrain = hid = hud_element_create(&HES_HPDrain);
#endif
hud_element_set_render_pos(hid, screenX, screenY);
screenY += 9;
}
if (script->varTable[11] > 0 || script->varTable[12] > 0) {
HID_Happy = hud_element_create(&HES_Happy);
hud_element_set_render_pos(HID_Happy, screenX, screenY);
#if VERSION_PAL
switch (gCurrentLanguage) {
case LANGUAGE_EN:
HID_Happy = hid = hud_element_create(&HES_Happy);
break;
case LANGUAGE_DE:
HID_Happy = hid = hud_element_create(&HES_Happy_de);
break;
case LANGUAGE_FR:
HID_Happy = hid = hud_element_create(&HES_Happy_fr);
break;
case LANGUAGE_ES:
HID_Happy = hid = hud_element_create(&HES_Happy_es);
break;
}
#else
HID_Happy = hid = hud_element_create(&HES_Happy);
#endif
hud_element_set_render_pos(hid, screenX, screenY);
}
return ApiStatus_DONE2;
}

View File

@ -39,6 +39,36 @@ s16 BattleMessage_TextOffsetsY[] = { 0, -2 };
s16 BattleMessage_BoxOffsetsY[] = { 0, -12 };
#endif
#if VERSION_PAL
s16 D_PAL_802839CC[] = { 0, -8 };
u16 TipAction_PressBeforeLanding_X[] = { 65, 71, 112, 67 };
u16 TipAction_HoldLeftTimed_X1[] = { 55, 71, 92, 88 };
u16 TipAction_HoldLeftTimed_X2[] = { 73, 86, 160, 224 };
u16 TipAction_PressBeforeStrike_X[] = { 64, 71, 113, 67 };
u16 TipAction_MashButton_X[] = { 67, 75, 114, 71 };
u16 TipAction_MashLeft_X[] = { 56, 73, 70, 88 };
u16 TipAction_HoldLeftAim_X1[] = { 65, 72, 93, 88 };
u16 TipAction_HoldLeftAim_X2[] = { 146, 86, 137, 221 };
u16 TipAction_PressButtonsShown_X2[] = { 64, 71, 112, 67 };
u16 TipAction_PressButtonsShown_X1[] = { 86, 93, 134, 89 };
u16 TipAction_PressButtonsShown_X3[] = { 108, 115, 156, 111 };
u16 TipAction_PressWithTiming_X1[] = { 105, 129, 23, 140 };
u16 TipAction_PressWithTiming_X2[] = { 65, 72, 112, 67 };
u16 TipAction_PressWithTiming_Y1[] = { 13, 13, 31, 13 };
u16 TipAction_MashBoth_X1[] = { 65, 73, 113, 68 };
u16 TipAction_MashBoth_X2[] = { 86, 94, 134, 89 };
u16 TipAction_HoldToTap_X[] = { 124, 64, 226, 87 };
u16 TipAction_HoldToRelease_X2[] = { 53, 61, 93, 79 };
u16 TipAction_HoldToRelease_X1[] = { 56, 56, 136, 72 };
u16 TipAction_MoveToAim_X3[] = { 56, 73, 88, 90 };
u16 TipAction_MoveToAim_X1[] = { 107, 118, 142, 134 };
u16 TipAction_MoveToAim_X2[] = { 210, 48, 99, 47 };
u16 TipAction_MoveToAim_Y2[] = { 15, 32, 32, 32 };
u16 TipAction_BreakFree_X[] = { 64, 72, 112, 67 };
u16 TipAction_ReduceDamage_X[] = { 64, 72, 185, 67 };
#endif
//TODO Vec3f[]
f32 D_802835DC[] = {
0.0f, 4.5f, 0.0f,
@ -1243,6 +1273,41 @@ void btl_update_message_popup(void* data) {
#define TIP_Y_BF_RD 13
#define TIP_SCALE1 0.8f
#define TIP_SCALE2 0.8f
#elif VERSION_PAL
#define TIP_X_PRL TipAction_PressBeforeLanding_X[gCurrentLanguage]
#define TIP_X_HLT1 TipAction_HoldLeftTimed_X1[gCurrentLanguage]
#define TIP_X_HLT2 TipAction_HoldLeftTimed_X2[gCurrentLanguage]
#define TIP_X_PBST TipAction_PressBeforeStrike_X[gCurrentLanguage]
#define TIP_X_MB TipAction_MashButton_X[gCurrentLanguage]
#define TIP_X_ML TipAction_MashLeft_X[gCurrentLanguage]
#define TIP_X_HLA1 TipAction_HoldLeftAim_X1[gCurrentLanguage]
#define TIP_X_HLA2 TipAction_HoldLeftAim_X2[gCurrentLanguage]
#define TIP_X_PBS1 TipAction_PressButtonsShown_X1[gCurrentLanguage]
#define TIP_X_PBS2 TipAction_PressButtonsShown_X2[gCurrentLanguage]
#define TIP_X_PBS3 TipAction_PressButtonsShown_X3[gCurrentLanguage]
#define TIP_X_PWT1 TipAction_PressWithTiming_X1[gCurrentLanguage]
#define TIP_X_PWT2 TipAction_PressWithTiming_X2[gCurrentLanguage]
#define TIP_X_MB1 TipAction_MashBoth_X1[gCurrentLanguage]
#define TIP_X_MB2 TipAction_MashBoth_X2[gCurrentLanguage]
#define TIP_X_HTT TipAction_HoldToTap_X[gCurrentLanguage]
#define TIP_X_HTR1 TipAction_HoldToRelease_X1[gCurrentLanguage]
#define TIP_X_HTR2 TipAction_HoldToRelease_X2[gCurrentLanguage]
#define TIP_X_MTA1 TipAction_MoveToAim_X1[gCurrentLanguage]
#define TIP_X_MTA2 TipAction_MoveToAim_X2[gCurrentLanguage]
#define TIP_X_MTA3 TipAction_MoveToAim_X3[gCurrentLanguage]
#define TIP_X_BF_RD TipAction_ReduceDamage_X[gCurrentLanguage]
#define TIP_Y_HLT2 31
#define TIP_Y_HLA2 32
#define TIP_Y_PBS1 13
#define TIP_Y_PBS2 13
#define TIP_Y_PBS3 13
#define TIP_Y_PWT1 TipAction_PressWithTiming_Y1[gCurrentLanguage]
#define TIP_Y_HTR1 31
#define TIP_Y_MTA1 13
#define TIP_Y_MTA2 TipAction_MoveToAim_Y2[gCurrentLanguage]
#define TIP_Y_BF_RD 13
#define TIP_SCALE1 0.8f
#define TIP_SCALE2 0.8f
#else
#define TIP_X_PRL 65
#define TIP_X_HLT1 55
@ -1385,10 +1450,19 @@ void btl_message_popup_draw_content(void* data, s32 x, s32 y) {
case BTL_MSG_JUMP_DISABLED_2:
case BTL_MSG_JUMP_DISABLED_3:
case BTL_MSG_ITEMS_DISABLED:
#if VERSION_PAL
hud_element_set_render_pos(HID_BattleMessage1, x + 13, y + 14);
hud_element_draw_clipped(HID_BattleMessage1);
messageID = BattleMessages[popup->messageIndex];
msgLinesIdx = get_msg_lines(messageID) - 1;
y += D_PAL_802839CC[msgLinesIdx];
draw_msg(messageID, x + 29, y + 6, 255, MSG_PAL_0F, 0);
#else
messageID = BattleMessages[popup->messageIndex];
draw_msg(messageID, x + 29, y + 6, 255, MSG_PAL_0F, 0);
hud_element_set_render_pos(HID_BattleMessage1, x + 13, y + 14);
hud_element_draw_clipped(HID_BattleMessage1);
#endif
break;
case BTL_MSG_ACTION_TIP_PRESS_BEFORE_LANDING:
case BTL_MSG_ACTION_TIP_HOLD_LEFT_TIMED:
@ -1610,6 +1684,13 @@ void btl_message_popup_draw_content(void* data, s32 x, s32 y) {
break;
#endif
case BTL_MSG_ACTION_TIP_BREAK_FREE:
#if VERSION_PAL
hud_element_set_render_pos(HID_BattleMessage1, x + TipAction_BreakFree_X[gCurrentLanguage], y + TIP_Y_BF_RD);
hud_element_set_scale(HID_BattleMessage1, 0.5f);
hud_element_set_alpha(HID_BattleMessage1, opacity);
hud_element_draw_clipped(HID_BattleMessage1);
break;
#endif
case BTL_MSG_ACTION_TIP_REDUCE_DAMAGE:
hud_element_set_render_pos(HID_BattleMessage1, x + TIP_X_BF_RD, y + TIP_Y_BF_RD);
hud_element_set_scale(HID_BattleMessage1, 0.5f);

View File

@ -224,27 +224,35 @@ INCLUDE_PAL("ui/battle/cmd/aim/target_1.pal", ui_battle_cmd_aim_target_1_pal);
INCLUDE_IMG("ui/battle/solid_star.png", ui_battle_solid_star_png);
INCLUDE_PAL("ui/battle/solid_star.pal", ui_battle_solid_star_pal);
#if !VERSION_PAL
Gfx D_8028F860[] = {
gsSPEndDisplayList(),
};
#endif
INCLUDE_IMG("ui/battle/projector_spot.png", ui_battle_projector_spot_png);
#if !VERSION_PAL
Gfx D_8028FC68[] = {
gsSPEndDisplayList(),
};
#endif
INCLUDE_IMG("ui/battle/projector_beam.png", ui_battle_projector_beam_png);
#if !VERSION_PAL
Gfx D_80290C70[] = {
gsSPEndDisplayList(),
};
#endif
INCLUDE_IMG("ui/battle/projector_reel.png", ui_battle_projector_reel_png);
#if !VERSION_PAL
Gfx D_80291C78[] = {
gsSPEndDisplayList(),
};
#endif
INCLUDE_IMG("ui/battle/swap_background.png", ui_battle_swap_background_png);

View File

@ -19,8 +19,13 @@ glabel entry_point
/* 101C 80025C1C 2129FFF8 */ addi $t1, $t1, -8
/* 1020 80025C20 1520FFFB */ bnez $t1, .L80025C10
/* 1024 80025C24 00000000 */ nop
#if VERSION_PAL
/* 1028 80025C28 3C1D800B */ lui $sp, %hi(nuMainStack + 0x2000)
/* 102C 80025C2C 27BD6590 */ addiu $sp, $sp, %lo(nuMainStack + 0x2000)
#else
/* 1028 80025C28 3C1D800B */ lui $sp, %hi(nuBootStack + 0x2000)
/* 102C 80025C2C 27BD6590 */ addiu $sp, $sp, %lo(nuBootStack + 0x2000)
#endif
/* 1030 80025C30 3C0A8006 */ lui $t2, %hi(nuBoot)
/* 1034 80025C34 254AE8B0 */ addiu $t2, $t2, %lo(nuBoot)
/* 1038 80025C38 01400008 */ jr $t2

View File

@ -31,6 +31,8 @@ BSS PAL_BIN D_8015C7E0[0x10];
BSS char D_8015C800[0x3C80];
#elif VERSION_JP
BSS char D_8015C800[0x2880];
#elif VERSION_PAL
BSS char D_8015C800[0x57E0];
#else
BSS char D_8015C800[0x7800];
#endif

View File

@ -15,7 +15,7 @@
// main segment COMMON/.scommon symbols
//
#if VERSION_IQUE
#if VERSION_IQUE || VERSION_PAL
BSS OSIoMesg __osFlashMsg OSALIGNED(8);
#endif
BSS char wMapTexName[0x18];
@ -27,7 +27,7 @@ BSS OSPiHandle __Dom2SpeedParam OSALIGNED(8);
BSS OSContStatus nuContStatus[NU_CONT_MAXCONTROLLERS];
BSS OSThread D_800B1B90;
BSS NUContRmbCtl nuContRmbCtl[NU_CONT_MAXCONTROLLERS];
#if VERSION_IQUE
#if VERSION_IQUE || VERSION_PAL
BSS u32 __osFlashID[4] OSALIGNED(8);
#endif
BSS OSContPad nuContData[NU_CONT_MAXCONTROLLERS];
@ -40,12 +40,14 @@ BSS OSPiHandle __CartRomHandle OSALIGNED(8);
BSS OSMesgQueue __osPiAccessQueue OSALIGNED(8);
BSS EffectInstance* gEffectInstances[96] ALIGNED(8);
BSS OSPiHandle __Dom1SpeedParam OSALIGNED(8);
#if !VERSION_PAL
BSS u8 nuBootStack[0x2000] ALIGNED(8);
#endif
BSS u64 nuMainStack[NU_SC_STACK_SIZE / sizeof(u64)];
BSS u8 nuYieldBuf[NU_GFX_YIELD_BUF_SIZE];
BSS AuSynDriver auSynDriver;
BSS s32 D_800B91D0[NU_GFX_RDP_OUTPUTBUFF_SIZE / sizeof(u32)] ALIGNED(16);
#if VERSION_IQUE
#if VERSION_IQUE || VERSION_PAL
BSS OSPiHandle __osFlashHandler OSALIGNED(8);
#endif
BSS CollisionData gZoneCollisionData ALIGNED(8);
@ -58,7 +60,7 @@ BSS OSMesgQueue nuSiMgrMesgQ;
BSS OSTimer __osBaseTimer;
BSS char wMapShapeName[0x18];
BSS ALHeap nuAuHeap;
#if VERSION_IQUE
#if VERSION_IQUE || VERSION_PAL
BSS OSMesgQueue __osFlashMessageQ OSALIGNED(8);
#endif
BSS OSTimer __osEepromTimer;

View File

@ -15,7 +15,7 @@ BSS u8 nuScPreNMIFlag;
BSS s32 D_8009A5B4;
BSS s32 D_8009A5B8;
BSS s32 D_8009A5BC;
#if VERSION_IQUE
#if VERSION_IQUE || VERSION_PAL
BSS s32 __osFlashVersion;
#endif
BSS AuGlobals* gSoundGlobals;
@ -43,7 +43,7 @@ BSS BGMPlayer* gBGMPlayerB;
BSS s32 gEncounterState;
BSS s16 gNpcCount;
BSS u8 __osMaxControllers;
#if VERSION_IQUE
#if VERSION_IQUE || VERSION_PAL
BSS OSMesg __osFlashMsgBuf;
#endif
BSS OSTime __osCurrentTime;
@ -81,7 +81,7 @@ BSS s8 LastBattleStartedBySpin;
BSS DisplayContext* gDisplayContext;
BSS b32 EncounterStateChanged;
BSS s32 D_8009A67C;
#if VERSION_IQUE
#if VERSION_IQUE || VERSION_PAL
BSS s32 D_80099258[2];
#endif
BSS u16* ResetFrameBufferArray;

View File

@ -173,7 +173,12 @@ Gfx TheaterInitGfx[] = {
gsSPEndDisplayList(),
};
#if VERSION_PAL
BSS IMG_BIN noControllerImgBuf[0x1000] ALIGNED(16);
#define ui_no_controller_png noControllerImgBuf
#else
INCLUDE_IMG("ui/no_controller.png", ui_no_controller_png);
#endif
Gfx NoControllerSetupTexGfx[] = {
gsDPPipeSync(),
@ -207,6 +212,10 @@ BSS f32 gCurtainScaleGoal;
BSS f32 gCurtainFade;
BSS f32 gCurtainFadeGoal;
BSS UNK_FUN_PTR(gCurtainDrawCallback);
#if VERSION_PAL
BSS s32 D_PAL_8009A204;
BSS s32 D_PAL_8009A208;
#endif
BSS Mtx D_8009BAA8[2];
void initialize_curtains(void) {
@ -215,11 +224,17 @@ void initialize_curtains(void) {
gCurtainScaleGoal = 2.0f;
gCurtainFade = 0.0f;
gCurtainFadeGoal = 0.0f;
#if VERSION_PAL
D_PAL_8009A204 = 6;
D_PAL_8009A208 = 0;
#endif
}
void update_curtains(void) {
}
#define UI_NO_CONTROLLER_SIZE (ui_no_controller_png_width * ui_no_controller_png_height)
void render_curtains(void) {
if (gCurtainScaleGoal != gCurtainScale) {
gCurtainScale += (gCurtainScaleGoal - gCurtainScale) * 0.1;
@ -274,10 +289,34 @@ void render_curtains(void) {
alpha = 255;
}
gSPDisplayList(gMainGfxPos++, &TheaterInitGfx);
gSPDisplayList(gMainGfxPos++, &NoControllerSetupTexGfx);
gDPSetPrimColor(gMainGfxPos++, 0, 0, 0xFF, 0x20, 0x10, alpha);
gSPDisplayList(gMainGfxPos++, &NoControllerGfx);
#if VERSION_PAL
if (alpha == 0) {
D_PAL_8009A204 = 6;
}
if (D_PAL_8009A204 == 0) {
#endif
gSPDisplayList(gMainGfxPos++, &TheaterInitGfx);
gSPDisplayList(gMainGfxPos++, &NoControllerSetupTexGfx);
gDPSetPrimColor(gMainGfxPos++, 0, 0, 0xFF, 0x20, 0x10, alpha);
gSPDisplayList(gMainGfxPos++, &NoControllerGfx);
#if VERSION_PAL
}
if (D_PAL_8009A204 == 3) {
u8* dmaStart = ui_no_controller_ROM_START + (D_PAL_8009A208 / 2) * UI_NO_CONTROLLER_SIZE;
u8* dmaEnd = ui_no_controller_ROM_START + (D_PAL_8009A208 / 2) * UI_NO_CONTROLLER_SIZE + UI_NO_CONTROLLER_SIZE;
dma_copy(dmaStart, dmaEnd, &noControllerImgBuf);
D_PAL_8009A208++;
if (D_PAL_8009A208 >= 8) {
D_PAL_8009A208 = 0;
}
}
if (D_PAL_8009A204 != 0) {
D_PAL_8009A204--;
}
#endif
}
}
}

View File

@ -335,7 +335,41 @@ s32 load_effect(s32 effectIndex) {
void* graphics = general_heap_malloc(effectEntry->graphicsDmaEnd - effectEntry->graphicsDmaStart);
sharedData->graphics = graphics;
ASSERT(graphics != NULL);
dma_copy(effectEntry->graphicsDmaStart, effectEntry->graphicsDmaEnd, sharedData->graphics);
#if VERSION_PAL
if (effectEntry->graphicsDmaStart == effect_gfx_attack_result_text_ROM_START) {
switch (gCurrentLanguage) {
case LANGUAGE_EN:
dma_copy(effectEntry->graphicsDmaStart, effectEntry->graphicsDmaEnd, sharedData->graphics);
break;
case LANGUAGE_DE:
dma_copy(effect_gfx_attack_result_text_de_ROM_START, effect_gfx_attack_result_text_de_ROM_END, sharedData->graphics);
break;
case LANGUAGE_FR:
dma_copy(effect_gfx_attack_result_text_fr_ROM_START, effect_gfx_attack_result_text_fr_ROM_END, sharedData->graphics);
break;
default:
dma_copy(effect_gfx_attack_result_text_es_ROM_START, effect_gfx_attack_result_text_es_ROM_END, sharedData->graphics);
break;
}
} else if (effectEntry->graphicsDmaStart == effect_gfx_chapter_change_ROM_START) {
switch (gCurrentLanguage) {
case LANGUAGE_EN:
dma_copy(effectEntry->graphicsDmaStart, effectEntry->graphicsDmaEnd, sharedData->graphics);
break;
case LANGUAGE_DE:
dma_copy(effect_chapter_change_gfx_de_ROM_START, effect_chapter_change_gfx_de_ROM_END, sharedData->graphics);
break;
case LANGUAGE_FR:
dma_copy(effect_chapter_change_gfx_fr_ROM_START, effect_chapter_change_gfx_fr_ROM_END, sharedData->graphics);
break;
default:
dma_copy(effect_chapter_change_gfx_es_ROM_START, effect_chapter_change_gfx_es_ROM_END, sharedData->graphics);
break;
}
} else
#endif
dma_copy(effectEntry->graphicsDmaStart, effectEntry->graphicsDmaEnd, sharedData->graphics);
}
// Initialize the newly loaded effect data

View File

@ -0,0 +1,28 @@
#include "include_asset.h"
INCLUDE_IMG("effects/gfx/de/battle/lucky.png", D_PAL_09000000_3BAAF0);
INCLUDE_IMG("effects/gfx/de/battle/miss.png", D_PAL_09000400_3BAEF0);
INCLUDE_IMG("effects/gfx/de/battle/good.png", D_PAL_09000800_3BB2F0);
INCLUDE_IMG("effects/gfx/de/battle/nice.png", D_PAL_09000C00_3BB6F0);
INCLUDE_IMG("effects/gfx/de/battle/super.png", D_PAL_09001000_3BBAF0);
INCLUDE_IMG("effects/gfx/de/D_PAL_09001400_3BBEF0.png", D_PAL_09001400_3BBEF0);
#include "effects/gfx/de/D_PAL_09001500_3BBFF0.gfx.inc.c"
#include "effects/gfx/de/D_PAL_090015A8_3BC098.gfx.inc.c"
#include "effects/gfx/de/D_PAL_09001610_3BC100.gfx.inc.c"
#include "effects/gfx/de/D_PAL_09001658_3BC148.gfx.inc.c"
#include "effects/gfx/de/D_PAL_090016A0_3BC190.gfx.inc.c"
#include "effects/gfx/de/D_PAL_090016E8_3BC1D8.gfx.inc.c"
#include "effects/gfx/de/D_PAL_09001730_3BC220.gfx.inc.c"
#include "effects/gfx/de/D_PAL_09001778_3BC268.vtx.inc.c"
#include "effects/gfx/de/D_PAL_090017B8_3BC2A8.vtx.inc.c"
#include "effects/gfx/de/D_PAL_090017F8_3BC2E8.vtx.inc.c"
#include "effects/gfx/de/D_PAL_09001838_3BC328.vtx.inc.c"
#include "effects/gfx/de/D_PAL_09001878_3BC368.vtx.inc.c"
#include "effects/gfx/de/D_PAL_090018B8_3BC3A8.gfx.inc.c"
#include "effects/gfx/de/D_PAL_090018D8_3BC3C8.gfx.inc.c"
#include "effects/gfx/de/D_PAL_090018F8_3BC3E8.gfx.inc.c"
#include "effects/gfx/de/D_PAL_09001918_3BC408.gfx.inc.c"
#include "effects/gfx/de/D_PAL_09001938_3BC428.gfx.inc.c"

View File

@ -0,0 +1,28 @@
#include "include_asset.h"
INCLUDE_IMG("effects/gfx/es/battle/lucky.png", D_PAL_09000000_3BDDB0);
INCLUDE_IMG("effects/gfx/es/battle/miss.png", D_PAL_09000400_3BE1B0);
INCLUDE_IMG("effects/gfx/es/battle/good.png", D_PAL_09000800_3BE5B0);
INCLUDE_IMG("effects/gfx/es/battle/nice.png", D_PAL_09000C00_3BE9B0);
INCLUDE_IMG("effects/gfx/es/battle/super.png", D_PAL_09001000_3BEDB0);
INCLUDE_IMG("effects/gfx/es/D_PAL_09001400_3BF1B0.png", D_PAL_09001400_3BF1B0);
#include "effects/gfx/es/D_PAL_09001500_3BF2B0.gfx.inc.c"
#include "effects/gfx/es/D_PAL_090015A8_3BF358.gfx.inc.c"
#include "effects/gfx/es/D_PAL_09001610_3BF3C0.gfx.inc.c"
#include "effects/gfx/es/D_PAL_09001658_3BF408.gfx.inc.c"
#include "effects/gfx/es/D_PAL_090016A0_3BF450.gfx.inc.c"
#include "effects/gfx/es/D_PAL_090016E8_3BF498.gfx.inc.c"
#include "effects/gfx/es/D_PAL_09001730_3BF4E0.gfx.inc.c"
#include "effects/gfx/es/D_PAL_09001778_3BF528.vtx.inc.c"
#include "effects/gfx/es/D_PAL_090017B8_3BF568.vtx.inc.c"
#include "effects/gfx/es/D_PAL_090017F8_3BF5A8.vtx.inc.c"
#include "effects/gfx/es/D_PAL_09001838_3BF5E8.vtx.inc.c"
#include "effects/gfx/es/D_PAL_09001878_3BF628.vtx.inc.c"
#include "effects/gfx/es/D_PAL_090018B8_3BF668.gfx.inc.c"
#include "effects/gfx/es/D_PAL_090018D8_3BF688.gfx.inc.c"
#include "effects/gfx/es/D_PAL_090018F8_3BF6A8.gfx.inc.c"
#include "effects/gfx/es/D_PAL_09001918_3BF6C8.gfx.inc.c"
#include "effects/gfx/es/D_PAL_09001938_3BF6E8.gfx.inc.c"

View File

@ -0,0 +1,28 @@
#include "include_asset.h"
INCLUDE_IMG("effects/gfx/fr/battle/lucky.png", D_PAL_09000000_3BC450);
INCLUDE_IMG("effects/gfx/fr/battle/miss.png", D_PAL_09000400_3BC850);
INCLUDE_IMG("effects/gfx/fr/battle/good.png", D_PAL_09000800_3BCC50);
INCLUDE_IMG("effects/gfx/fr/battle/nice.png", D_PAL_09000C00_3BD050);
INCLUDE_IMG("effects/gfx/fr/battle/super.png", D_PAL_09001000_3BD450);
INCLUDE_IMG("effects/gfx/fr/D_PAL_09001400_3BD850.png", D_PAL_09001400_3BD850);
#include "effects/gfx/fr/D_PAL_09001500_3BD950.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_090015A8_3BD9F8.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_09001610_3BDA60.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_09001658_3BDAA8.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_090016A0_3BDAF0.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_090016E8_3BDB38.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_09001730_3BDB80.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_09001778_3BDBC8.vtx.inc.c"
#include "effects/gfx/fr/D_PAL_090017B8_3BDC08.vtx.inc.c"
#include "effects/gfx/fr/D_PAL_090017F8_3BDC48.vtx.inc.c"
#include "effects/gfx/fr/D_PAL_09001838_3BDC88.vtx.inc.c"
#include "effects/gfx/fr/D_PAL_09001878_3BDCC8.vtx.inc.c"
#include "effects/gfx/fr/D_PAL_090018B8_3BDD08.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_090018D8_3BDD28.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_090018F8_3BDD48.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_09001918_3BDD68.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_09001938_3BDD88.gfx.inc.c"

View File

@ -0,0 +1,44 @@
#include "include_asset.h"
INCLUDE_IMG("effects/gfx/de/world/ch0.png", D_PAL_09000000_425E60);
INCLUDE_IMG("effects/gfx/de/D_PAL_09000B40_4269A0.png", D_PAL_09000B40_4269A0);
INCLUDE_IMG("effects/gfx/de/world/text_chapter.png", D_PAL_09001680_4274E0);
INCLUDE_IMG("effects/gfx/de/D_PAL_09001B80_4279E0.png", D_PAL_09001B80_4279E0);
INCLUDE_IMG("effects/gfx/de/D_PAL_09002080_427EE0.png", D_PAL_09002080_427EE0);
INCLUDE_IMG("effects/gfx/de/D_PAL_09002580_4283E0.png", D_PAL_09002580_4283E0);
INCLUDE_IMG("effects/gfx/de/world/text_end_of.png", D_PAL_09002A80_4288E0);
INCLUDE_IMG("effects/gfx/de/world/exclamation_point.png", D_PAL_09003AC0_429920);
INCLUDE_IMG("effects/gfx/de/world/ch1.png", D_PAL_09003D40_429BA0);
INCLUDE_IMG("effects/gfx/de/world/ch2.png", D_PAL_09004D40_42ABA0);
INCLUDE_IMG("effects/gfx/de/world/ch3.png", D_PAL_09005D40_42BBA0);
INCLUDE_IMG("effects/gfx/de/world/ch4.png", D_PAL_09006D40_42CBA0);
INCLUDE_IMG("effects/gfx/de/world/ch5.png", D_PAL_09007D40_42DBA0);
INCLUDE_IMG("effects/gfx/de/world/ch6.png", D_PAL_09008D40_42EBA0);
INCLUDE_IMG("effects/gfx/de/world/ch7.png", D_PAL_09009D40_42FBA0);
INCLUDE_IMG("effects/gfx/de/world/ch8.png", D_PAL_0900AD40_430BA0);
INCLUDE_IMG("effects/gfx/de/world/chapter_rainbow.png", D_PAL_0900BD40_431BA0);
#include "effects/gfx/de/D_PAL_0900BE40_431CA0.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900BE88_431CE8.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900BED0_431D30.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900BF18_431D78.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900BF60_431DC0.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900BFA8_431E08.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900BFF0_431E50.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C038_431E98.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C080_431EE0.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C168_431FC8.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C1B0_432010.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C1F8_432058.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C240_4320A0.gfx.inc.c"
//#include "effects/gfx/de/D_PAL_0900C328_432188.gfx.inc.c"
Gfx D_PAL_0900C328_432188[] = {
gsDPSetTextureLUT(G_TT_NONE),
gsDPLoadTextureTile(&D_PAL_09002A80_4288E0[0x820], G_IM_FMT_IA, G_IM_SIZ_8b, 104, 0, 0, 0, 103, 19, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 7, 6, G_TX_NOLOD, G_TX_NOLOD),
gsSPEndDisplayList(),
};
#include "effects/gfx/de/D_PAL_0900C370_4321D0.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C458_4322B8.gfx.inc.c"
#include "effects/gfx/de/D_PAL_0900C540_4323A0.gfx.inc.c"

View File

@ -0,0 +1,44 @@
#include "include_asset.h"
INCLUDE_IMG("effects/gfx/es/world/ch0.png", D_PAL_09000000_43E980);
INCLUDE_IMG("effects/gfx/es/D_PAL_09000B40_43F4C0.png", D_PAL_09000B40_43F4C0);
INCLUDE_IMG("effects/gfx/es/world/text_chapter.png", D_PAL_09001680_440000);
INCLUDE_IMG("effects/gfx/es/D_PAL_09001B80_440500.png", D_PAL_09001B80_440500);
INCLUDE_IMG("effects/gfx/es/D_PAL_09002080_440A00.png", D_PAL_09002080_440A00);
INCLUDE_IMG("effects/gfx/es/D_PAL_09002580_440F00.png", D_PAL_09002580_440F00);
INCLUDE_IMG("effects/gfx/es/world/text_end_of.png", D_PAL_09002A80_441400);
INCLUDE_IMG("effects/gfx/es/world/exclamation_point.png", D_PAL_09003AC0_442440);
INCLUDE_IMG("effects/gfx/es/world/ch1.png", D_PAL_09003D40_4426C0);
INCLUDE_IMG("effects/gfx/es/world/ch2.png", D_PAL_09004D40_4436C0);
INCLUDE_IMG("effects/gfx/es/world/ch3.png", D_PAL_09005D40_4446C0);
INCLUDE_IMG("effects/gfx/es/world/ch4.png", D_PAL_09006D40_4456C0);
INCLUDE_IMG("effects/gfx/es/world/ch5.png", D_PAL_09007D40_4466C0);
INCLUDE_IMG("effects/gfx/es/world/ch6.png", D_PAL_09008D40_4476C0);
INCLUDE_IMG("effects/gfx/es/world/ch7.png", D_PAL_09009D40_4486C0);
INCLUDE_IMG("effects/gfx/es/world/ch8.png", D_PAL_0900AD40_4496C0);
INCLUDE_IMG("effects/gfx/es/world/chapter_rainbow.png", D_PAL_0900BD40_44A6C0);
#include "effects/gfx/es/D_PAL_0900BE40_44A7C0.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900BE88_44A808.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900BED0_44A850.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900BF18_44A898.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900BF60_44A8E0.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900BFA8_44A928.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900BFF0_44A970.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C038_44A9B8.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C080_44AA00.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C168_44AAE8.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C1B0_44AB30.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C1F8_44AB78.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C240_44ABC0.gfx.inc.c"
//#include "effects/gfx/es/D_PAL_0900C328_44ACA8.gfx.inc.c"
Gfx D_PAL_0900C328_44ACA8[] = {
gsDPSetTextureLUT(G_TT_NONE),
gsDPLoadTextureTile(&D_PAL_09002A80_441400[0x820], G_IM_FMT_IA, G_IM_SIZ_8b, 104, 0, 0, 0, 103, 19, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 7, 6, G_TX_NOLOD, G_TX_NOLOD),
gsSPEndDisplayList(),
};
#include "effects/gfx/es/D_PAL_0900C370_44ACF0.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C458_44ADD8.gfx.inc.c"
#include "effects/gfx/es/D_PAL_0900C540_44AEC0.gfx.inc.c"

View File

@ -0,0 +1,44 @@
#include "include_asset.h"
INCLUDE_IMG("effects/gfx/fr/world/ch0.png", D_PAL_09000000_4323F0);
INCLUDE_IMG("effects/gfx/fr/D_PAL_09000B40_432F30.png", D_PAL_09000B40_432F30);
INCLUDE_IMG("effects/gfx/fr/world/text_chapter.png", D_PAL_09001680_433A70);
INCLUDE_IMG("effects/gfx/fr/D_PAL_09001B80_433F70.png", D_PAL_09001B80_433F70);
INCLUDE_IMG("effects/gfx/fr/D_PAL_09002080_434470.png", D_PAL_09002080_434470);
INCLUDE_IMG("effects/gfx/fr/D_PAL_09002580_434970.png", D_PAL_09002580_434970);
INCLUDE_IMG("effects/gfx/fr/world/text_end_of.png", D_PAL_09002A80_434E70);
INCLUDE_IMG("effects/gfx/fr/world/exclamation_point.png", D_PAL_09003AC0_435EB0);
INCLUDE_IMG("effects/gfx/fr/world/ch1.png", D_PAL_09003D40_436130);
INCLUDE_IMG("effects/gfx/fr/world/ch2.png", D_PAL_09004D40_437130);
INCLUDE_IMG("effects/gfx/fr/world/ch3.png", D_PAL_09005D40_438130);
INCLUDE_IMG("effects/gfx/fr/world/ch4.png", D_PAL_09006D40_439130);
INCLUDE_IMG("effects/gfx/fr/world/ch5.png", D_PAL_09007D40_43A130);
INCLUDE_IMG("effects/gfx/fr/world/ch6.png", D_PAL_09008D40_43B130);
INCLUDE_IMG("effects/gfx/fr/world/ch7.png", D_PAL_09009D40_43C130);
INCLUDE_IMG("effects/gfx/fr/world/ch8.png", D_PAL_0900AD40_43D130);
INCLUDE_IMG("effects/gfx/fr/world/chapter_rainbow.png", D_PAL_0900BD40_43E130);
#include "effects/gfx/fr/D_PAL_0900BE40_43E230.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900BE88_43E278.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900BED0_43E2C0.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900BF18_43E308.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900BF60_43E350.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900BFA8_43E398.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900BFF0_43E3E0.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C038_43E428.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C080_43E470.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C168_43E558.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C1B0_43E5A0.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C1F8_43E5E8.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C240_43E630.gfx.inc.c"
//#include "effects/gfx/fr/D_PAL_0900C328_43E718.gfx.inc.c"
Gfx D_PAL_0900C328_43E718[] = {
gsDPSetTextureLUT(G_TT_NONE),
gsDPLoadTextureTile(&D_PAL_09002A80_434E70[0x820], G_IM_FMT_IA, G_IM_SIZ_8b, 104, 0, 0, 0, 103, 19, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, 7, 6, G_TX_NOLOD, G_TX_NOLOD),
gsSPEndDisplayList(),
};
#include "effects/gfx/fr/D_PAL_0900C370_43E760.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C458_43E848.gfx.inc.c"
#include "effects/gfx/fr/D_PAL_0900C540_43E930.gfx.inc.c"

View File

@ -1270,6 +1270,9 @@ void update_encounters_pre_battle(void) {
switch (gEncounterSubState) {
case ENCOUNTER_SUBSTATE_PRE_BATTLE_INIT:
#if VERSION_PAL
gPlayerStatusPtr->pitch = 0;
#endif
currentEncounter->fadeOutAmount = 0;
currentEncounter->substateDelay = 1;
currentEncounter->fadeOutAccel = 1;

View File

@ -368,7 +368,7 @@ API_CALLABLE(BindNpcAI) {
}
if (enemy->aiScript != NULL) {
#if VERSION_JP
#if VERSION_JP || VERSION_PAL
groupFlags = enemy->aiScript->groupFlags;
#endif
kill_script_by_ID(enemy->aiScriptID);
@ -421,7 +421,7 @@ API_CALLABLE(RestartNpcAI) {
}
if (enemy->aiScript != NULL) {
#if VERSION_JP
#if VERSION_JP || VERSION_PAL
groupFlags = enemy->aiScript->groupFlags;
#endif
kill_script_by_ID(enemy->aiScriptID);
@ -542,7 +542,7 @@ API_CALLABLE(RestartNpcAux) {
}
if (enemy->auxScript != NULL) {
#if VERSION_JP
#if VERSION_JP || VERSION_PAL
groupFlags = enemy->auxScript->groupFlags;
#endif
kill_script_by_ID(enemy->auxScriptID);

View File

@ -1022,8 +1022,6 @@ void filemenu_draw_contents_copy_arrow(MenuPanel* menu, s32 baseX, s32 baseY, s3
}
void func_PAL_8002B574(void); // TODO identify
// TODO bad match, look into
void filemenu_init(s32 mode) {
MenuPanel** panelIt;

View File

@ -158,9 +158,6 @@ void filemenu_draw_contents_file_create_header(
#endif
}
#if VERSION_PAL
INCLUDE_ASM(void, "filemenu/filemenu_createfile", filemenu_draw_contents_choose_name);
#else
s32 msg_get_print_char_width(s32 character, s32 charset, s32 variation, f32 msgScale, s32 overrideCharWidth, u8 flags);
#if VERSION_PAL
@ -177,17 +174,16 @@ void filemenu_draw_contents_choose_name(
s32 width, s32 height,
s32 opacity, s32 darkening
) {
s32 layer;
s32 changeLayoutOffset;
s32 currentPage;
s32 previousPage;
s32 page;
s32 row, col;
s32 xOffset, yOffset;
s32 c, specialChar;
s32 layer;
s32 flags;
s32 c;
s32 color;
s32 xNudge;
s32 flags;
Window* window = &gWindows[WIN_FILES_INPUT_KEYBOARD];
if ((window->flags & WINDOW_FLAG_INITIAL_ANIMATION) && window->fpUpdate.func == filemenu_update_change_layout) {
@ -220,6 +216,8 @@ void filemenu_draw_contents_choose_name(
for (col = 0; col < menu->numCols; col++) {
c = menu->gridData[page * menu->numCols * menu->numRows + menu->numCols * row + col];
if (c != MSG_CHAR_READ_SPACE) {
s32 xNudge, specialChar;
if (col == menu->col && row == menu->row) {
flags = 8;
color = 0;
@ -280,6 +278,8 @@ void filemenu_draw_contents_choose_name(
for (row = 0; row < menu->numRows; row++) {
c = menu->gridData[menu->state * menu->numCols * menu->numRows + menu->numCols * row + col];
if (c != MSG_CHAR_READ_SPACE) {
s32 xNudge, specialChar;
if (col == menu->col && row == menu->row) {
flags = 8;
color = 0;
@ -341,7 +341,6 @@ void filemenu_draw_contents_choose_name(
baseY + 13 + menu->row * FILEMENU_ROW_AMT);
}
}
#endif
void filemenu_choose_name_init(MenuPanel* menu) {
s32 i;

View File

@ -87,16 +87,16 @@ void filemenu_info_draw_message_contents(
xOffset += D_filemenu_802508FC[gCurrentLanguage];
draw_number(filemenu_iterFileIdx + 1, baseX + xOffset, baseY + 0x14, 0, 0, 255, 3);
xOffset += D_filemenu_80250950[gCurrentLanguage];
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_HAS_BEEN_CREATED), baseX + xOffset, baseY + 18, 255, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PAL_PERIOD_30), baseX + xOffset, baseY + 18, 255, 0, 0);
break;
case FM_MESSAGE_CREATED:
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PAL_UNK2), baseX + 10, baseY + 4, 255, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PAL_ARTICLE), baseX + 10, baseY + 4, 255, 0, 0);
xOffset = D_filemenu_80250968[gCurrentLanguage] + 10;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_26), baseX + xOffset, baseY + 4, 255, 0, 0);
xOffset += D_filemenu_802508FC[gCurrentLanguage];
draw_number(filemenu_menus[FILE_MENU_MAIN]->selected + 1, baseX + xOffset, baseY + 6, 0, 0, 255, 3);
xOffset++;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PAL_UNK1), baseX + xOffset, baseY + 4, 255, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_HAS_BEEN_CREATED), baseX + xOffset, baseY + 4, 255, 0, 0);
break;
}
#else

View File

@ -27,23 +27,36 @@ extern HudScript HES_OptionStereoOn;
extern HudScript HES_OptionStereoOff;
#if VERSION_PAL
extern u8 D_filemenu_802508D0[4];
extern u8 D_filemenu_802508D4[4];
extern u8 D_filemenu_802508D8[4];
extern u8 D_filemenu_802508DC[4];
extern u8 D_filemenu_802508E0[4];
extern u8 D_filemenu_802508E4[4];
extern u8 D_filemenu_802508E8[4];
extern u8 D_filemenu_802508EC[4];
extern u8 D_filemenu_802508F0[4];
extern u8 D_filemenu_802508F4[4];
extern u8 D_filemenu_80250938[4];
extern u8 D_filemenu_8025093C[4];
#define COPY_OFFSET_X (D_filemenu_8025093C[gCurrentLanguage])
#define SAVE_OFFSET_X (D_filemenu_80250938[gCurrentLanguage])
extern u8 D_filemenu_802508D0[4];
extern u8 D_filemenu_802508D4[4];
extern u8 D_filemenu_802508D8[4];
extern u8 D_filemenu_802508DC[4];
extern u8 D_filemenu_802508E0[4];
extern u8 D_filemenu_802508E4[4];
extern u8 D_filemenu_802508E8[4];
extern u8 D_filemenu_802508EC[4];
extern u8 D_filemenu_802508F0[4];
extern u8 D_filemenu_802508F4[4];
extern u16 D_filemenu_80250900[4];
extern u8 D_filemenu_80250910[16];
extern u8 D_filemenu_80250920[4];
extern u8 D_filemenu_80250938[4];
extern u8 D_filemenu_8025093C[4];
extern u16 D_filemenu_80250940[4];
extern u8 D_filemenu_80250954[4];
#define COPY_OFFSET_X (D_filemenu_8025093C[gCurrentLanguage])
#define SAVE_OFFSET_X (D_filemenu_80250938[gCurrentLanguage])
#define SELECT_CONFIRM_PROMPT_WIDTH (D_filemenu_80250900[gCurrentLanguage])
#define DELETE_CONFIRM_PROMPT_WIDTH (D_filemenu_80250920[gCurrentLanguage])
#define FILE_COPIED_MESSAGE_WIDTH (D_filemenu_80250954[gCurrentLanguage])
#define COPY_CONFIRM_PROMPT_WIDTH (D_filemenu_80250940[gCurrentLanguage])
#else
#define SAVE_OFFSET_X 25
#define COPY_OFFSET_X 16
#define SAVE_OFFSET_X 25
#define COPY_OFFSET_X 16
#define SELECT_CONFIRM_PROMPT_WIDTH 192
#define DELETE_CONFIRM_PROMPT_WIDTH 118
#define FILE_COPIED_MESSAGE_WIDTH 154
#define COPY_CONFIRM_PROMPT_WIDTH 182
#endif
BSS u8 filemenu_filename[8];
@ -427,12 +440,14 @@ void filemenu_draw_contents_option_left(
}
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_DELETE_FILE), baseX + offset + OFFSET_WIDTH, baseY + 2, 255, 0, 1);
#else
if (menu->state != FM_MAIN_SELECT_LANG_DUMMY) {
if (menu->col == 0 && menu->row == 2) {
filemenu_set_cursor_goal_pos(WIN_FILES_OPTION_LEFT, baseX, baseY + 8);
}
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_DELETE_FILE), baseX + 8 + OFFSET_WIDTH, baseY + 2, 255, 0, 1);
if (menu->state == FM_MAIN_SELECT_LANG_DUMMY) {
return;
}
if (menu->col == 0 && menu->row == 2) {
filemenu_set_cursor_goal_pos(WIN_FILES_OPTION_LEFT, baseX, baseY + 8);
}
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_DELETE_FILE), baseX + 8 + OFFSET_WIDTH, baseY + 2, 255, 0, 1);
#endif
}
@ -623,15 +638,15 @@ void filemenu_draw_contents_file_title(
filemenu_set_cursor_goal_pos(fileIdx + 60, baseX - 3, baseY + 8);
}
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_OK), baseX + FILE_X, baseY + 1, 255, 0, 1);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PAL_FILE_20), baseX + FILE_X, baseY + 1, 255, 0, 1);
if (!gSaveSlotHasData[fileIdx]) {
filemenu_draw_message(filemenu_get_menu_message(fileIdx + FILE_MESSAGE_PAL_UNK3),
filemenu_draw_message(filemenu_get_menu_message(fileIdx + FILE_MESSAGE_PAL_FILENUM_1),
baseX + D_filemenu_802508D0[gCurrentLanguage], baseY + 1, 255, 0, 1);
} else {
s32 tmp = D_filemenu_802508D0[gCurrentLanguage];
filemenu_draw_message(filemenu_get_menu_message(fileIdx + FILE_MESSAGE_PAL_UNK3),
filemenu_draw_message(filemenu_get_menu_message(fileIdx + FILE_MESSAGE_PAL_FILENUM_1),
baseX + tmp, baseY + 1, 255, 0, 1);
tmp += D_filemenu_802508D4[gCurrentLanguage];
@ -783,9 +798,6 @@ void filemenu_main_init(MenuPanel* menu) {
menu->initialized = TRUE;
}
#if VERSION_PAL
INCLUDE_ASM(void, "filemenu/filemenu_main", filemenu_main_handle_input);
#else
void filemenu_main_handle_input(MenuPanel* menu) {
s32 originalSelected = menu->selected;
s32 i;
@ -838,7 +850,8 @@ void filemenu_main_handle_input(MenuPanel* menu) {
menu->col = 0;
}
break;
case FM_MAIN_SELECT_DELETE: // TODO required to duplicate cases 1-4 instead of using fallthrough
case FM_MAIN_SELECT_DELETE:
#if !VERSION_PAL
// force selection to column 0 when navigating up from bottom row
if (menu->col == 1 && (u8) menu->row < 2) {
menu->col = 0;
@ -858,7 +871,9 @@ void filemenu_main_handle_input(MenuPanel* menu) {
menu->col = 1;
}
break;
#endif
case FM_MAIN_SELECT_COPY_FROM:
#if !VERSION_PAL
// force selection to column 0 when navigating up from bottom row
if (menu->col == 1 && (u8) menu->row < 2) {
menu->col = 0;
@ -868,6 +883,7 @@ void filemenu_main_handle_input(MenuPanel* menu) {
menu->col = 1;
}
break;
#endif
case FM_MAIN_SELECT_COPY_TO:
// force selection to column 0 when navigating up from bottom row
if (menu->col == 1 && (u8) menu->row < 2) {
@ -1002,7 +1018,7 @@ void filemenu_main_handle_input(MenuPanel* menu) {
gWindows[WIN_FILES_CONFIRM_OPTIONS].pos.x = CENTER_WINDOW_X(WIN_FILES_CONFIRM_OPTIONS);
gWindows[WIN_FILES_CONFIRM_PROMPT].pos.y = -29;
gWindows[WIN_FILES_CONFIRM_PROMPT].width = 192;
gWindows[WIN_FILES_CONFIRM_PROMPT].width = SELECT_CONFIRM_PROMPT_WIDTH;
gWindows[WIN_FILES_CONFIRM_PROMPT].height = 25;
gWindows[WIN_FILES_CONFIRM_PROMPT].pos.x = CENTER_WINDOW_X(WIN_FILES_CONFIRM_PROMPT);
@ -1013,6 +1029,9 @@ void filemenu_main_handle_input(MenuPanel* menu) {
}
break;
case FM_MAIN_SELECT_DELETE:
#if VERSION_PAL
gWindows[WIN_FILES_TITLE].width = 211;
#endif
if (menu->selected == FM_MAIN_OPT_CANCEL) {
// selected "Cancel" button
sfx_play_sound(SOUND_MENU_NEXT);
@ -1036,7 +1055,7 @@ void filemenu_main_handle_input(MenuPanel* menu) {
gWindows[WIN_FILES_CONFIRM_OPTIONS].pos.x = CENTER_WINDOW_X(WIN_FILES_CONFIRM_OPTIONS);
gWindows[WIN_FILES_CONFIRM_PROMPT].pos.y = -29;
gWindows[WIN_FILES_CONFIRM_PROMPT].width = 118;
gWindows[WIN_FILES_CONFIRM_PROMPT].width = DELETE_CONFIRM_PROMPT_WIDTH;
gWindows[WIN_FILES_CONFIRM_PROMPT].height = 25;
gWindows[WIN_FILES_CONFIRM_PROMPT].pos.x = CENTER_WINDOW_X(WIN_FILES_CONFIRM_PROMPT);
@ -1086,17 +1105,25 @@ void filemenu_main_handle_input(MenuPanel* menu) {
sfx_play_sound(SOUND_MENU_NEXT);
filemenu_currentMenu = FILE_MENU_MESSAGE;
filemenu_menus[filemenu_currentMenu]->state = FM_MESSAGE_COPIED;
gWindows[WIN_FILES_MESSAGE].width = 154;
gWindows[WIN_FILES_MESSAGE].width = FILE_COPIED_MESSAGE_WIDTH;
gWindows[WIN_FILES_MESSAGE].height = 39;
gWindows[WIN_FILES_MESSAGE].pos.x = CENTER_WINDOW_X(WIN_FILES_MESSAGE);
gWindows[WIN_FILES_MESSAGE].pos.y = CENTER_WINDOW_Y(WIN_FILES_MESSAGE);
set_window_update(WIN_FILES_MESSAGE, WINDOW_UPDATE_SHOW);
set_window_update(WIN_FILES_CONFIRM_OPTIONS, WINDOW_UPDATE_HIDE);
#if VERSION_PAL
if (fio_load_game(filemenu_loadedFileIdx)) {
gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx];
fio_save_game(filemenu_iterFileIdx);
gSaveSlotHasData[filemenu_iterFileIdx] = TRUE;
}
#else
fio_load_game(filemenu_loadedFileIdx);
gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx];
fio_save_game(filemenu_iterFileIdx);
gSaveSlotHasData[filemenu_iterFileIdx] = TRUE;
#endif
} else {
MenuPanel* confirmMenu;
@ -1108,7 +1135,7 @@ void filemenu_main_handle_input(MenuPanel* menu) {
gWindows[WIN_FILES_CONFIRM_OPTIONS].pos.x = CENTER_WINDOW_X(WIN_FILES_CONFIRM_OPTIONS);
gWindows[WIN_FILES_CONFIRM_PROMPT].pos.y = -43;
gWindows[WIN_FILES_CONFIRM_PROMPT].width = 182;
gWindows[WIN_FILES_CONFIRM_PROMPT].width = COPY_CONFIRM_PROMPT_WIDTH;
gWindows[WIN_FILES_CONFIRM_PROMPT].height = 39;
gWindows[WIN_FILES_CONFIRM_PROMPT].pos.x = CENTER_WINDOW_X(WIN_FILES_CONFIRM_PROMPT);
@ -1120,6 +1147,7 @@ void filemenu_main_handle_input(MenuPanel* menu) {
}
}
break;
#if !VERSION_PAL
case FM_MAIN_SELECT_LANG_DUMMY:
if (menu->selected == FM_MAIN_OPT_CANCEL) {
// selected "Cancel" button
@ -1158,6 +1186,7 @@ void filemenu_main_handle_input(MenuPanel* menu) {
}
}
break;
#endif
}
}
@ -1167,14 +1196,18 @@ void filemenu_main_handle_input(MenuPanel* menu) {
filemenu_set_selected(menu, 2, 2);
break;
case FM_MAIN_SELECT_DELETE:
#if !VERSION_PAL
filemenu_set_selected(menu, 1, 2);
break;
case FM_MAIN_SELECT_LANG_DUMMY:
filemenu_set_selected(menu, 1, 2);
break;
#endif
case FM_MAIN_SELECT_COPY_FROM:
#if !VERSION_PAL
filemenu_set_selected(menu, 1, 2);
break;
#endif
case FM_MAIN_SELECT_COPY_TO:
filemenu_set_selected(menu, 1, 2);
break;
@ -1218,14 +1251,20 @@ void filemenu_main_handle_input(MenuPanel* menu) {
filemenu_set_selected(menu, (filemenu_loadedFileIdx % 2) * 2, filemenu_loadedFileIdx / 2);
sfx_play_sound(SOUND_MENU_BACK);
break;
#if !VERSION_PAL
case FM_MAIN_SELECT_LANG_DUMMY:
sfx_play_sound(SOUND_MENU_BACK);
set_game_mode(GAME_MODE_END_LANGUAGE_SELECT);
break;
#endif
}
}
}
#if VERSION_PAL
gWindows[WIN_FILES_TITLE].width = D_filemenu_80250910[gCurrentLanguage + menu->state * 4];
gWindows[WIN_FILES_TITLE].pos.x = CENTER_WINDOW_X(WIN_FILES_TITLE);
#endif
}
void filemenu_main_update(MenuPanel* menu) {
// set default styles for all file slot panels

View File

@ -151,127 +151,177 @@ u8 filemenu_msg_33[] = { 0x74, 0x08, 0xFD };
u8 filemenu_msg_34[] = { 0x75, 0x05, 0xFD };
#elif VERSION_PAL
u8 filemenu_msg_24[] = {0x1F, 0xFD};
u8 filemenu_msg_pal_24[] = {0x1F, 0xFD}; // ?[End]
// Select file to start
u8 filemenu_msg_01[] = {0x33, 0x45, 0x4C, 0x45, 0x43, 0x54, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0xF7, 0x54, 0x4F, 0xF7, 0x53, 0x54, 0x41, 0x52, 0x54, 0x1A, 0xFD};
u8 filemenu_msg_01_de[] = {0x37, 0x7A, 0x48, 0x4C, 0x45, 0xF7, 0x45, 0x49, 0x4E, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0x1A, 0xFD};
u8 D_filemenu_8025099C[] = {0x23, 0x48, 0x4F, 0x49, 0x53, 0x49, 0x52, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x1A, 0xFD};
u8 D_filemenu_802509B0[] = {0x25, 0x4C, 0x49, 0x47, 0x45, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0x1A, 0xFD};
u8 filemenu_msg_01_fr[] = {0x23, 0x48, 0x4F, 0x49, 0x53, 0x49, 0x52, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x1A, 0xFD};
u8 filemenu_msg_01_es[] = {0x25, 0x4C, 0x49, 0x47, 0x45, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0x1A, 0xFD};
// Select file to delete
u8 filemenu_msg_02[] = {0x33, 0x45, 0x4C, 0x45, 0x43, 0x54, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0xF7, 0x54, 0x4F, 0xF7, 0x44, 0x45, 0x4C, 0x45, 0x54, 0x45, 0x1A, 0xFD};
u8 filemenu_msg_02_de[] = {0x37, 0x7A, 0x48, 0x4C, 0x45, 0xF7, 0x5A, 0x55, 0xF7, 0x4C, 0x88, 0x53, 0x43, 0x48, 0x45, 0x4E, 0x44, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0x1A, 0xFD};
u8 D_filemenu_802509F4[] = {0x23, 0x48, 0x4F, 0x49, 0x53, 0x49, 0x52, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x77, 0xF7, 0x45, 0x46, 0x46, 0x41, 0x43, 0x45, 0x52, 0x1A, 0xFD};
u8 D_filemenu_80250A10[] = {0x25, 0x4C, 0x49, 0x47, 0x45, 0xF7, 0x45, 0x4C, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xF7, 0x41, 0xF7, 0x42, 0x4F, 0x52, 0x52, 0x41, 0x52, 0x1A, 0xFD};
u8 filemenu_msg_02_fr[] = {0x23, 0x48, 0x4F, 0x49, 0x53, 0x49, 0x52, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x77, 0xF7, 0x45, 0x46, 0x46, 0x41, 0x43, 0x45, 0x52, 0x1A, 0xFD};
u8 filemenu_msg_02_es[] = {0x25, 0x4C, 0x49, 0x47, 0x45, 0xF7, 0x45, 0x4C, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xF7, 0x41, 0xF7, 0x42, 0x4F, 0x52, 0x52, 0x41, 0x52, 0x1A, 0xFD};
// Copy which file
u8 filemenu_msg_03[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x57, 0x48, 0x49, 0x43, 0x48, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_03_de[] = {0x37, 0x45, 0x4C, 0x43, 0x48, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0xF7, 0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0x1F, 0xFD};
u8 D_filemenu_80250A58[] = {0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x53, 0x4F, 0x55, 0x52, 0x43, 0x45, 0x1F, 0xFD};
u8 D_filemenu_80250A68[] = {0x8E, 0x31, 0x55, 0x7D, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x41, 0x53, 0x1F, 0xFD};
u8 filemenu_msg_04[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x57, 0x48, 0x49, 0x43, 0x48, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_04_de[] = {0x37, 0x45, 0x4C, 0x43, 0x48, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0xF7, 0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0x1F, 0xFD};
u8 filemenu_msg_04_fr[] = {0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x53, 0x4F, 0x55, 0x52, 0x43, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_04_es[] = {0x8E, 0x31, 0x55, 0x7D, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x41, 0x53, 0x1F, 0xFD};
// Copy to which file
u8 filemenu_msg_04[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x54, 0x4F, 0xF7, 0x57, 0x48, 0x49, 0x43, 0x48, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_04_de[] = {0x29, 0x4E, 0xF7, 0x57, 0x45, 0x4C, 0x43, 0x48, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0xF7, 0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0x1F, 0xFD};
u8 D_filemenu_80250AB0[] = {0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4E, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x1F, 0xFD};
u8 D_filemenu_80250AC8[] = {0x8E, 0x24, 0x86, 0x4E, 0x44, 0x45, 0xF7, 0x4C, 0x4F, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x41, 0x53, 0x1F, 0xFD};
u8 filemenu_msg_05[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x54, 0x4F, 0xF7, 0x57, 0x48, 0x49, 0x43, 0x48, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_05_de[] = {0x29, 0x4E, 0xF7, 0x57, 0x45, 0x4C, 0x43, 0x48, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0xF7, 0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0x1F, 0xFD};
u8 filemenu_msg_05_fr[] = {0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4E, 0x41, 0x54, 0x49, 0x4F, 0x4E, 0x1F, 0xFD};
u8 filemenu_msg_05_es[] = {0x8E, 0x24, 0x86, 0x4E, 0x44, 0x45, 0xF7, 0x4C, 0x4F, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x41, 0x53, 0x1F, 0xFD};
u8 filemenu_msg_05[] = {0x2E, 0x25, 0x37, 0xFD};
u8 filemenu_msg_05_de[] = {0x2E, 0x45, 0x55, 0xFD};
u8 D_filemenu_80250AE4[] = {0x2E, 0x4F, 0x55, 0x56, 0x45, 0x41, 0x55, 0xFD};
u8 D_filemenu_80250AEC[] = {0x2E, 0x55, 0x45, 0x56, 0x4F, 0xFD};
u8 filemenu_msg_06[] = {0x2C, 0x45, 0x56, 0x45, 0x4C, 0xFD};
u8 D_filemenu_80250AFC[] = {0x2E, 0x49, 0x56, 0x45, 0x41, 0x55, 0xFD};
u8 D_filemenu_80250B04[] = {0x2E, 0x49, 0x56, 0x45, 0x4C, 0xFD};
u8 filemenu_msg_07[] = {0x30, 0x4C, 0x41, 0x59, 0xF7, 0x34, 0x49, 0x4D, 0x45, 0xFD};
u8 filemenu_msg_07_de[] = {0x33, 0x50, 0x49, 0x45, 0x4C, 0x5A, 0x45, 0x49, 0x54, 0xFD};
u8 D_filemenu_80250B24[] = {0x34, 0x45, 0x4D, 0x50, 0x53, 0xFD};
u8 D_filemenu_80250B2C[] = {0x34, 0x49, 0x45, 0x4D, 0x50, 0x4F, 0xFD};
u8 filemenu_msg_08[] = {0x24, 0x45, 0x4C, 0x45, 0x54, 0x45, 0xF7, 0x26, 0x49, 0x4C, 0x45, 0xFD};
u8 filemenu_msg_08_de[] = {0x2C, 0x88, 0x53, 0x43, 0x48, 0x45, 0x4E, 0xFD};
u8 D_filemenu_80250B48[] = {0x25, 0x46, 0x46, 0x41, 0x43, 0x45, 0x52, 0xFD};
u8 D_filemenu_80250B50[] = {0x22, 0x4F, 0x52, 0x52, 0x41, 0x52, 0xFD};
u8 filemenu_msg_09[] = {0x23, 0x41, 0x4E, 0x43, 0x45, 0x4C, 0xFD};
u8 filemenu_msg_09_de[] = {0x21, 0x42, 0x42, 0x52, 0x45, 0x43, 0x48, 0x45, 0x4E, 0xFD};
u8 D_filemenu_80250B6C[] = {0x21, 0x4E, 0x4E, 0x55, 0x4C, 0x45, 0x52, 0xFD};
u8 D_filemenu_80250B74[] = {0x33, 0x41, 0x4C, 0x49, 0x52, 0xFD};
u8 filemenu_msg_10[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x26, 0x49, 0x4C, 0x45, 0xFD};
u8 filemenu_msg_10_de[] = {0x2B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0xFD};
u8 D_filemenu_80250B94[] = {0x23, 0x4F, 0x50, 0x49, 0x45, 0x52, 0xFD};
u8 D_filemenu_80250B9C[] = {0x23, 0x4F, 0x50, 0x49, 0x41, 0x52, 0xFD};
u8 filemenu_msg_11[] = {0x26, 0x49, 0x52, 0x53, 0x54, 0xF7, 0x30, 0x4C, 0x41, 0x59, 0xFD};
u8 filemenu_msg_11_de[] = {0x2E, 0x45, 0x55, 0x45, 0x53, 0xF7, 0x33, 0x50, 0x49, 0x45, 0x4C, 0xFD};
u8 D_filemenu_80250BBC[] = {0x30, 0x52, 0x45, 0x4D, 0x49, 0x7C, 0x52, 0x45, 0xF7, 0x50, 0x41, 0x52, 0x54, 0x49, 0x45, 0xFD};
u8 D_filemenu_80250BCC[] = {0x30, 0x52, 0x49, 0x4D, 0x45, 0x52, 0x41, 0xF7, 0x36, 0x45, 0x5A, 0xFD};
u8 filemenu_msg_12[] = {0x0E, 0xFD};
u8 filemenu_msg_13[] = {0x39, 0x45, 0x53, 0xFD};
u8 filemenu_msg_13_de[] = {0x2A, 0x41, 0xFD};
u8 D_filemenu_80250BE4[] = {0x2F, 0x55, 0x49, 0xFD};
u8 D_filemenu_80250BE8[] = {0x33, 0x81, 0xFD};
u8 filemenu_msg_14[] = {0x2E, 0x4F, 0xFD};
u8 filemenu_msg_14_de[] = {0x2E, 0x45, 0x49, 0x4E, 0xFD};
u8 D_filemenu_80250BF8[] = {0x2E, 0x4F, 0x4E, 0xFD};
u8 D_filemenu_80250BFC[] = {0x2E, 0x4F, 0xFD};
u8 filemenu_msg_15[] = {0x24, 0x45, 0x4C, 0x45, 0x54, 0x45, 0xFD};
u8 filemenu_msg_15_de[] = {0x4C, 0x88, 0x53, 0x43, 0x48, 0x45, 0x4E, 0xFD};
u8 D_filemenu_80250C10[] = {0x25, 0x46, 0x46, 0x41, 0x43, 0x45, 0x52, 0xFD};
u8 D_filemenu_80250C18[] = {0x8E, 0x22, 0x4F, 0x52, 0x52, 0x4F, 0xF7, 0x45, 0x4C, 0xFD};
u8 filemenu_msg_16[] = {0x26, 0x49, 0x4C, 0x45, 0xF7, 0x4E, 0x41, 0x4D, 0x45, 0xF7, 0x49, 0x53, 0xF7, 0x1A, 0xFD};
u8 filemenu_msg_16_de[] = {0x24, 0x45, 0x52, 0xF7, 0x2E, 0x41, 0x4D, 0x45, 0xF7, 0x4C, 0x41, 0x55, 0x54, 0x45, 0x54, 0xF7, 0x1A, 0xFD};
u8 D_filemenu_80250C48[] = {0x2E, 0x4F, 0x4D, 0xF7, 0x44, 0x55, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x1A, 0xFD};
u8 D_filemenu_80250C5C[] = {0x2E, 0x4F, 0x4D, 0x42, 0x52, 0x45, 0xF7, 0x44, 0x45, 0x4C, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xF7, 0x1A, 0xFD};
u8 filemenu_msg_18[] = {0x2F, 0x2B, 0x1F, 0xFD};
u8 D_filemenu_80250C78[] = {0x8E, 0x36, 0x41, 0x4C, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_19[] = {0x26, 0x49, 0x4C, 0x45, 0xFD};
u8 filemenu_msg_19_de[] = {0x24, 0x41, 0x54, 0x45, 0x49, 0xFD};
u8 D_filemenu_80250C90[] = {0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xFD};
u8 D_filemenu_80250C98[] = {0x26, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xFD};
u8 filemenu_msg_20_de[] = {0x24, 0x41, 0x54, 0x0E, 0xFD};
u8 D_filemenu_80250CA8[] = {0x26, 0x49, 0x43, 0x48, 0x0E, 0xFD};
u8 filemenu_msg_21[] = {0x57, 0x49, 0x4C, 0x4C, 0xF7, 0x42, 0x45, 0xF7, 0x44, 0x45, 0x4C, 0x45, 0x54, 0x45, 0x44, 0x0E, 0xFD};
u8 filemenu_msg_21_de[] = {0x57, 0x49, 0x52, 0x44, 0xF7, 0x47, 0x45, 0x4C, 0x88, 0x53, 0x43, 0x48, 0x54, 0x0E, 0xFD};
u8 D_filemenu_80250CD4[] = {0x53, 0x45, 0x52, 0x41, 0xF7, 0x45, 0x46, 0x46, 0x41, 0x43, 0x7D, 0x0E, 0xFD};
u8 D_filemenu_80250CE4[] = {0x53, 0x45, 0x52, 0x78, 0xF7, 0x42, 0x4F, 0x52, 0x52, 0x41, 0x44, 0x4F, 0x0E, 0xFD};
u8 filemenu_msg_22[] = {0x2F, 0x2B, 0xF7, 0x54, 0x4F, 0xF7, 0x43, 0x4F, 0x50, 0x59, 0xF7, 0x54, 0x4F, 0xF7, 0x54, 0x48, 0x49, 0x53, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0x1F, 0xFD};
u8 D_filemenu_80250D10[] = {0x33, 0x4F, 0x4C, 0x4C, 0xF7, 0x41, 0x55, 0x46, 0xF7, 0x44, 0x49, 0x45, 0x53, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0xF7, 0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x54, 0xF7, 0x57, 0x45, 0x52, 0x44, 0x45, 0x4E, 0x1F, 0xFD};
u8 D_filemenu_80250D38[] = {0x23, 0x4F, 0x4E, 0x46, 0x49, 0x52, 0x4D, 0x45, 0x52, 0xF7, 0x4C, 0x41, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x45, 0x1F, 0xFD};
u8 D_filemenu_80250D4C[] = {0x8E, 0x31, 0x55, 0x49, 0x45, 0x52, 0x45, 0x53, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x41, 0x52, 0x4C, 0x4F, 0xF7, 0x41, 0x51, 0x55, 0x81, 0xF7, 0x1F, 0xFD};
u8 filemenu_msg_23[] = {0x33, 0x54, 0x41, 0x52, 0x54, 0xF7, 0x47, 0x41, 0x4D, 0x45, 0xF7, 0x57, 0x49, 0x54, 0x48, 0xFD};
u8 D_filemenu_80250D78[] = {0x33, 0x50, 0x49, 0x45, 0x4C, 0xF7, 0x4D, 0x49, 0x54, 0xFD};
u8 D_filemenu_80250D84[] = {0x23, 0x4F, 0x4D, 0x4D, 0x45, 0x4E, 0x43, 0x45, 0x52, 0xF7, 0x55, 0x4E, 0x45, 0xF7, 0x50, 0x41, 0x52, 0x54, 0x49, 0x45, 0xF7, 0x41, 0x56, 0x45, 0x43, 0xF7, 0x4C, 0x45, 0xFD};
u8 D_filemenu_80250DA4[] = {0x8E, 0x31, 0x55, 0x49, 0x45, 0x52, 0x45, 0x53, 0xF7, 0x45, 0x53, 0x54, 0x45, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0x1F, 0xFD};
u8 D_filemenu_80250DBC[] = {0x42, 0x45, 0x47, 0x49, 0x4E, 0x4E, 0x45, 0x4E, 0x1F, 0xFD};
u8 filemenu_msg_26[] = {0x48, 0x41, 0x53, 0xF7, 0x42, 0x45, 0x45, 0x4E, 0xF7, 0x44, 0x45, 0x4C, 0x45, 0x54, 0x45, 0x44, 0x0E, 0xFD};
u8 D_filemenu_80250DDC[] = {0x57, 0x55, 0x52, 0x44, 0x45, 0xF7, 0x47, 0x45, 0x4C, 0x88, 0x53, 0x43, 0x48, 0x54, 0x0E, 0xFD};
u8 D_filemenu_80250DEC[] = {0x41, 0xF7, 0x7D, 0x54, 0x7D, 0xF7, 0x45, 0x46, 0x46, 0x41, 0x43, 0x7D, 0x0E, 0xFD};
u8 D_filemenu_80250DFC[] = {0x48, 0x41, 0xF7, 0x53, 0x49, 0x44, 0x4F, 0xF7, 0x42, 0x4F, 0x52, 0x52, 0x41, 0x44, 0x4F, 0x0E, 0xFD};
u8 filemenu_msg_27[] = {0xFD};
u8 D_filemenu_80250E14[] = {0x2C, 0x45, 0xFD};
u8 D_filemenu_80250E18[] = {0x25, 0x4C, 0xFD};
u8 filemenu_msg_28[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x46, 0x52, 0x4F, 0x4D, 0xFD};
u8 D_filemenu_80250E28[] = {0x36, 0x4F, 0x4E, 0xFD};
u8 D_filemenu_80250E2C[] = {0x23, 0x4F, 0x50, 0x49, 0x45, 0x52, 0xF7, 0x44, 0x55, 0xFD};
u8 D_filemenu_80250E38[] = {0x23, 0x4F, 0x50, 0x49, 0x41, 0xF7, 0x44, 0x45, 0x4C, 0xFD};
u8 filemenu_msg_29[] = {0x54, 0x4F, 0xFD};
u8 D_filemenu_80250E48[] = {0x4E, 0x41, 0x43, 0x48, 0xFD};
u8 D_filemenu_80250E50[] = {0x41, 0x55, 0xFD};
u8 D_filemenu_80250E54[] = {0x41, 0x4C, 0xFD};
u8 D_filemenu_80250E58[] = {0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0x0E, 0xFD};
// NEW
u8 filemenu_msg_06[] = {0x2E, 0x25, 0x37, 0xFD};
u8 filemenu_msg_06_de[] = {0x2E, 0x45, 0x55, 0xFD};
u8 filemenu_msg_06_fr[] = {0x2E, 0x4F, 0x55, 0x56, 0x45, 0x41, 0x55, 0xFD};
u8 filemenu_msg_06_es[] = {0x2E, 0x55, 0x45, 0x56, 0x4F, 0xFD};
// Level
u8 filemenu_msg_07[] = {0x2C, 0x45, 0x56, 0x45, 0x4C, 0xFD};
u8 filemenu_msg_07_fr[] = {0x2E, 0x49, 0x56, 0x45, 0x41, 0x55, 0xFD};
u8 filemenu_msg_07_es[] = {0x2E, 0x49, 0x56, 0x45, 0x4C, 0xFD};
// Play Time
u8 filemenu_msg_08[] = {0x30, 0x4C, 0x41, 0x59, 0xF7, 0x34, 0x49, 0x4D, 0x45, 0xFD};
u8 filemenu_msg_08_de[] = {0x33, 0x50, 0x49, 0x45, 0x4C, 0x5A, 0x45, 0x49, 0x54, 0xFD};
u8 filemenu_msg_08_fr[] = {0x34, 0x45, 0x4D, 0x50, 0x53, 0xFD};
u8 filemenu_msg_08_es[] = {0x34, 0x49, 0x45, 0x4D, 0x50, 0x4F, 0xFD};
// Delete File
u8 filemenu_msg_09[] = {0x24, 0x45, 0x4C, 0x45, 0x54, 0x45, 0xF7, 0x26, 0x49, 0x4C, 0x45, 0xFD};
u8 filemenu_msg_09_de[] = {0x2C, 0x88, 0x53, 0x43, 0x48, 0x45, 0x4E, 0xFD};
u8 filemenu_msg_09_fr[] = {0x25, 0x46, 0x46, 0x41, 0x43, 0x45, 0x52, 0xFD};
u8 filemenu_msg_09_es[] = {0x22, 0x4F, 0x52, 0x52, 0x41, 0x52, 0xFD};
// Cancel
u8 filemenu_msg_10[] = {0x23, 0x41, 0x4E, 0x43, 0x45, 0x4C, 0xFD};
u8 filemenu_msg_10_de[] = {0x21, 0x42, 0x42, 0x52, 0x45, 0x43, 0x48, 0x45, 0x4E, 0xFD};
u8 filemenu_msg_10_fr[] = {0x21, 0x4E, 0x4E, 0x55, 0x4C, 0x45, 0x52, 0xFD};
u8 filemenu_msg_10_es[] = {0x33, 0x41, 0x4C, 0x49, 0x52, 0xFD};
// Copy File
u8 filemenu_msg_11[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x26, 0x49, 0x4C, 0x45, 0xFD};
u8 filemenu_msg_11_de[] = {0x2B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0xFD};
u8 filemenu_msg_11_fr[] = {0x23, 0x4F, 0x50, 0x49, 0x45, 0x52, 0xFD};
u8 filemenu_msg_11_es[] = {0x23, 0x4F, 0x50, 0x49, 0x41, 0x52, 0xFD};
// First Play
u8 filemenu_msg_12[] = {0x26, 0x49, 0x52, 0x53, 0x54, 0xF7, 0x30, 0x4C, 0x41, 0x59, 0xFD};
u8 filemenu_msg_12_de[] = {0x2E, 0x45, 0x55, 0x45, 0x53, 0xF7, 0x33, 0x50, 0x49, 0x45, 0x4C, 0xFD};
u8 filemenu_msg_12_fr[] = {0x30, 0x52, 0x45, 0x4D, 0x49, 0x7C, 0x52, 0x45, 0xF7, 0x50, 0x41, 0x52, 0x54, 0x49, 0x45, 0xFD};
u8 filemenu_msg_12_es[] = {0x30, 0x52, 0x49, 0x4D, 0x45, 0x52, 0x41, 0xF7, 0x36, 0x45, 0x5A, 0xFD};
u8 filemenu_msg_13[] = {0x0E, 0xFD}; // .[End]
// Yes
u8 filemenu_msg_14[] = {0x39, 0x45, 0x53, 0xFD};
u8 filemenu_msg_14_de[] = {0x2A, 0x41, 0xFD};
u8 filemenu_msg_14_fr[] = {0x2F, 0x55, 0x49, 0xFD};
u8 filemenu_msg_14_es[] = {0x33, 0x81, 0xFD};
// No
u8 filemenu_msg_15[] = {0x2E, 0x4F, 0xFD};
u8 filemenu_msg_15_de[] = {0x2E, 0x45, 0x49, 0x4E, 0xFD};
u8 filemenu_msg_15_fr[] = {0x2E, 0x4F, 0x4E, 0xFD};
u8 filemenu_msg_15_es[] = {0x2E, 0x4F, 0xFD};
// Delete
u8 filemenu_msg_16[] = {0x24, 0x45, 0x4C, 0x45, 0x54, 0x45, 0xFD};
u8 filemenu_msg_16_de[] = {0x4C, 0x88, 0x53, 0x43, 0x48, 0x45, 0x4E, 0xFD};
u8 filemenu_msg_16_fr[] = {0x25, 0x46, 0x46, 0x41, 0x43, 0x45, 0x52, 0xFD};
u8 filemenu_msg_16_es[] = {0x8E, 0x22, 0x4F, 0x52, 0x52, 0x4F, 0xF7, 0x45, 0x4C, 0xFD};
// File name is :
u8 filemenu_msg_19[] = {0x26, 0x49, 0x4C, 0x45, 0xF7, 0x4E, 0x41, 0x4D, 0x45, 0xF7, 0x49, 0x53, 0xF7, 0x1A, 0xFD};
u8 filemenu_msg_19_de[] = {0x24, 0x45, 0x52, 0xF7, 0x2E, 0x41, 0x4D, 0x45, 0xF7, 0x4C, 0x41, 0x55, 0x54, 0x45, 0x54, 0xF7, 0x1A, 0xFD};
u8 filemenu_msg_19_fr[] = {0x2E, 0x4F, 0x4D, 0xF7, 0x44, 0x55, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xF7, 0x1A, 0xFD};
u8 filemenu_msg_19_es[] = {0x2E, 0x4F, 0x4D, 0x42, 0x52, 0x45, 0xF7, 0x44, 0x45, 0x4C, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xF7, 0x1A, 0xFD};
// OK?
u8 filemenu_msg_21[] = {0x2F, 0x2B, 0x1F, 0xFD};
u8 filemenu_msg_21_es[] = {0x8E, 0x36, 0x41, 0x4C, 0x45, 0x1F, 0xFD};
// File
u8 filemenu_msg_22[] = {0x26, 0x49, 0x4C, 0x45, 0xFD};
u8 filemenu_msg_22_de[] = {0x24, 0x41, 0x54, 0x45, 0x49, 0xFD};
u8 filemenu_msg_22_fr[] = {0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0xFD};
u8 filemenu_msg_22_es[] = {0x26, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0xFD};
// <DE> Dat. / <FR/ES> Fich.
u8 filemenu_msg_pal_20_de[] = {0x24, 0x41, 0x54, 0x0E, 0xFD};
u8 filemenu_msg_pal_20_fr_es[] = {0x26, 0x49, 0x43, 0x48, 0x0E, 0xFD};
// will be deleted.
u8 filemenu_msg_23[] = {0x57, 0x49, 0x4C, 0x4C, 0xF7, 0x42, 0x45, 0xF7, 0x44, 0x45, 0x4C, 0x45, 0x54, 0x45, 0x44, 0x0E, 0xFD};
u8 filemenu_msg_23_de[] = {0x57, 0x49, 0x52, 0x44, 0xF7, 0x47, 0x45, 0x4C, 0x88, 0x53, 0x43, 0x48, 0x54, 0x0E, 0xFD};
u8 filemenu_msg_23_fr[] = {0x53, 0x45, 0x52, 0x41, 0xF7, 0x45, 0x46, 0x46, 0x41, 0x43, 0x7D, 0x0E, 0xFD};
u8 filemenu_msg_23_es[] = {0x53, 0x45, 0x52, 0x78, 0xF7, 0x42, 0x4F, 0x52, 0x52, 0x41, 0x44, 0x4F, 0x0E, 0xFD};
// OK to copy to this file?
u8 filemenu_msg_24[] = {0x2F, 0x2B, 0xF7, 0x54, 0x4F, 0xF7, 0x43, 0x4F, 0x50, 0x59, 0xF7, 0x54, 0x4F, 0xF7, 0x54, 0x48, 0x49, 0x53, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_24_de[] = {0x33, 0x4F, 0x4C, 0x4C, 0xF7, 0x41, 0x55, 0x46, 0xF7, 0x44, 0x49, 0x45, 0x53, 0x45, 0xF7, 0x24, 0x41, 0x54, 0x45, 0x49, 0xF7, 0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x54, 0xF7, 0x57, 0x45, 0x52, 0x44, 0x45, 0x4E, 0x1F, 0xFD};
u8 filemenu_msg_24_fr[] = {0x23, 0x4F, 0x4E, 0x46, 0x49, 0x52, 0x4D, 0x45, 0x52, 0xF7, 0x4C, 0x41, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x45, 0x1F, 0xFD};
u8 filemenu_msg_24_es[] = {0x8E, 0x31, 0x55, 0x49, 0x45, 0x52, 0x45, 0x53, 0xF7, 0x43, 0x4F, 0x50, 0x49, 0x41, 0x52, 0x4C, 0x4F, 0xF7, 0x41, 0x51, 0x55, 0x81, 0xF7, 0x1F, 0xFD};
// Start game with
u8 filemenu_msg_25[] = {0x33, 0x54, 0x41, 0x52, 0x54, 0xF7, 0x47, 0x41, 0x4D, 0x45, 0xF7, 0x57, 0x49, 0x54, 0x48, 0xFD};
u8 filemenu_msg_25_de[] = {0x33, 0x50, 0x49, 0x45, 0x4C, 0xF7, 0x4D, 0x49, 0x54, 0xFD};
u8 filemenu_msg_25_fr[] = {0x23, 0x4F, 0x4D, 0x4D, 0x45, 0x4E, 0x43, 0x45, 0x52, 0xF7, 0x55, 0x4E, 0x45, 0xF7, 0x50, 0x41, 0x52, 0x54, 0x49, 0x45, 0xF7, 0x41, 0x56, 0x45, 0x43, 0xF7, 0x4C, 0x45, 0xFD};
u8 filemenu_msg_25_es[] = {0x8E, 0x31, 0x55, 0x49, 0x45, 0x52, 0x45, 0x53, 0xF7, 0x45, 0x53, 0x54, 0x45, 0xF7, 0x46, 0x49, 0x43, 0x48, 0x45, 0x52, 0x4F, 0x1F, 0xFD};
// <DE> beginnen?
u8 filemenu_msg_pal_24_de[] = {0x42, 0x45, 0x47, 0x49, 0x4E, 0x4E, 0x45, 0x4E, 0x1F, 0xFD};
// has been deleted.
u8 filemenu_msg_27[] = {0x48, 0x41, 0x53, 0xF7, 0x42, 0x45, 0x45, 0x4E, 0xF7, 0x44, 0x45, 0x4C, 0x45, 0x54, 0x45, 0x44, 0x0E, 0xFD};
u8 filemenu_msg_27_de[] = {0x57, 0x55, 0x52, 0x44, 0x45, 0xF7, 0x47, 0x45, 0x4C, 0x88, 0x53, 0x43, 0x48, 0x54, 0x0E, 0xFD};
u8 filemenu_msg_27_fr[] = {0x41, 0xF7, 0x7D, 0x54, 0x7D, 0xF7, 0x45, 0x46, 0x46, 0x41, 0x43, 0x7D, 0x0E, 0xFD};
u8 filemenu_msg_27_es[] = {0x48, 0x41, 0xF7, 0x53, 0x49, 0x44, 0x4F, 0xF7, 0x42, 0x4F, 0x52, 0x52, 0x41, 0x44, 0x4F, 0x0E, 0xFD};
// <blank> / Le / El
u8 filemenu_msg_28[] = {0xFD};
u8 filemenu_msg_28_fr[] = {0x2C, 0x45, 0xFD};
u8 filemenu_msg_28_es[] = {0x25, 0x4C, 0xFD};
// Copy from
u8 filemenu_msg_29[] = {0x23, 0x4F, 0x50, 0x59, 0xF7, 0x46, 0x52, 0x4F, 0x4D, 0xFD};
u8 filemenu_msg_29_de[] = {0x36, 0x4F, 0x4E, 0xFD};
u8 filemenu_msg_29_fr[] = {0x23, 0x4F, 0x50, 0x49, 0x45, 0x52, 0xF7, 0x44, 0x55, 0xFD};
u8 filemenu_msg_29_es[] = {0x23, 0x4F, 0x50, 0x49, 0x41, 0xF7, 0x44, 0x45, 0x4C, 0xFD};
// to
u8 filemenu_msg_30[] = {0x54, 0x4F, 0xFD};
u8 filemenu_msg_30_de[] = {0x4E, 0x41, 0x43, 0x48, 0xFD};
u8 filemenu_msg_30_fr[] = {0x41, 0x55, 0xFD};
u8 filemenu_msg_30_es[] = {0x41, 0x4C, 0xFD};
// <DE> kopieren.
u8 filemenu_msg_pal_30_de[] = {0x4B, 0x4F, 0x50, 0x49, 0x45, 0x52, 0x45, 0x4E, 0x0E, 0xFD};
// has been created.
u8 filemenu_msg_31[] = {0x48, 0x41, 0x53, 0xF7, 0x42, 0x45, 0x45, 0x4E, 0xF7, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x0E, 0xFD};
u8 D_filemenu_80250E78[] = {0x57, 0x55, 0x52, 0x44, 0x45, 0xF7, 0x45, 0x52, 0x53, 0x54, 0x45, 0x4C, 0x4C, 0x54, 0x0E, 0xFD};
u8 D_filemenu_80250E88[] = {0x41, 0xF7, 0x7D, 0x54, 0x7D, 0xF7, 0x43, 0x52, 0x7D, 0x7D, 0x0E, 0xFD};
u8 D_filemenu_80250E94[] = {0x48, 0x41, 0xF7, 0x53, 0x49, 0x44, 0x4F, 0xF7, 0x43, 0x52, 0x45, 0x41, 0x44, 0x4F, 0x0E, 0xFD};
u8 filemenu_msg_31_de[] = {0x57, 0x55, 0x52, 0x44, 0x45, 0xF7, 0x45, 0x52, 0x53, 0x54, 0x45, 0x4C, 0x4C, 0x54, 0x0E, 0xFD};
u8 filemenu_msg_31_fr[] = {0x41, 0xF7, 0x7D, 0x54, 0x7D, 0xF7, 0x43, 0x52, 0x7D, 0x7D, 0x0E, 0xFD};
u8 filemenu_msg_31_es[] = {0x48, 0x41, 0xF7, 0x53, 0x49, 0x44, 0x4F, 0xF7, 0x43, 0x52, 0x45, 0x41, 0x44, 0x4F, 0x0E, 0xFD};
// Enter a file name
u8 filemenu_msg_33[] = {0x25, 0x4E, 0x54, 0x45, 0x52, 0xF7, 0x41, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0xF7, 0x4E, 0x41, 0x4D, 0x45, 0x01, 0xFD};
u8 D_filemenu_80250EB8[] = {0x27, 0x49, 0x42, 0xF7, 0x45, 0x49, 0x4E, 0x45, 0x4E, 0xF7, 0x2E, 0x41, 0x4D, 0x45, 0x4E, 0xF7, 0x45, 0x49, 0x4E, 0x01, 0xFD};
u8 D_filemenu_80250ED0[] = {0x25, 0x4E, 0x54, 0x52, 0x45, 0x52, 0xF7, 0x4C, 0x45, 0xF7, 0x4E, 0x4F, 0x4D, 0xF7, 0x44, 0x55, 0xF7, 0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x01, 0xFD};
u8 D_filemenu_80250EEC[] = {0x8D, 0x29, 0x4E, 0x54, 0x52, 0x4F, 0x44, 0x55, 0x43, 0x45, 0xF7, 0x4E, 0x4F, 0x4D, 0x42, 0x52, 0x45, 0x01, 0xFD};
u8 filemenu_msg_36[] = {0x11, 0xFD};
u8 filemenu_msg_37[] = {0x12, 0xFD};
u8 filemenu_msg_38[] = {0x13, 0xFD};
u8 filemenu_msg_39[] = {0x14, 0xFD};
u8 filemenu_msg_32[] = {0x25, 0x4E, 0x54, 0x45, 0x52, 0xF7, 0x41, 0xF7, 0x46, 0x49, 0x4C, 0x45, 0xF7, 0x4E, 0x41, 0x4D, 0x45, 0x01, 0xFD};
u8 filemenu_msg_32_de[] = {0x27, 0x49, 0x42, 0xF7, 0x45, 0x49, 0x4E, 0x45, 0x4E, 0xF7, 0x2E, 0x41, 0x4D, 0x45, 0x4E, 0xF7, 0x45, 0x49, 0x4E, 0x01, 0xFD};
u8 filemenu_msg_32_fr[] = {0x25, 0x4E, 0x54, 0x52, 0x45, 0x52, 0xF7, 0x4C, 0x45, 0xF7, 0x4E, 0x4F, 0x4D, 0xF7, 0x44, 0x55, 0xF7, 0x26, 0x49, 0x43, 0x48, 0x49, 0x45, 0x52, 0x01, 0xFD};
u8 filemenu_msg_32_es[] = {0x8D, 0x29, 0x4E, 0x54, 0x52, 0x4F, 0x44, 0x55, 0x43, 0x45, 0xF7, 0x4E, 0x4F, 0x4D, 0x42, 0x52, 0x45, 0x01, 0xFD};
u8 filemenu_msg_36[] = {0x11, 0xFD}; // 1[End]
u8 filemenu_msg_37[] = {0x12, 0xFD}; // 2[End]
u8 filemenu_msg_38[] = {0x13, 0xFD}; // 3[End]
u8 filemenu_msg_39[] = {0x14, 0xFD}; // 4[End]
u8 filemenu_createfile_gridData[] = {0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x66, 0x6A, 0x6D, 0x6F, 0x73, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x81, 0x82, 0x84, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x10, 0x0E, 0x0D, 0xF7, 0x00, 0x90, 0x91, 0x20, 0xF7, 0xF7, 0xF7, 0xC9, 0xF7, 0xF7, 0xCA, 0xF7, 0xF7};
#else
@ -329,163 +379,210 @@ u8 filemenu_msg_33[] = { 0x1F, 0xFD };
u8 filemenu_msg_34[] = { 0x0E, 0xFD };
#endif
#if VERSION_PAL
u8 *gFileMenuMessages[] = {
0, filemenu_msg_01, filemenu_msg_02, filemenu_msg_03, filemenu_msg_04,
filemenu_msg_05, filemenu_msg_06, filemenu_msg_07, filemenu_msg_08, filemenu_msg_09,
filemenu_msg_10, filemenu_msg_11, filemenu_msg_12, filemenu_msg_13, filemenu_msg_14,
filemenu_msg_15, filemenu_msg_16, filemenu_msg_12, filemenu_msg_18, filemenu_msg_19,
filemenu_msg_19, filemenu_msg_21, filemenu_msg_22, filemenu_msg_23, filemenu_msg_24,
filemenu_msg_19, filemenu_msg_26, filemenu_msg_27, filemenu_msg_28, filemenu_msg_29,
filemenu_msg_12, filemenu_msg_31, filemenu_msg_27, filemenu_msg_33, filemenu_msg_24,
filemenu_msg_12, filemenu_msg_36, filemenu_msg_37, filemenu_msg_38, filemenu_msg_39,
};
#else
s32 gFileMenuMessages[] = {
0x00000000, (s32)filemenu_msg_01, (s32)filemenu_msg_02, (s32)filemenu_msg_03, (s32)filemenu_msg_04,
(s32)filemenu_msg_05, (s32)filemenu_msg_06, (s32)filemenu_msg_07, (s32)filemenu_msg_08, (s32)filemenu_msg_09,
(s32)filemenu_msg_10, (s32)filemenu_msg_11, (s32)filemenu_msg_12, (s32)filemenu_msg_13, (s32)filemenu_msg_14,
(s32)filemenu_msg_15, (s32)filemenu_msg_16, (s32)filemenu_msg_17, (s32)filemenu_msg_18, (s32)filemenu_msg_19,
(s32)filemenu_msg_20, (s32)filemenu_msg_21, (s32)filemenu_msg_22, (s32)filemenu_msg_23, (s32)filemenu_msg_24,
(s32)filemenu_msg_25, (s32)filemenu_msg_26, (s32)filemenu_msg_27, (s32)filemenu_msg_28, (s32)filemenu_msg_29,
(s32)filemenu_msg_30, (s32)filemenu_msg_31, (s32)filemenu_msg_32, (s32)filemenu_msg_33, (s32)filemenu_msg_34
};
[FILE_MESSAGE_NONE] NULL,
[FILE_MESSAGE_SELECT_FILE_TO_START] filemenu_msg_01,
[FILE_MESSAGE_SELECT_FILE_TO_DELETE] filemenu_msg_02,
#if !VERSION_PAL
[FILE_MESSAGE_SELECT_FILE_TO_SAVE] filemenu_msg_03,
#endif
[FILE_MESSAGE_COPY_WHICH_FILE] filemenu_msg_04,
[FILE_MESSAGE_COPY_TO_WHICH_FILE] filemenu_msg_05,
[FILE_MESSAGE_NEW] filemenu_msg_06,
[FILE_MESSAGE_LEVEL] filemenu_msg_07,
[FILE_MESSAGE_PLAY_TIME] filemenu_msg_08,
[FILE_MESSAGE_DELETE_FILE] filemenu_msg_09,
[FILE_MESSAGE_CANCEL] filemenu_msg_10,
[FILE_MESSAGE_COPY_FILE] filemenu_msg_11,
[FILE_MESSAGE_FIRST_PLAY] filemenu_msg_12,
[FILE_MESSAGE_PERIOD_13] filemenu_msg_13,
[FILE_MESSAGE_YES] filemenu_msg_14,
[FILE_MESSAGE_NO] filemenu_msg_15,
[FILE_MESSAGE_DELETE] filemenu_msg_16,
#if !VERSION_PAL
[FILE_MESSAGE_OVERRIDE_TO_NEW_DATA] filemenu_msg_17,
[FILE_MESSAGE_SAVE_OK] filemenu_msg_18,
#endif
[FILE_MESSAGE_FILE_NAME_IS] filemenu_msg_19,
#if VERSION_PAL
[FILE_MESSAGE_PERIOD_20] filemenu_msg_13,
#else
[FILE_MESSAGE_PERIOD_20] filemenu_msg_20,
#endif
[FILE_MESSAGE_OK] filemenu_msg_21,
[FILE_MESSAGE_FILE_22] filemenu_msg_22,
#if VERSION_PAL
[FILE_MESSAGE_PAL_FILE_20] filemenu_msg_22,
#endif
[FILE_MESSAGE_WILL_BE_DELETED] filemenu_msg_23,
[FILE_MESSAGE_OK_TO_COPY_TO_THIS_FILE] filemenu_msg_24,
[FILE_MESSAGE_START_GAME_WITH] filemenu_msg_25,
#if VERSION_PAL
[FILE_MESSAGE_PAL_QUESTION_24] filemenu_msg_pal_24,
[FILE_MESSAGE_FILE_26] filemenu_msg_22,
#else
[FILE_MESSAGE_FILE_26] filemenu_msg_26,
#endif
[FILE_MESSAGE_HAS_BEEN_DELETED] filemenu_msg_27,
[FILE_MESSAGE_28] filemenu_msg_28,
[FILE_MESSAGE_COPY_FROM] filemenu_msg_29,
[FILE_MESSAGE_TO] filemenu_msg_30,
#if VERSION_PAL
[FILE_MESSAGE_PAL_PERIOD_30] filemenu_msg_13,
#endif
[FILE_MESSAGE_HAS_BEEN_CREATED] filemenu_msg_31,
#if VERSION_PAL
[FILE_MESSAGE_PAL_ARTICLE] filemenu_msg_28,
#endif
[FILE_MESSAGE_ENTER_A_FILE_NAME] filemenu_msg_32,
#if VERSION_PAL
[FILE_MESSAGE_QUESTION] filemenu_msg_pal_24,
[FILE_MESSAGE_PERIOD_34] filemenu_msg_13,
[FILE_MESSAGE_PAL_FILENUM_1] filemenu_msg_36,
[FILE_MESSAGE_PAL_FILENUM_2] filemenu_msg_37,
[FILE_MESSAGE_PAL_FILENUM_3] filemenu_msg_38,
[FILE_MESSAGE_PAL_FILENUM_4] filemenu_msg_39,
#else
[FILE_MESSAGE_QUESTION] filemenu_msg_33,
[FILE_MESSAGE_PERIOD_34] filemenu_msg_34,
#endif
};
#if VERSION_PAL
u8* D_filemenu_80251018[] = {
0,
filemenu_msg_01_de,
filemenu_msg_02_de,
filemenu_msg_03_de,
filemenu_msg_04_de,
filemenu_msg_05_de,
filemenu_msg_06,
filemenu_msg_07_de,
filemenu_msg_08_de,
filemenu_msg_09_de,
filemenu_msg_10_de,
filemenu_msg_11_de,
filemenu_msg_12,
filemenu_msg_13_de,
filemenu_msg_14_de,
filemenu_msg_15_de,
filemenu_msg_16_de,
filemenu_msg_12,
filemenu_msg_18,
filemenu_msg_19_de,
filemenu_msg_20_de,
filemenu_msg_21_de,
D_filemenu_80250D10,
D_filemenu_80250D78,
D_filemenu_80250DBC,
filemenu_msg_19_de,
D_filemenu_80250DDC,
filemenu_msg_27,
D_filemenu_80250E28,
D_filemenu_80250E48,
D_filemenu_80250E58,
D_filemenu_80250E78,
filemenu_msg_27,
D_filemenu_80250EB8,
filemenu_msg_24,
filemenu_msg_12,
filemenu_msg_36,
filemenu_msg_37,
filemenu_msg_38,
filemenu_msg_39,
};
u8* D_filemenu_802510B8[] = {
0,
D_filemenu_8025099C,
D_filemenu_802509F4,
D_filemenu_80250A58,
D_filemenu_80250AB0,
D_filemenu_80250AE4,
D_filemenu_80250AFC,
D_filemenu_80250B24,
D_filemenu_80250B48,
D_filemenu_80250B6C,
D_filemenu_80250B94,
D_filemenu_80250BBC,
filemenu_msg_12,
D_filemenu_80250BE4,
D_filemenu_80250BF8,
D_filemenu_80250C10,
D_filemenu_80250C48,
filemenu_msg_12,
filemenu_msg_18,
D_filemenu_80250C90,
D_filemenu_80250CA8,
D_filemenu_80250CD4,
D_filemenu_80250D38,
D_filemenu_80250D84,
filemenu_msg_24,
D_filemenu_80250C90,
D_filemenu_80250DEC,
D_filemenu_80250E14,
D_filemenu_80250E2C,
D_filemenu_80250E50,
filemenu_msg_12,
D_filemenu_80250E88,
filemenu_msg_27,
D_filemenu_80250ED0,
filemenu_msg_24,
filemenu_msg_12,
filemenu_msg_36,
filemenu_msg_37,
filemenu_msg_38,
filemenu_msg_39,
u8* gFileMenuMessages_de[] = {
[FILE_MESSAGE_NONE] NULL,
[FILE_MESSAGE_SELECT_FILE_TO_START] filemenu_msg_01_de,
[FILE_MESSAGE_SELECT_FILE_TO_DELETE] filemenu_msg_02_de,
[FILE_MESSAGE_COPY_WHICH_FILE] filemenu_msg_04_de,
[FILE_MESSAGE_COPY_TO_WHICH_FILE] filemenu_msg_05_de,
[FILE_MESSAGE_NEW] filemenu_msg_06_de,
[FILE_MESSAGE_LEVEL] filemenu_msg_07,
[FILE_MESSAGE_PLAY_TIME] filemenu_msg_08_de,
[FILE_MESSAGE_DELETE_FILE] filemenu_msg_09_de,
[FILE_MESSAGE_CANCEL] filemenu_msg_10_de,
[FILE_MESSAGE_COPY_FILE] filemenu_msg_11_de,
[FILE_MESSAGE_FIRST_PLAY] filemenu_msg_12_de,
[FILE_MESSAGE_PERIOD_13] filemenu_msg_13,
[FILE_MESSAGE_YES] filemenu_msg_14_de,
[FILE_MESSAGE_NO] filemenu_msg_15_de,
[FILE_MESSAGE_DELETE] filemenu_msg_16_de,
[FILE_MESSAGE_FILE_NAME_IS] filemenu_msg_19_de,
[FILE_MESSAGE_PERIOD_20] filemenu_msg_13,
[FILE_MESSAGE_OK] filemenu_msg_21,
[FILE_MESSAGE_FILE_22] filemenu_msg_22_de,
[FILE_MESSAGE_PAL_FILE_20] filemenu_msg_pal_20_de,
[FILE_MESSAGE_WILL_BE_DELETED] filemenu_msg_23_de,
[FILE_MESSAGE_OK_TO_COPY_TO_THIS_FILE] filemenu_msg_24_de,
[FILE_MESSAGE_START_GAME_WITH] filemenu_msg_25_de,
[FILE_MESSAGE_PAL_QUESTION_24] filemenu_msg_pal_24_de,
[FILE_MESSAGE_FILE_26] filemenu_msg_22_de,
[FILE_MESSAGE_HAS_BEEN_DELETED] filemenu_msg_27_de,
[FILE_MESSAGE_28] filemenu_msg_28,
[FILE_MESSAGE_COPY_FROM] filemenu_msg_29_de,
[FILE_MESSAGE_TO] filemenu_msg_30_de,
[FILE_MESSAGE_PAL_PERIOD_30] filemenu_msg_pal_30_de,
[FILE_MESSAGE_HAS_BEEN_CREATED] filemenu_msg_31_de,
[FILE_MESSAGE_PAL_ARTICLE] filemenu_msg_28,
[FILE_MESSAGE_ENTER_A_FILE_NAME] filemenu_msg_32_de,
[FILE_MESSAGE_QUESTION] filemenu_msg_pal_24,
[FILE_MESSAGE_PERIOD_34] filemenu_msg_13,
[FILE_MESSAGE_PAL_FILENUM_1] filemenu_msg_36,
[FILE_MESSAGE_PAL_FILENUM_2] filemenu_msg_37,
[FILE_MESSAGE_PAL_FILENUM_3] filemenu_msg_38,
[FILE_MESSAGE_PAL_FILENUM_4] filemenu_msg_39,
};
u8* D_filemenu_80251158[] = {
0,
D_filemenu_802509B0,
D_filemenu_80250A10,
D_filemenu_80250A68,
D_filemenu_80250AC8,
D_filemenu_80250AEC,
D_filemenu_80250B04,
D_filemenu_80250B2C,
D_filemenu_80250B50,
D_filemenu_80250B74,
D_filemenu_80250B9C,
D_filemenu_80250BCC,
filemenu_msg_12,
D_filemenu_80250BE8,
D_filemenu_80250BFC,
D_filemenu_80250C18,
D_filemenu_80250C5C,
filemenu_msg_12,
D_filemenu_80250C78,
D_filemenu_80250C98,
D_filemenu_80250CA8,
D_filemenu_80250CE4,
D_filemenu_80250D4C,
D_filemenu_80250DA4,
filemenu_msg_24,
D_filemenu_80250C98,
D_filemenu_80250DFC,
D_filemenu_80250E18,
D_filemenu_80250E38,
D_filemenu_80250E54,
filemenu_msg_12,
D_filemenu_80250E94,
D_filemenu_80250E18,
D_filemenu_80250EEC,
filemenu_msg_24,
filemenu_msg_12,
filemenu_msg_36,
filemenu_msg_37,
filemenu_msg_38,
filemenu_msg_39,
u8* gFileMenuMessages_fr[] = {
[FILE_MESSAGE_NONE] NULL,
[FILE_MESSAGE_SELECT_FILE_TO_START] filemenu_msg_01_fr,
[FILE_MESSAGE_SELECT_FILE_TO_DELETE] filemenu_msg_02_fr,
[FILE_MESSAGE_COPY_WHICH_FILE] filemenu_msg_04_fr,
[FILE_MESSAGE_COPY_TO_WHICH_FILE] filemenu_msg_05_fr,
[FILE_MESSAGE_NEW] filemenu_msg_06_fr,
[FILE_MESSAGE_LEVEL] filemenu_msg_07_fr,
[FILE_MESSAGE_PLAY_TIME] filemenu_msg_08_fr,
[FILE_MESSAGE_DELETE_FILE] filemenu_msg_09_fr,
[FILE_MESSAGE_CANCEL] filemenu_msg_10_fr,
[FILE_MESSAGE_COPY_FILE] filemenu_msg_11_fr,
[FILE_MESSAGE_FIRST_PLAY] filemenu_msg_12_fr,
[FILE_MESSAGE_PERIOD_13] filemenu_msg_13,
[FILE_MESSAGE_YES] filemenu_msg_14_fr,
[FILE_MESSAGE_NO] filemenu_msg_15_fr,
[FILE_MESSAGE_DELETE] filemenu_msg_16_fr,
[FILE_MESSAGE_FILE_NAME_IS] filemenu_msg_19_fr,
[FILE_MESSAGE_PERIOD_20] filemenu_msg_13,
[FILE_MESSAGE_OK] filemenu_msg_21,
[FILE_MESSAGE_FILE_22] filemenu_msg_22_fr,
[FILE_MESSAGE_PAL_FILE_20] filemenu_msg_pal_20_fr_es,
[FILE_MESSAGE_WILL_BE_DELETED] filemenu_msg_23_fr,
[FILE_MESSAGE_OK_TO_COPY_TO_THIS_FILE] filemenu_msg_24_fr,
[FILE_MESSAGE_START_GAME_WITH] filemenu_msg_25_fr,
[FILE_MESSAGE_PAL_QUESTION_24] filemenu_msg_pal_24,
[FILE_MESSAGE_FILE_26] filemenu_msg_22_fr,
[FILE_MESSAGE_HAS_BEEN_DELETED] filemenu_msg_27_fr,
[FILE_MESSAGE_28] filemenu_msg_28_fr,
[FILE_MESSAGE_COPY_FROM] filemenu_msg_29_fr,
[FILE_MESSAGE_TO] filemenu_msg_30_fr,
[FILE_MESSAGE_PAL_PERIOD_30] filemenu_msg_13,
[FILE_MESSAGE_HAS_BEEN_CREATED] filemenu_msg_31_fr,
[FILE_MESSAGE_PAL_ARTICLE] filemenu_msg_28,
[FILE_MESSAGE_ENTER_A_FILE_NAME] filemenu_msg_32_fr,
[FILE_MESSAGE_QUESTION] filemenu_msg_pal_24,
[FILE_MESSAGE_PERIOD_34] filemenu_msg_13,
[FILE_MESSAGE_PAL_FILENUM_1] filemenu_msg_36,
[FILE_MESSAGE_PAL_FILENUM_2] filemenu_msg_37,
[FILE_MESSAGE_PAL_FILENUM_3] filemenu_msg_38,
[FILE_MESSAGE_PAL_FILENUM_4] filemenu_msg_39,
};
u8* gFileMenuMessages_es[] = {
[FILE_MESSAGE_NONE] NULL,
[FILE_MESSAGE_SELECT_FILE_TO_START] filemenu_msg_01_es,
[FILE_MESSAGE_SELECT_FILE_TO_DELETE] filemenu_msg_02_es,
[FILE_MESSAGE_COPY_WHICH_FILE] filemenu_msg_04_es,
[FILE_MESSAGE_COPY_TO_WHICH_FILE] filemenu_msg_05_es,
[FILE_MESSAGE_NEW] filemenu_msg_06_es,
[FILE_MESSAGE_LEVEL] filemenu_msg_07_es,
[FILE_MESSAGE_PLAY_TIME] filemenu_msg_08_es,
[FILE_MESSAGE_DELETE_FILE] filemenu_msg_09_es,
[FILE_MESSAGE_CANCEL] filemenu_msg_10_es,
[FILE_MESSAGE_COPY_FILE] filemenu_msg_11_es,
[FILE_MESSAGE_FIRST_PLAY] filemenu_msg_12_es,
[FILE_MESSAGE_PERIOD_13] filemenu_msg_13,
[FILE_MESSAGE_YES] filemenu_msg_14_es,
[FILE_MESSAGE_NO] filemenu_msg_15_es,
[FILE_MESSAGE_DELETE] filemenu_msg_16_es,
[FILE_MESSAGE_FILE_NAME_IS] filemenu_msg_19_es,
[FILE_MESSAGE_PERIOD_20] filemenu_msg_13,
[FILE_MESSAGE_OK] filemenu_msg_21_es,
[FILE_MESSAGE_FILE_22] filemenu_msg_22_es,
[FILE_MESSAGE_PAL_FILE_20] filemenu_msg_pal_20_fr_es,
[FILE_MESSAGE_WILL_BE_DELETED] filemenu_msg_23_es,
[FILE_MESSAGE_OK_TO_COPY_TO_THIS_FILE] filemenu_msg_24_es,
[FILE_MESSAGE_START_GAME_WITH] filemenu_msg_25_es,
[FILE_MESSAGE_PAL_QUESTION_24] filemenu_msg_pal_24,
[FILE_MESSAGE_FILE_26] filemenu_msg_22_es,
[FILE_MESSAGE_HAS_BEEN_DELETED] filemenu_msg_27_es,
[FILE_MESSAGE_28] filemenu_msg_28_es,
[FILE_MESSAGE_COPY_FROM] filemenu_msg_29_es,
[FILE_MESSAGE_TO] filemenu_msg_30_es,
[FILE_MESSAGE_PAL_PERIOD_30] filemenu_msg_13,
[FILE_MESSAGE_HAS_BEEN_CREATED] filemenu_msg_31_es,
[FILE_MESSAGE_PAL_ARTICLE] filemenu_msg_28_es,
[FILE_MESSAGE_ENTER_A_FILE_NAME] filemenu_msg_32_es,
[FILE_MESSAGE_QUESTION] filemenu_msg_pal_24,
[FILE_MESSAGE_PERIOD_34] filemenu_msg_13,
[FILE_MESSAGE_PAL_FILENUM_1] filemenu_msg_36,
[FILE_MESSAGE_PAL_FILENUM_2] filemenu_msg_37,
[FILE_MESSAGE_PAL_FILENUM_3] filemenu_msg_38,
[FILE_MESSAGE_PAL_FILENUM_4] filemenu_msg_39,
};
u8 **gFileMenuMessages_intl[] = {
gFileMenuMessages,
D_filemenu_80251018,
D_filemenu_802510B8,
D_filemenu_80251158,
gFileMenuMessages_de,
gFileMenuMessages_fr,
gFileMenuMessages_es,
};
#endif
@ -661,7 +758,7 @@ u8* filemenu_get_menu_message(s32 idx) {
#if VERSION_PAL
return gFileMenuMessages_intl[gCurrentLanguage][idx];
#else
return (u8*)gFileMenuMessages[idx];
return gFileMenuMessages[idx];
#endif
}

View File

@ -6,27 +6,63 @@
#if VERSION_IQUE
#define DELETE_FILE_DELETE_X 20
#define DELETE_FILE_FILE_X 50
#define DELETE_FILE_NUMBER_X 93
#define DELETE_FILE_QMARK_X 92
#define COPY_FILE_NUMBER_X 49
#define DELETE_FILE_NUMBER_X 43
#define DELETE_FILE_QMARK_X (-1)
#define COPY_FILE_NUMBER_X 39
#define CREATE_FILE_FILE_X 164
#define START_GAME_START_WITH_X 37
#define START_GAME_FILE_X 100
#define START_GAME_NUMBER_X 142
#define START_GAME_QMARK_X 140
#define START_GAME_FILE_X 63
#define START_GAME_NUMBER_X 42
#define START_GAME_QMARK_X (-2)
#define NUMBER_OFFSET_Y 1
#elif VERSION_PAL
extern u8 D_filemenu_80250924[4];
extern u8 D_filemenu_80250928[4];
extern u8 D_filemenu_802508FC[4];
extern u8 D_filemenu_8025092C[4];
extern u8 D_filemenu_80250934[4];
extern u8 D_filemenu_80250960[4];
extern u8 D_filemenu_80250908[4];
extern u8 D_filemenu_802508F8[4];
extern s8 D_filemenu_8025090C[4];
#define DELETE_FILE_DELETE_X (D_filemenu_80250924[gCurrentLanguage])
#define DELETE_FILE_FILE_X (D_filemenu_80250928[gCurrentLanguage])
#define DELETE_FILE_NUMBER_X (D_filemenu_802508FC[gCurrentLanguage])
#define DELETE_FILE_QMARK_X (D_filemenu_8025092C[gCurrentLanguage])
#define COPY_FILE_NUMBER_X (D_filemenu_802508FC[gCurrentLanguage])
#define CREATE_FILE_FILE_X (D_filemenu_80250960[gCurrentLanguage])
#define START_GAME_START_WITH_X 10
#define START_GAME_FILE_X (D_filemenu_80250908[gCurrentLanguage])
#define START_GAME_NUMBER_X (D_filemenu_802508F8[gCurrentLanguage])
#define START_GAME_QMARK_X (D_filemenu_8025090C[gCurrentLanguage])
#define NUMBER_OFFSET_Y 0
#else
#define DELETE_FILE_DELETE_X 10
#define DELETE_FILE_FILE_X 60
#define DELETE_FILE_NUMBER_X 98
#define DELETE_FILE_QMARK_X 99
#define COPY_FILE_NUMBER_X 48
#define DELETE_FILE_NUMBER_X 38
#define DELETE_FILE_QMARK_X 1
#define COPY_FILE_NUMBER_X 38
#define CREATE_FILE_FILE_X 164
#define START_GAME_START_WITH_X 10
#define START_GAME_FILE_X 127
#define START_GAME_NUMBER_X 165
#define START_GAME_QMARK_X 162
#define START_GAME_FILE_X 117
#define START_GAME_NUMBER_X 38
#define START_GAME_QMARK_X (-3)
#define NUMBER_OFFSET_Y 0
#endif
#if VERSION_PAL
extern u8 D_filemenu_80250930[4];
extern u8 D_filemenu_80250954[4];
extern u8 D_filemenu_80250964[4];
#define DELETE_FILE_MESSAGE_WIDTH (D_filemenu_80250930[gCurrentLanguage])
#define COPY_FILE_MESSAGE_WIDTH (D_filemenu_80250954[gCurrentLanguage])
#define CREATE_FILE_MESSAGE_WIDTH (D_filemenu_80250964[gCurrentLanguage])
#else
#define DELETE_FILE_MESSAGE_WIDTH 182
#define COPY_FILE_MESSAGE_WIDTH 154
#define CREATE_FILE_MESSAGE_WIDTH 184
#endif
u8 filemenu_yesno_gridData[] = {
0, 1,
#if !VERSION_PAL
@ -147,9 +183,6 @@ void filemenu_yesno_draw_options_contents(
}
}
#if VERSION_PAL
INCLUDE_ASM(void, "filemenu/filemenu_yesno", filemenu_yesno_draw_prompt_contents);
#else
void filemenu_yesno_draw_prompt_contents(
MenuPanel* menu,
s32 baseX, s32 baseY,
@ -161,20 +194,36 @@ void filemenu_yesno_draw_prompt_contents(
switch (menu->state) {
case FM_CONFIRM_DELETE:
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_DELETE), baseX + DELETE_FILE_DELETE_X, baseY + 4, 0xFF, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_22), baseX + DELETE_FILE_FILE_X, baseY + 4, 0xFF, 0, 0);
draw_number(filemenu_menus[FILE_MENU_MAIN]->selected + 1, baseX + DELETE_FILE_NUMBER_X, baseY + 6 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_NORMAL, MSG_PAL_WHITE, 0xFF, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_QUESTION), baseX + DELETE_FILE_QMARK_X, baseY + 4, 0xFF, 0, 0); break;
xOffset = DELETE_FILE_DELETE_X;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_DELETE), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
xOffset = DELETE_FILE_FILE_X;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_22), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
xOffset += DELETE_FILE_NUMBER_X;
draw_number(filemenu_menus[FILE_MENU_MAIN]->selected + 1, baseX + xOffset, baseY + 6 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_NORMAL, MSG_PAL_WHITE, 0xFF, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
xOffset += DELETE_FILE_QMARK_X;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_QUESTION), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
break;
case FM_CONFIRM_COPY:
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_22), baseX + 10, baseY + 4, 0xFF, 0, 0);
draw_number(filemenu_menus[FILE_MENU_MAIN]->selected + 1, baseX + COPY_FILE_NUMBER_X, baseY + 6 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_NORMAL, MSG_PAL_WHITE, 0xFF, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_WILL_BE_DELETED), baseX + 49, baseY + 4, 0xFF, 0, 0);
xOffset = 10;
#if VERSION_PAL
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_28), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
xOffset += D_filemenu_80250934[gCurrentLanguage];
#endif
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_22), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
xOffset += COPY_FILE_NUMBER_X;
draw_number(filemenu_menus[FILE_MENU_MAIN]->selected + 1, baseX + xOffset, baseY + 6 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_NORMAL, MSG_PAL_WHITE, 0xFF, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
#if !VERSION_IQUE
xOffset++;
#endif
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_WILL_BE_DELETED), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_OK_TO_COPY_TO_THIS_FILE), baseX + 10, baseY + 18, 0xFF, 0, 0);
break;
#if !VERSION_PAL
case FM_CONFIRM_DUMMY:
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_OVERRIDE_TO_NEW_DATA), baseX + 10, baseY + 4, 0xFF, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_SAVE_OK), baseX + 10, baseY + 18, 0xFF, 0, 0);
break;
#endif
case FM_CONFIRM_CREATE:
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_NAME_IS), baseX + 10, baseY + 6, 0xFF, 0, 0);
@ -184,21 +233,33 @@ void filemenu_yesno_draw_prompt_contents(
}
}
xOffset = (147 - (i * 11)) / 2;
xOffset = ((CREATE_FILE_FILE_X - 17) - (i * 11)) / 2;
filemenu_draw_file_name(filemenu_filename, i + 1, baseX + xOffset, baseY + 22, 0xFF, 0, 8, 0xB);
xOffset += (i + 1) * 11;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PERIOD_20), baseX + xOffset, baseY + 22, 0xFF, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_OK), baseX + 70, baseY + 38, 0xFF, 0, 0);
break;
case FM_CONFIRM_START:
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_START_GAME_WITH), baseX + START_GAME_START_WITH_X, baseY + 4, 0xFF, 0, 0);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_22), baseX + START_GAME_FILE_X, baseY + 4, 0xFF, 0, 0);
draw_number(filemenu_menus[FILE_MENU_MAIN]->selected + 1, baseX + START_GAME_NUMBER_X, baseY + 6 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_NORMAL, MSG_PAL_WHITE, 0xFF, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_QUESTION), baseX + START_GAME_QMARK_X, baseY + 4, 0xFF, 0, 0);
xOffset = START_GAME_START_WITH_X;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_START_GAME_WITH), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
#if VERSION_PAL
if (gCurrentLanguage == LANGUAGE_ES) {
break;
}
#endif
xOffset += START_GAME_FILE_X;
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_FILE_22), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
xOffset += START_GAME_NUMBER_X;
draw_number(filemenu_menus[FILE_MENU_MAIN]->selected + 1, baseX + xOffset, baseY + 6 + NUMBER_OFFSET_Y, DRAW_NUMBER_CHARSET_NORMAL, MSG_PAL_WHITE, 0xFF, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
xOffset += START_GAME_QMARK_X;
#if VERSION_PAL
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_PAL_QUESTION_24), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
#else
filemenu_draw_message(filemenu_get_menu_message(FILE_MESSAGE_QUESTION), baseX + xOffset, baseY + 4, 0xFF, 0, 0);
#endif
break;
}
}
#endif
void filemenu_yesno_init(MenuPanel* tab) {
s32 i;
@ -211,9 +272,6 @@ void filemenu_yesno_init(MenuPanel* tab) {
tab->initialized = TRUE;
}
#if VERSION_PAL
INCLUDE_ASM(void, "filemenu/filemenu_yesno", filemenu_yesno_handle_input);
#else
void filemenu_yesno_handle_input(MenuPanel* menu) {
s32 oldSelected = menu->selected;
@ -257,7 +315,7 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
case FM_CONFIRM_DELETE:
filemenu_currentMenu = FILE_MENU_MESSAGE;
filemenu_menus[FILE_MENU_MESSAGE]->state = FM_MESSAGE_DELETED;
gWindows[WIN_FILES_MESSAGE].width = 182;
gWindows[WIN_FILES_MESSAGE].width = DELETE_FILE_MESSAGE_WIDTH;
gWindows[WIN_FILES_MESSAGE].height = 25;
gWindows[WIN_FILES_MESSAGE].pos.x = CENTER_WINDOW_X(WIN_FILES_MESSAGE);
gWindows[WIN_FILES_MESSAGE].pos.y = CENTER_WINDOW_Y(WIN_FILES_MESSAGE);
@ -277,17 +335,26 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
case FM_CONFIRM_COPY:
filemenu_currentMenu = FILE_MENU_MESSAGE;
filemenu_menus[filemenu_currentMenu]->state = FM_MESSAGE_COPIED;
gWindows[WIN_FILES_MESSAGE].width = 154;
gWindows[WIN_FILES_MESSAGE].width = COPY_FILE_MESSAGE_WIDTH;
gWindows[WIN_FILES_MESSAGE].height = 39;
gWindows[WIN_FILES_MESSAGE].pos.x = CENTER_WINDOW_X(WIN_FILES_MESSAGE);
gWindows[WIN_FILES_MESSAGE].pos.y = CENTER_WINDOW_Y(WIN_FILES_MESSAGE);
set_window_update(WIN_FILES_MESSAGE, WINDOW_UPDATE_SHOW);
set_window_update(WIN_FILES_CONFIRM_OPTIONS, (s32)filemenu_update_hidden_name_confirm);
#if VERSION_PAL
if (fio_load_game(filemenu_loadedFileIdx)) {
gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx];
fio_save_game(filemenu_iterFileIdx);
gSaveSlotHasData[filemenu_iterFileIdx] = TRUE;
}
#else
fio_load_game(filemenu_loadedFileIdx);
gSaveSlotMetadata[filemenu_iterFileIdx] = gSaveSlotMetadata[filemenu_loadedFileIdx];
fio_save_game(filemenu_iterFileIdx);
gSaveSlotHasData[filemenu_iterFileIdx] = TRUE;
#endif
break;
#if !VERSION_PAL
case FM_CONFIRM_DUMMY:
filemenu_currentMenu = FILE_MENU_MESSAGE;
filemenu_menus[filemenu_currentMenu]->state = FM_MESSAGE_DUMMY;
@ -301,6 +368,7 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
fio_save_game(filemenu_menus[FILE_MENU_MAIN]->selected);
gSaveSlotHasData[filemenu_menus[FILE_MENU_MAIN]->selected] = TRUE;
break;
#endif
case FM_CONFIRM_CREATE:
clear_player_data();
clear_saved_variables();
@ -330,8 +398,8 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
set_window_update(WIN_FILES_SLOT4_BODY, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_CONFIRM_OPTIONS, (s32)filemenu_update_hidden_name_confirm);
filemenu_currentMenu = FILE_MENU_MESSAGE;
filemenu_menus[FILE_MENU_MESSAGE]->state = FM_MESSAGE_CREATED;
gWindows[WIN_FILES_MESSAGE].width = 184;
filemenu_menus[filemenu_currentMenu]->state = FM_MESSAGE_CREATED;
gWindows[WIN_FILES_MESSAGE].width = CREATE_FILE_MESSAGE_WIDTH;
gWindows[WIN_FILES_MESSAGE].height = 25;
gWindows[WIN_FILES_MESSAGE].pos.x = CENTER_WINDOW_X(WIN_FILES_MESSAGE);
gWindows[WIN_FILES_MESSAGE].pos.y = CENTER_WINDOW_Y(WIN_FILES_MESSAGE);
@ -339,6 +407,35 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
break;
case FM_CONFIRM_START:
slot3 = filemenu_menus[FILE_MENU_MAIN]->selected;
#if VERSION_PAL
if (gGameStatusPtr->soundOutputMode != 1 - gSaveGlobals.useMonoSound ||
slot3 != (u8)gSaveGlobals.lastFileSelected || gCurrentLanguage != gSaveGlobals.language)
{
gSaveGlobals.useMonoSound = 1 - gGameStatusPtr->soundOutputMode;
gSaveGlobals.lastFileSelected = slot3;
gSaveGlobals.language = gCurrentLanguage;
fio_save_globals();
}
if (fio_load_game(slot3)) {
set_game_mode(GAME_MODE_END_FILE_SELECT);
} else {
filemenu_currentMenu = FILE_MENU_MAIN;
slot4 = filemenu_menus[FILE_MENU_MAIN]->selected;
set_window_update(WIN_FILES_TITLE, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_STEREO, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_MONO, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_OPTION_LEFT, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_OPTION_CENTER, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_OPTION_RIGHT, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_OPTION_LEFT, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_SLOT1_BODY, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_SLOT2_BODY, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_SLOT3_BODY, (s32)filemenu_update_show_with_rotation);
set_window_update(WIN_FILES_SLOT4_BODY, (s32)filemenu_update_show_with_rotation);
set_window_update(slot4 + WIN_FILES_SLOT1_BODY, (s32)filemenu_update_deselect_file);
set_window_update(WIN_FILES_CONFIRM_OPTIONS, WINDOW_UPDATE_HIDE);
}
#else
if (gGameStatusPtr->soundOutputMode != 1 - gSaveGlobals.useMonoSound ||
slot3 != (u8)gSaveGlobals.lastFileSelected)
{
@ -348,13 +445,16 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
}
fio_load_game(slot3);
set_game_mode(GAME_MODE_END_FILE_SELECT);
#endif
break;
}
break;
case 1: // NO
switch (menu->state) {
case FM_CONFIRM_DELETE:
#if !VERSION_PAL
case FM_CONFIRM_DUMMY:
#endif
case FM_CONFIRM_COPY:
filemenu_currentMenu = FILE_MENU_MAIN;
set_window_update(WIN_FILES_CONFIRM_OPTIONS, (s32)filemenu_update_hidden_name_confirm);
@ -393,7 +493,9 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
switch (menu->state) {
case FM_CONFIRM_DELETE:
#if !VERSION_PAL
case FM_CONFIRM_DUMMY:
#endif
case FM_CONFIRM_COPY:
filemenu_currentMenu = FILE_MENU_MAIN;
set_window_update(WIN_FILES_CONFIRM_OPTIONS, (s32)filemenu_update_hidden_name_confirm);
@ -422,7 +524,6 @@ void filemenu_yesno_handle_input(MenuPanel* menu) {
}
}
}
#endif
void filemenu_yesno_update(MenuPanel* menu) {
}

175
src/fio.c
View File

@ -11,6 +11,9 @@ typedef struct SaveInfo {
#define GLOBALS_PAGE_2 7
BSS SaveData FetchSaveBuffer;
#if VERSION_PAL
BSS SaveData SaveCheckBuffer;
#endif
BSS SaveInfo LogicalSaveInfo[4]; // 4 save slots presented to the player
BSS SaveInfo PhysicalSaveInfo[6]; // 6 saves as represented on the EEPROM
BSS s32 NextAvailablePhysicalSave;
@ -24,7 +27,37 @@ void fio_deserialize_state(void);
void fio_serialize_state(void);
b32 fio_read_flash(s32 pageNum, void* readBuffer, u32 numBytes);
b32 fio_write_flash(s32 pageNum, s8* readBuffer, u32 numBytes);
void fio_erase_flash(s32 pageNum);
s32 fio_erase_flash(s32 pageNum);
#if VERSION_PAL
b32 save_check_integrity(void) {
u32 i;
s32 *it = (s32*)&gCurrentSaveFile;
s32 *it2 = (s32*)&FetchSaveBuffer;
for (i = 0; i < sizeof(gCurrentSaveFile) / sizeof(*it); i++, it++, it2++) {
if (*it != *it2) {
return TRUE;
}
}
return FALSE;
}
b32 check_fetch_save_integrity(void) {
u32 i;
s32 *it = (s32*)&FetchSaveBuffer;
s32 *it2 = (s32*)&SaveCheckBuffer;
for (i = 0; i < sizeof(FetchSaveBuffer) / sizeof(*it); i++, it++, it2++) {
if (*it != *it2) {
return TRUE;
}
}
return FALSE;
}
#endif
s32 get_spirits_rescued(void) {
s32 storyProgress = evt_get_variable(NULL, GB_StoryProgress);
@ -123,6 +156,9 @@ b32 fio_validate_file_checksum(SaveData* saveData) {
b32 fio_fetch_saved_file_info(void) {
SaveData* fetchBuf = &FetchSaveBuffer; // temps required to match
#if VERSION_PAL
SaveData* checkBuf = &SaveCheckBuffer;
#endif
SaveData* validBuf = fetchBuf;
s32 i, j, minSaveCount;
@ -132,6 +168,27 @@ b32 fio_fetch_saved_file_info(void) {
}
for (i = 0; i < ARRAY_COUNT(PhysicalSaveInfo); i++) {
#if VERSION_PAL
for (j = 0; j < 4; j++) {
fio_read_flash(i, fetchBuf, sizeof(SaveData));
fio_read_flash(i, checkBuf, sizeof(SaveData));
if (!check_fetch_save_integrity()) {
break;
}
}
if (fio_validate_file_checksum(fetchBuf) && j != 4) {
PhysicalSaveInfo[i].slot = validBuf->saveSlot;
PhysicalSaveInfo[i].count = validBuf->saveCount;
// logical saves only track the most recent physical save for each slot
if (LogicalSaveInfo[validBuf->saveSlot].count < validBuf->saveCount) {
LogicalSaveInfo[validBuf->saveSlot].slot = i;
LogicalSaveInfo[validBuf->saveSlot].count = validBuf->saveCount;
}
} else {
PhysicalSaveInfo[i].count = 0;
PhysicalSaveInfo[i].slot = 99;
}
#else
fio_read_flash(i, fetchBuf, sizeof(SaveData));
if (fio_validate_file_checksum(fetchBuf)) {
PhysicalSaveInfo[i].slot = validBuf->saveSlot;
@ -142,6 +199,7 @@ b32 fio_fetch_saved_file_info(void) {
LogicalSaveInfo[validBuf->saveSlot].count = validBuf->saveCount;
}
}
#endif
}
minSaveCount = 0x7FFFFFFF;
@ -165,8 +223,34 @@ b32 fio_fetch_saved_file_info(void) {
}
b32 fio_load_game(s32 saveSlot) {
#if VERSION_PAL
int i;
SaveData *saveData = &gCurrentSaveFile;
SaveData *temp = saveData;
#endif
gGameStatusPtr->saveSlot = saveSlot;
#if VERSION_PAL
for (i = 0; i < 4; i++){
fio_fetch_saved_file_info();
if (LogicalSaveInfo[saveSlot].slot < 0) {
continue;
}
fio_read_flash(LogicalSaveInfo[saveSlot].slot, saveData, sizeof(SaveData));
if (fio_validate_file_checksum(saveData)) {
break;
}
}
if (i != 4) {
if (gGameStatusPtr->saveCount < temp->saveCount) {
gGameStatusPtr->saveCount = temp->saveCount;
}
fio_deserialize_state();
return TRUE;
}
#else
fio_fetch_saved_file_info();
fio_read_flash(LogicalSaveInfo[saveSlot].slot, &gCurrentSaveFile, sizeof(SaveData));
@ -177,29 +261,47 @@ b32 fio_load_game(s32 saveSlot) {
fio_deserialize_state();
return TRUE;
}
#endif
return FALSE;
}
void fio_save_game(s32 saveSlot) {
SaveData* saveData = &gCurrentSaveFile;
#if VERSION_PAL
int i;
#endif
fio_fetch_saved_file_info();
gGameStatusPtr->saveSlot = saveSlot;
fio_serialize_state();
strcpy(gCurrentSaveFile.magicString, MagicSaveString);
strcpy(saveData->magicString, MagicSaveString);
gCurrentSaveFile.saveSlot = saveSlot;
saveData->saveSlot = saveSlot;
gGameStatusPtr->saveCount++;
gCurrentSaveFile.saveCount = gGameStatusPtr->saveCount;
saveData->saveCount = gGameStatusPtr->saveCount;
gCurrentSaveFile.crc1 = 0;
gCurrentSaveFile.crc2 = ~gCurrentSaveFile.crc1;
gCurrentSaveFile.crc1 = fio_calc_file_checksum(&gCurrentSaveFile);
gCurrentSaveFile.crc2 = ~gCurrentSaveFile.crc1;
saveData->crc1 = 0;
saveData->crc2 = ~saveData->crc1;
saveData->crc1 = fio_calc_file_checksum(saveData);
saveData->crc2 = ~saveData->crc1;
#if VERSION_PAL
for (i = 0; i < 4; i++) {
fio_erase_flash(NextAvailablePhysicalSave);
fio_write_flash(NextAvailablePhysicalSave, (s8*)saveData, sizeof(SaveData));
fio_read_flash(NextAvailablePhysicalSave, (s8*)&FetchSaveBuffer, sizeof(SaveData));
if (!save_check_integrity()) {
break;
}
}
#else
fio_erase_flash(NextAvailablePhysicalSave);
fio_write_flash(NextAvailablePhysicalSave, (s8*)&gCurrentSaveFile, sizeof(SaveData));
fio_write_flash(NextAvailablePhysicalSave, (s8*)saveData, sizeof(SaveData));
#endif
}
void fio_erase_game(s32 saveSlot) {
@ -214,6 +316,44 @@ void fio_erase_game(s32 saveSlot) {
}
}
#if VERSION_PAL
b32 func_PAL_8002B574(void) {
int i, j;
SaveData *saveData = &gCurrentSaveFile;
SaveData *temp = saveData;
fio_fetch_saved_file_info();
for (i = 0; i < ARRAY_COUNT(LogicalSaveInfo); i++) {
s32 new_var = FALSE; // TODO this match doesn't satisfy me :(
if (LogicalSaveInfo[i].slot >= 0) {
for (j = 0; j < 4; j++) {
fio_read_flash(LogicalSaveInfo[i].slot, temp, sizeof(SaveData));
if (fio_validate_file_checksum(temp)) {
break;
}
}
if (j != 4) {
goto SLOT_HAS_DATA;
}
}
gSaveSlotHasData[i] = new_var;
continue;
SLOT_HAS_DATA:
do {
gSaveSlotMetadata[i] = gCurrentSaveFile.metadata;
gSaveSlotHasData[i] = TRUE;
if (gGameStatusPtr->saveCount < saveData->saveCount) {
gGameStatusPtr->saveCount = saveData->saveCount;
}
} while(0);
}
return TRUE;
}
#endif
void fio_deserialize_state(void) {
SaveData* saveData = &gCurrentSaveFile;
s32 i, j;
@ -337,6 +477,21 @@ b32 fio_write_flash(s32 pageNum, s8* readBuffer, u32 numBytes) {
return TRUE;
}
void fio_erase_flash(s32 pageNum) {
s32 fio_erase_flash(s32 pageNum) {
#if VERSION_PAL
int i;
s32 success;
for (i = 0; i < 4; i++) {
success = osFlashSectorErase(pageNum * sizeof(SaveGlobals));
if (!success) {
break;
}
}
return success;
#else
osFlashSectorErase(pageNum * sizeof(SaveGlobals));
#endif
}

View File

@ -8,6 +8,9 @@ b32 fio_save_globals(void);
b32 fio_load_game(s32 saveSlot);
void fio_save_game(s32 saveSlot);
void fio_erase_game(s32 saveSlot);
#if VERSION_PAL
b32 func_PAL_8002B574(void);
#endif
extern SaveMetadata gSaveSlotMetadata[4];
extern u8 gSaveSlotHasData[4];

View File

@ -7,7 +7,9 @@ typedef TlbEntry TlbMappablePage[15];
BSS TlbMappablePage gEffectDataBuffer ALIGNED(0x1000);
BSS u8 gEffectGlobals[0x1000] ALIGNED(0x1000);
#if !VERSION_PAL
BSS u8 BattleEntityHeapBottom[0x3000] ALIGNED(0x1000);
#endif
BSS u8 AuHeapBase[AUDIO_HEAP_SIZE] ALIGNED(0x1000);
BSS u8 D_80200000[0x4000] ALIGNED(0x1000);
BSS u8 D_80204000[0x3000] ALIGNED(0x1000);

5
src/heaps4.c Normal file
View File

@ -0,0 +1,5 @@
#include "common.h"
#if VERSION_PAL
BSS u8 BattleEntityHeapBottom[0x3000] ALIGNED(0x1000);
#endif

View File

@ -15,11 +15,13 @@ typedef struct {
char* is_debug_print(char* arg0, const char* str, size_t count);
#if !VERSION_PAL
void is_debug_init(void) {
osEPiWriteIo(nuPiCartHandle, (u32) &gISVDbgPrnAdrs->put, 0);
osEPiWriteIo(nuPiCartHandle, (u32) &gISVDbgPrnAdrs->get, 0);
osEPiWriteIo(nuPiCartHandle, (u32) &gISVDbgPrnAdrs->magic, ASCII_TO_U32('I', 'S', '6', '4'));
}
#endif
void printf(const char* fmt, ...) {
va_list args;

5459
src/item_table_pal.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,7 @@
#include "entity.h"
#include "include_asset.h"
#if !VERSION_PAL
Lights1 level_up_lights = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
#if VERSION_JP
@ -256,6 +257,7 @@ Gfx D_802A7A88_7A59C8[] = {
gsSPDisplayList(D_802A7A28_7A5968),
gsSPEndDisplayList(),
};
#endif
INCLUDE_IMG("level_up/heart.png", level_up_heart_png);
INCLUDE_PAL("level_up/heart.pal", level_up_heart_pal);
@ -272,6 +274,27 @@ INCLUDE_PAL("level_up/BP.pal", level_up_BP_pal);
INCLUDE_IMG("level_up/HP.png", level_up_HP_png);
INCLUDE_PAL("level_up/HP.pal", level_up_HP_pal);
#if VERSION_PAL
INCLUDE_IMG("de/level_up/FP.png", level_up_FP_de_png);
INCLUDE_PAL("de/level_up/FP.pal", level_up_FP_de_pal);
INCLUDE_IMG("de/level_up/BP.png", level_up_BP_de_png);
INCLUDE_PAL("de/level_up/BP.pal", level_up_BP_de_pal);
INCLUDE_IMG("de/level_up/HP.png", level_up_HP_de_png);
INCLUDE_PAL("de/level_up/HP.pal", level_up_HP_de_pal);
INCLUDE_IMG("fr/level_up/FP.png", level_up_FP_fr_png);
INCLUDE_PAL("fr/level_up/FP.pal", level_up_FP_fr_pal);
INCLUDE_IMG("fr/level_up/BP.png", level_up_BP_fr_png);
INCLUDE_PAL("fr/level_up/BP.pal", level_up_BP_fr_pal);
INCLUDE_IMG("fr/level_up/HP.png", level_up_HP_fr_png);
INCLUDE_PAL("fr/level_up/HP.pal", level_up_HP_fr_pal);
INCLUDE_IMG("es/level_up/FP.png", level_up_FP_es_png);
INCLUDE_PAL("es/level_up/FP.pal", level_up_FP_es_pal);
INCLUDE_IMG("es/level_up/BP.png", level_up_BP_es_png);
INCLUDE_PAL("es/level_up/BP.pal", level_up_BP_es_pal);
INCLUDE_IMG("es/level_up/HP.png", level_up_HP_es_png);
INCLUDE_PAL("es/level_up/HP.pal", level_up_HP_es_pal);
#endif
INCLUDE_IMG("level_up/digit_0.png", level_up_digit_0_png);
INCLUDE_PAL("level_up/digit_0.pal", level_up_digit_0_pal);
INCLUDE_IMG("level_up/digit_1.png", level_up_digit_1_png);
@ -407,7 +430,18 @@ INCLUDE_PAL("level_up/small_arrow.blue.pal", level_up_small_arrow_blue_pal);
INCLUDE_IMG("level_up/select_one_to_upgrade.png", level_up_select_one_to_upgrade_png);
INCLUDE_PAL("level_up/select_one_to_upgrade.pal", level_up_select_one_to_upgrade_pal);
#if VERSION_PAL
INCLUDE_IMG("de/level_up/select_one_to_upgrade.png", level_up_select_one_to_upgrade_de_png);
INCLUDE_PAL("de/level_up/select_one_to_upgrade.pal", level_up_select_one_to_upgrade_de_pal);
INCLUDE_IMG("fr/level_up/select_one_to_upgrade.png", level_up_select_one_to_upgrade_fr_png);
INCLUDE_PAL("fr/level_up/select_one_to_upgrade.pal", level_up_select_one_to_upgrade_fr_pal);
INCLUDE_IMG("es/level_up/select_one_to_upgrade.png", level_up_select_one_to_upgrade_es_png);
INCLUDE_PAL("es/level_up/select_one_to_upgrade.pal", level_up_select_one_to_upgrade_es_pal);
#endif
#if !VERSION_PAL
EntityModelScript EMS_level_up = STANDARD_ENTITY_MODEL_SCRIPT(D_802A7A88_7A59C8, RENDER_MODE_CLOUD_NO_ZCMP);
#endif
HudScript HES_level_up_heart = HES_TEMPLATE_CI_ENUM_SIZE(level_up_heart, 40, 40);
HudScript HES_level_up_heart_copy = HES_TEMPLATE_CI_ENUM_SIZE(level_up_heart, 40, 40);
@ -416,6 +450,11 @@ HudScript HES_level_up_leaves = HES_TEMPLATE_CI_ENUM_SIZE(level_up_leaves, 40, 4
HudScript HES_level_up_badge = HES_TEMPLATE_CI_ENUM_SIZE(level_up_badge, 40, 40);
HudScript HES_level_up_FP = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_FP, 32, 24);
#if VERSION_PAL
HudScript HES_level_up_FP_de = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_FP_de, 32, 24);
HudScript HES_level_up_FP_fr = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_FP_fr, 32, 24);
HudScript HES_level_up_FP_es = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_FP_es, 32, 24);
#endif
HudScript HES_level_up_green_digit_0 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_0, 8, 16);
HudScript HES_level_up_green_digit_1 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_1, 8, 16);
HudScript HES_level_up_green_digit_2 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_2, 8, 16);
@ -439,6 +478,11 @@ HudScript HES_level_up_small_green_digit_9 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_
HudScript HES_level_up_small_green_arrow = HES_TEMPLATE_CI_ENUM_SIZE(level_up_small_arrow, 8, 8);
HudScript HES_level_up_HP = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_HP, 32, 24);
#if VERSION_PAL
HudScript HES_level_up_HP_de = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_HP_de, 32, 24);
HudScript HES_level_up_HP_fr = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_HP_fr, 32, 24);
HudScript HES_level_up_HP_es = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_HP_es, 32, 24);
#endif
HudScript HES_level_up_red_digit_0 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_0_red, 8, 16);
HudScript HES_level_up_red_digit_1 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_1_red, 8, 16);
HudScript HES_level_up_red_digit_2 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_2_red, 8, 16);
@ -462,6 +506,11 @@ HudScript HES_level_up_small_red_digit_9 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_sm
HudScript HES_level_up_small_red_arrow = HES_TEMPLATE_CI_ENUM_SIZE(level_up_small_arrow_red, 8, 8);
HudScript HES_level_up_BP = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_BP, 32, 24);
#if VERSION_PAL
HudScript HES_level_up_BP_de = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_BP_de, 32, 24);
HudScript HES_level_up_BP_fr = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_BP_fr, 32, 24);
HudScript HES_level_up_BP_es = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_BP_es, 32, 24);
#endif
HudScript HES_level_up_blue_digit_0 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_0_blue, 8, 16);
HudScript HES_level_up_blue_digit_1 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_1_blue, 8, 16);
HudScript HES_level_up_blue_digit_2 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_digit_2_blue, 8, 16);
@ -485,3 +534,8 @@ HudScript HES_level_up_small_blue_digit_9 = HES_TEMPLATE_CI_ENUM_SIZE(level_up_s
HudScript HES_level_up_small_blue_arrow = HES_TEMPLATE_CI_ENUM_SIZE(level_up_small_arrow_blue, 8, 8);
HudScript HES_level_up_select_one_to_upgrade = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_select_one_to_upgrade, 208, 16);
#if VERSION_PAL
HudScript HES_level_up_select_one_to_upgrade_de = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_select_one_to_upgrade_de, 208, 16);
HudScript HES_level_up_select_one_to_upgrade_fr = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_select_one_to_upgrade_fr, 208, 16);
HudScript HES_level_up_select_one_to_upgrade_es = HES_TEMPLATE_CI_CUSTOM_SIZE(level_up_select_one_to_upgrade_es, 208, 16);
#endif

View File

@ -0,0 +1,160 @@
#include "common.h"
#include "entity.h"
#include "include_asset.h"
Lights1 level_up_letters_en_de_lights = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
#include "level_up/draw_second_E.vtx.inc.c"
#include "level_up/draw_V.vtx.inc.c"
#include "level_up/draw_E.vtx.inc.c"
#include "level_up/draw_second_L.vtx.inc.c"
#include "level_up/draw_L.vtx.inc.c"
#include "level_up/draw_P.vtx.inc.c"
#include "level_up/draw_U.vtx.inc.c"
#include "level_up/draw_exclamation_mark.vtx.inc.c"
INCLUDE_IMG("level_up/big_V.png", D_PAL_802A6838_7F8418);
#include "level_up/big_V.gfx.inc.c"
INCLUDE_IMG("level_up/big_P.png", D_PAL_802A78B0_7F9490);
#include "level_up/big_P.gfx.inc.c"
INCLUDE_IMG("level_up/big_exclamation_mark.png", D_PAL_802A8928_7FA508);
#include "level_up/big_exclamation_mark.gfx.inc.c"
INCLUDE_IMG("level_up/big_U.png", D_PAL_802A99A0_7FB580);
#include "level_up/big_U.gfx.inc.c"
INCLUDE_IMG("level_up/big_L.png", D_PAL_802AAA18_7FC5F8);
#include "level_up/big_L.gfx.inc.c"
INCLUDE_IMG("level_up/big_E.png", D_PAL_802ABA90_7FD670);
#include "level_up/big_E.gfx.inc.c"
Gfx D_PAL_802ACB08_7FE6E8[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802A9928_7FB508),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A67B8_7F8398[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACB70_7FE750[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AA9A0_7FC580),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6738_7F8318[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACBD8_7FE7B8[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802A88B0_7FA490),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A66B8_7F8298[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACC40_7FE820[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ABA18_7FD5F8),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6638_7F8218[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACCA8_7FE888[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ABA18_7FD5F8),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A65B8_7F8198[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACD10_7FE8F0[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ACA90_7FE670),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6538_7F8118[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACD78_7FE958[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802A7838_7F9418),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A64B8_7F8098[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACDE0_7FE9C0[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ACA90_7FE670),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6438_7F8018[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACE48_7FEA28[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsSPDisplayList(D_PAL_802ACDE0_7FE9C0),
gsSPDisplayList(D_PAL_802ACD78_7FE958),
gsSPDisplayList(D_PAL_802ACD10_7FE8F0),
gsSPDisplayList(D_PAL_802ACCA8_7FE888),
gsSPDisplayList(D_PAL_802ACC40_7FE820),
gsSPDisplayList(D_PAL_802ACBD8_7FE7B8),
gsSPDisplayList(D_PAL_802ACB70_7FE750),
gsSPDisplayList(D_PAL_802ACB08_7FE6E8),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACEA8_7FEA88[] = {
gsSPSetLights1(level_up_letters_en_de_lights),
gsSPDisplayList(D_PAL_802ACE48_7FEA28),
gsSPEndDisplayList(),
};
EntityModelScript EMS_level_up_en_de = STANDARD_ENTITY_MODEL_SCRIPT(D_PAL_802ACEA8_7FEA88, RENDER_MODE_CLOUD_NO_ZCMP);

146
src/level_up_letters_es.c Normal file
View File

@ -0,0 +1,146 @@
#include "common.h"
#include "entity.h"
#include "include_asset.h"
Lights1 level_up_letters_es_lights = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
#include "es/level_up/draw_UB.vtx.inc.c"
#include "es/level_up/draw_ES.vtx.inc.c"
#include "es/level_up/draw_UN.vtx.inc.c"
#include "es/level_up/draw_inverted_excl_mark_S.vtx.inc.c"
#include "es/level_up/draw_NI.vtx.inc.c"
#include "es/level_up/draw_L_exclamation_mark.vtx.inc.c"
#include "es/level_up/draw_VE.vtx.inc.c"
INCLUDE_IMG("es/level_up/big_inverted_excl_mark_S.png", D_PAL_802A67B8_8069A8);
#include "es/level_up/big_inverted_excl_mark_S.gfx.inc.c"
INCLUDE_IMG("es/level_up/big_UB.png", D_PAL_802A7830_807A20);
#include "es/level_up/big_UB.gfx.inc.c"
INCLUDE_IMG("es/level_up/big_ES.png", D_PAL_802A88A8_808A98);
#include "es/level_up/big_ES.gfx.inc.c"
INCLUDE_IMG("es/level_up/big_UN.png", D_PAL_802A9920_809B10);
#include "es/level_up/big_UN.gfx.inc.c"
INCLUDE_IMG("es/level_up/big_NI.png", D_PAL_802AA998_80AB88);
#include "es/level_up/big_NI.gfx.inc.c"
INCLUDE_IMG("es/level_up/big_VE.png", D_PAL_802ABA10_80BC00);
#include "es/level_up/big_VE.gfx.inc.c"
INCLUDE_IMG("es/level_up/big_L_exclamation_mark.png", D_PAL_802ACA88_80CC78);
#include "es/level_up/big_L_exclamation_mark.gfx.inc.c"
Gfx D_PAL_802ADB00_80DCF0[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ACA10_80CC00),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6738_806928[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADB68_80DD58[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ADA88_80DC78),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A66B8_8068A8[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADBD0_80DDC0[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AB998_80BB88),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6638_806828[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADC38_80DE28[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802A77B8_8079A8),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A65B8_8067A8[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADCA0_80DE90[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AA920_80AB10),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6538_806728[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADD08_80DEF8[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802A98A8_809A98),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A64B8_8066A8[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADD70_80DF60[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802A8830_808A20),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6438_806628[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADDD8_80DFC8[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsSPDisplayList(D_PAL_802ADD70_80DF60),
gsSPDisplayList(D_PAL_802ADD08_80DEF8),
gsSPDisplayList(D_PAL_802ADCA0_80DE90),
gsSPDisplayList(D_PAL_802ADC38_80DE28),
gsSPDisplayList(D_PAL_802ADBD0_80DDC0),
gsSPDisplayList(D_PAL_802ADB68_80DD58),
gsSPDisplayList(D_PAL_802ADB00_80DCF0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADE30_80E020[] = {
gsSPSetLights1(level_up_letters_es_lights),
gsSPDisplayList(D_PAL_802ADDD8_80DFC8),
gsSPEndDisplayList(),
};
EntityModelScript EMS_level_up_es = STANDARD_ENTITY_MODEL_SCRIPT(D_PAL_802ADE30_80E020, RENDER_MODE_CLOUD_NO_ZCMP);

163
src/level_up_letters_fr.c Normal file
View File

@ -0,0 +1,163 @@
#include "common.h"
#include "entity.h"
#include "include_asset.h"
Lights1 level_up_letters_fr_lights = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
#include "fr/level_up/draw_NI.vtx.inc.c"
#include "fr/level_up/draw_VE.vtx.inc.c"
#include "fr/level_up/draw_AU.vtx.inc.c"
#include "fr/level_up/draw_SU.vtx.inc.c"
#include "fr/level_up/draw_PE.vtx.inc.c"
#include "fr/level_up/draw_RI.vtx.inc.c"
#include "fr/level_up/draw_EU.vtx.inc.c"
#include "fr/level_up/draw_R_exclamation_mark.vtx.inc.c"
INCLUDE_IMG("fr/level_up/big_NI.png", D_PAL_802A6838_7FEEE8);
INCLUDE_IMG("fr/level_up/big_VE.png", D_PAL_802A75B8_7FFC68);
INCLUDE_IMG("fr/level_up/big_AU.png", D_PAL_802A82B8_800968);
INCLUDE_IMG("fr/level_up/big_SU.png", D_PAL_802A9078_801728);
INCLUDE_IMG("fr/level_up/big_RI.png", D_PAL_802A9E38_8024E8);
INCLUDE_IMG("fr/level_up/big_EU.png", D_PAL_802AABF8_8032A8);
INCLUDE_IMG("fr/level_up/big_R_exclamation_mark.png", D_PAL_802AB9B8_804068);
INCLUDE_IMG("fr/level_up/big_PE.png", D_PAL_802AC7B8_804E68);
#include "fr/level_up/big_NI.gfx.inc.c"
#include "fr/level_up/big_VE.gfx.inc.c"
#include "fr/level_up/big_AU.gfx.inc.c"
#include "fr/level_up/big_SU.gfx.inc.c"
#include "fr/level_up/big_PE.gfx.inc.c"
#include "fr/level_up/big_RI.gfx.inc.c"
#include "fr/level_up/big_EU.gfx.inc.c"
#include "fr/level_up/big_R_exclamation_mark.gfx.inc.c"
Gfx D_PAL_802ADB78_806228[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ADB00_8061B0),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A67B8_7FEE68[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADBE0_806290[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ADA88_806138),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6738_7FEDE8[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADC48_8062F8[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ADA10_8060C0),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A66B8_7FED68[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADCB0_806360[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AD998_806048),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6638_7FECE8[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADD18_8063C8[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AD920_805FD0),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A65B8_7FEC68[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADD80_806430[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AD8A8_805F58),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6538_7FEBE8[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADDE8_806498[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AD830_805EE0),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A64B8_7FEB68[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADE50_806500[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802AD7B8_805E68),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802A6438_7FEAE8[0], 8, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADEB8_806568[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsSPDisplayList(D_PAL_802ADE50_806500),
gsSPDisplayList(D_PAL_802ADDE8_806498),
gsSPDisplayList(D_PAL_802ADD80_806430),
gsSPDisplayList(D_PAL_802ADD18_8063C8),
gsSPDisplayList(D_PAL_802ADCB0_806360),
gsSPDisplayList(D_PAL_802ADC48_8062F8),
gsSPDisplayList(D_PAL_802ADBE0_806290),
gsSPDisplayList(D_PAL_802ADB78_806228),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADF18_8065C8[] = {
gsSPSetLights1(level_up_letters_fr_lights),
gsSPDisplayList(D_PAL_802ADEB8_806568),
gsSPEndDisplayList(),
};
EntityModelScript EMS_level_up_fr = STANDARD_ENTITY_MODEL_SCRIPT(D_PAL_802ADF18_8065C8, RENDER_MODE_CLOUD_NO_ZCMP);

View File

@ -4,7 +4,9 @@
// TODO move these somewhere else...
u8 nuYieldBuf[NU_GFX_YIELD_BUF_SIZE] ALIGNED(16);
OSThread __osThreadSave;
#if !VERSION_PAL
u8 nuBootStack[0x2000] ALIGNED(8);
#endif
// used in effects/gfx/flame.c
unsigned char D_800B32E0[0x800] ALIGNED(16);
@ -53,6 +55,16 @@ void boot_main(void* data) {
} else {
PANIC();
}
#elif VERSION_PAL
if (osTvType == OS_TV_PAL) {
osViSetMode(&osViModeFpalLpn1);
osViSetYScale(0.833f);
osViSetSpecialFeatures(OS_VI_GAMMA_OFF | OS_VI_GAMMA_DITHER_OFF | OS_VI_DIVOT_ON | OS_VI_DITHER_FILTER_ON);
} else {
PANIC();
}
nuGfxDisplayOff();
#else // not VERSION_JP
if (osTvType == OS_TV_NTSC) {
osViSetMode(&osViModeNtscLan1);
@ -68,7 +80,7 @@ void boot_main(void* data) {
crash_screen_init();
#endif
#if !VERSION_IQUE
#if !VERSION_IQUE && !VERSION_PAL
is_debug_init();
#endif
nuGfxInit();

View File

@ -636,9 +636,6 @@ extern IMG_PTR MsgLetterRasterOffsets[];
extern PAL_PTR MsgLetterPaletteOffsets[];
extern MsgVoice MsgVoices[];
#if VERSION_PAL
INCLUDE_ASM(s32, "msg", msg_copy_to_print_buffer);
#else
void msg_copy_to_print_buffer(MessagePrintState* printer, s32 arg1, s32 arg2) {
u8 arg;
u8 argQ;
@ -778,6 +775,11 @@ void msg_copy_to_print_buffer(MessagePrintState* printer, s32 arg1, s32 arg2) {
printer->windowBasePos.y = *srcBuf++;
printer->windowSize.x = *srcBuf++;
printer->windowSize.y = *srcBuf++;
#if VERSION_PAL
if (printer->windowSize.x == 255) {
printer->windowSize.x = 276;
}
#endif
sfx_play_sound_with_params(SOUND_APPROVE, 0, 0, 0);
printer->windowState = MSG_WINDOW_STATE_OPENING;
printer->delayFlags |= MSG_DELAY_FLAG_1;
@ -1304,7 +1306,6 @@ void msg_copy_to_print_buffer(MessagePrintState* printer, s32 arg1, s32 arg2) {
printer->srcBufferPos = (u16)(s32)(srcBuf - (s32)printer->srcBuffer);
*printBuf = MSG_CHAR_PRINT_END;
}
#endif
void initialize_printer(MessagePrintState* printer, s32 arg1, s32 arg2) {
s32 i;

View File

@ -694,9 +694,15 @@ u8 MsgCharWidthNormal[] = {
[MSG_CHAR_LOWER_E_ACUTE] 8,
[MSG_CHAR_LOWER_E_CIRCUMFLEX] 8,
[MSG_CHAR_LOWER_E_UMLAUT] 8,
#if VERSION_PAL
[MSG_CHAR_LOWER_I_GRAVE] 4,
[MSG_CHAR_LOWER_I_ACUTE] 4,
[MSG_CHAR_LOWER_I_CIRCUMFLEX] 5,
#else
[MSG_CHAR_LOWER_I_GRAVE] 6,
[MSG_CHAR_LOWER_I_ACUTE] 6,
[MSG_CHAR_LOWER_I_CIRCUMFLEX] 6,
#endif
[MSG_CHAR_LOWER_I_UMLAUT] 7,
[MSG_CHAR_LOWER_N_TILDE] 9,
[MSG_CHAR_LOWER_O_GRAVE] 7,

View File

@ -203,8 +203,13 @@ void draw_message_window(MessagePrintState* printer) {
#endif
#if VERSION_PAL
INCLUDE_ASM(s32, "msg_draw", appendGfx_message);
#define MSG_FADE_IN_DURATION 6
#define MSG_FADE_OUT_DURATION 4
#else
#define MSG_FADE_IN_DURATION 7
#define MSG_FADE_OUT_DURATION 5
#endif
void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 additionalOffsetX, u16 additionalOffsetY,
u16 flag, u8 alpha) {
SpriteRasterInfo sprRasterInfo;
@ -508,24 +513,24 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
}
if (printer->windowState == MSG_WINDOW_STATE_OPENING) {
windowScaleX = update_lerp(EASING_LINEAR, 0.07f, 1.0f, printer->fadeInCounter, 7);
windowScaleY = update_lerp(EASING_LINEAR, 0.3f, 1.0f, printer->fadeInCounter, 7);
temp_f28 = update_lerp(EASING_LINEAR, 96.0f, 200.0f, printer->fadeInCounter, 7);
temp_f20 = update_lerp(EASING_SIN_OUT, temp_s5, temp_s3, printer->fadeInCounter, 7);
temp_f24 = update_lerp(EASING_SIN_OUT, temp_s6, temp_s4, printer->fadeInCounter, 7);
windowScaleX = update_lerp(EASING_LINEAR, 0.07f, 1.0f, printer->fadeInCounter, MSG_FADE_IN_DURATION);
windowScaleY = update_lerp(EASING_LINEAR, 0.3f, 1.0f, printer->fadeInCounter, MSG_FADE_IN_DURATION);
temp_f28 = update_lerp(EASING_LINEAR, 96.0f, 200.0f, printer->fadeInCounter, MSG_FADE_IN_DURATION);
temp_f20 = update_lerp(EASING_SIN_OUT, temp_s5, temp_s3, printer->fadeInCounter, MSG_FADE_IN_DURATION);
temp_f24 = update_lerp(EASING_SIN_OUT, temp_s6, temp_s4, printer->fadeInCounter, MSG_FADE_IN_DURATION);
temp_f2_2 = printer->windowSize.x * windowScaleX;
temp_f0_2 = printer->windowSize.y * windowScaleY;
bubbleX = (temp_f24 - temp_f2_2 * 0.5) + 0.5;
bubbleY = (temp_f20 - temp_f0_2 * 0.5) + 0.5;
msg_draw_speech_bubble(printer, bubbleX, bubbleY, straightWidth, curveWidth, height, windowScaleX, windowScaleY, temp_f28, 1);
printer->fadeInCounter++;
if (printer->fadeInCounter == 7) {
if (printer->fadeInCounter == MSG_FADE_IN_DURATION) {
printer->windowState = MSG_WINDOW_STATE_PRINTING;
}
} else if (printer->windowState == MSG_WINDOW_STATE_CLOSING) {
printer->fadeOutCounter++;
windowScaleX = update_lerp(EASING_LINEAR, 1.0f, 0.6f, printer->fadeOutCounter, 5);
windowScaleY = update_lerp(EASING_LINEAR, 1.0f, 0.8f, printer->fadeOutCounter, 5);
windowScaleX = update_lerp(EASING_LINEAR, 1.0f, 0.6f, printer->fadeOutCounter, MSG_FADE_OUT_DURATION);
windowScaleY = update_lerp(EASING_LINEAR, 1.0f, 0.8f, printer->fadeOutCounter, MSG_FADE_OUT_DURATION);
temp_f2 = (printer->windowSize.x * windowScaleX);
temp_f0 = (printer->windowSize.y * windowScaleY);
temp_f24 = temp_s4;
@ -534,7 +539,7 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
bubbleY = (temp_f20 - temp_f0 * 0.5) + 0.5;
temp_f22_2 = (temp_f24 + temp_f2 * 0.5) - 0.5;
temp_f20_3 = (temp_f20 + temp_f0 * 0.5) - 0.5;
temp_f28 = update_lerp(EASING_LINEAR, 255.0f, 64.0f, printer->fadeOutCounter, 5);
temp_f28 = update_lerp(EASING_LINEAR, 255.0f, 64.0f, printer->fadeOutCounter, MSG_FADE_OUT_DURATION);
sp8E = temp_f28 * 0.35;
spAE = temp_f28;
msg_drawState->clipX[0] = bubbleX + msg_drawState->textStartPos[0];
@ -542,7 +547,7 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
msg_drawState->clipX[1] = temp_f22_2 - msg_drawState->textStartPos[0];
msg_drawState->clipY[1] = temp_f20_3 - msg_drawState->textStartPos[1];
msg_draw_speech_bubble(printer, bubbleX, bubbleY, straightWidth, curveWidth, height, windowScaleX, windowScaleY, temp_f28, 1);
if (printer->fadeOutCounter >= 5) {
if (printer->fadeOutCounter >= MSG_FADE_OUT_DURATION) {
printer->stateFlags |= MSG_STATE_FLAG_1;
}
} else {
@ -578,11 +583,11 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
if (printer->windowState == MSG_WINDOW_STATE_OPENING) {
printer->fadeInCounter++;
if (printer->fadeInCounter == 6) {
if (printer->fadeInCounter == MSG_FADE_IN_DURATION - 1) {
printer->windowState = MSG_WINDOW_STATE_PRINTING;
}
temp_f10 = ((f32) printer->fadeInCounter * (2.0 / 15.0)) + 0.2;
temp_f10 = ((f32) printer->fadeInCounter * ((2.0 / 15.0) / DT)) + 0.2;
z1 = printer->windowBasePos.x + (windowSizeX / 2);
z2 = printer->windowBasePos.y + (windowSizeY / 2);
@ -603,10 +608,14 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
sp8E = (u8)(temp_f10 * 255.0) * 0.6;
} else if (printer->windowState == MSG_WINDOW_STATE_CLOSING) {
printer->fadeOutCounter++;
if (printer->fadeOutCounter >= 5) {
if (printer->fadeOutCounter >= MSG_FADE_OUT_DURATION) {
printer->stateFlags |= MSG_STATE_FLAG_1;
}
#if VERSION_PAL
frameAlpha = -(printer->fadeOutCounter * 57) - 1;
#else
frameAlpha = -(printer->fadeOutCounter * 46) - 1;
#endif
sp8E = ((u8)frameAlpha) * 0.6;
frameFading = 1;
if (sp8E >= 32) {
@ -657,7 +666,7 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
sp8E = (phi_s0_5 & 0xFF) - 0x30;
printer->fadeInCounter++;
fading = 1;
if ((s16)printer->fadeInCounter == 4) { // TODO why is this cast needed
if (printer->fadeInCounter == 4) {
printer->windowState = MSG_WINDOW_STATE_PRINTING;
}
} else if (printer->windowState == MSG_WINDOW_STATE_CLOSING) {
@ -1304,17 +1313,34 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
charPosY += rand_int(10000) % 2;
}
if (msg_drawState->effectFlags & MSG_FX_FLAG_WAVE) {
temp_f2_3 = msg_drawState->msgScale.x - 1.0;
temp_s0_7 = (printer->effectFrameCounter * (s32)(20.0 - (temp_f2_3 * 5.0))) - (msg_drawState->visiblePrintedCount *
(s32)(45.0 - (temp_f2_3 * 15.0)));
charPosX += cosine(temp_s0_7) * ((msg_drawState->msgScale.x - 1.0) + 1.6);
charPosY += cosine((temp_s0_7 + 180.0 + 90.0)) * (msg_drawState->msgScale.y - 1.0 + 1.6);
#if VERSION_PAL
f32 waveFreqX = 20.0 - (msg_drawState->msgScale.x - 1.0) * 5.0;
f32 waveFreqY = 45.0 - (msg_drawState->msgScale.x - 1.0) * 15.0;
f32 wavePhaseX = printer->effectFrameCounter * waveFreqX * 1.2f;
f32 charOffset = (u32) msg_drawState->visiblePrintedCount * waveFreqY;
#else
s32 waveFreqX = 20.0 - (msg_drawState->msgScale.x - 1.0) * 5.0;
s32 waveFreqY = 45.0 - (msg_drawState->msgScale.x - 1.0) * 15.0;
s32 wavePhaseX = printer->effectFrameCounter * waveFreqX;
s32 charOffset = msg_drawState->visiblePrintedCount * waveFreqY;
#endif
charPosX += cosine(wavePhaseX - charOffset) * (msg_drawState->msgScale.x - 1.0 + 1.6);
charPosY += cosine(wavePhaseX - charOffset + 180.0 + 90.0) * (msg_drawState->msgScale.y - 1.0 + 1.6);
}
if (msg_drawState->effectFlags & MSG_FX_FLAG_GLOBAL_WAVE) {
temp_s0_8 = (gMsgGlobalWaveCounter * (s32)(20.0 - ((msg_drawState->msgScale.x - 1.0) * 5.0))) -
(msg_drawState->visiblePrintedCount * 45);
charPosX += cosine(temp_s0_8) * ((msg_drawState->msgScale.x - 1.0) + 1.6);
charPosY += cosine((temp_s0_8 + 180.0 + 90.0)) * ((msg_drawState->msgScale.y - 1.0) + 1.6);
#if VERSION_PAL
f32 waveFreqX = 20.0 - (msg_drawState->msgScale.x - 1.0) * 5.0;
f32 wavePhaseX = gMsgGlobalWaveCounter * waveFreqX * 1.2f;
f32 charOffset = (u32) msg_drawState->visiblePrintedCount * 45;
#else
s32 waveFreqX = 20.0 - (msg_drawState->msgScale.x - 1.0) * 5.0;
s32 wavePhaseX = gMsgGlobalWaveCounter * waveFreqX;
s32 charOffset = msg_drawState->visiblePrintedCount * 45;
#endif
charPosX += cosine(wavePhaseX - charOffset) * (msg_drawState->msgScale.x - 1.0 + 1.6);
charPosY += cosine(wavePhaseX - charOffset + 180.0 + 90.0) * (msg_drawState->msgScale.y - 1.0 + 1.6);
}
if (msg_drawState->effectFlags & MSG_FX_FLAG_RAINBOW) {
palette = abs(msg_drawState->visiblePrintedCount - (u16)(printer->effectFrameCounter / 3)) % 10;
@ -1632,7 +1658,7 @@ void appendGfx_message(MessagePrintState* printer, s16 posX, s16 posY, u16 addit
gDPPipeSync(gMainGfxPos++);
D_80151338 = gMainGfxPos;
}
#endif
void msg_reset_gfx_state(void) {
gDPPipeSync(gMainGfxPos++);

View File

@ -3,12 +3,10 @@
#include "PR/bcp.h"
s32 __osEPiRawStartDma(OSPiHandle* pihandle, s32 direction, u32 devAddr, void* dramAddr, u32 size) {
#ifdef BBPLAYER
u64 dummybuf[2];
#endif
u32 stat;
u32 domain;
#ifdef BBPLAYER
#if defined(BBPLAYER) || VERSION_PAL
u64 dummybuf[2];
u32 buffer;
u32 pgsize;
u16* adr;
@ -17,7 +15,7 @@ s32 __osEPiRawStartDma(OSPiHandle* pihandle, s32 direction, u32 devAddr, void* d
EPI_SYNC(pihandle, stat, domain);
#ifdef BBPLAYER
#if defined(BBPLAYER) || VERSION_PAL
if (direction == OS_READ) {
pgsize = 1;
@ -29,7 +27,8 @@ s32 __osEPiRawStartDma(OSPiHandle* pihandle, s32 direction, u32 devAddr, void* d
__osEPiRawReadIo(pihandle, devAddr - 2, &buffer);
adr = (u16*)PHYS_TO_K1(dramAddr);
*(adr++) = (u16)buffer;
*adr = (u16)buffer;
adr++;
devAddr += 2;
dramAddr = adr;
@ -40,7 +39,8 @@ s32 __osEPiRawStartDma(OSPiHandle* pihandle, s32 direction, u32 devAddr, void* d
adr = (u16*)dramAddr;
*(adr++) = buffer >> 16;
*(adr++) = (u16)buffer;
*adr = (u16)buffer;
adr++;
devAddr += 4;
dramAddr = adr;
@ -50,7 +50,8 @@ s32 __osEPiRawStartDma(OSPiHandle* pihandle, s32 direction, u32 devAddr, void* d
__osEPiRawReadIo(pihandle, devAddr, &buffer);
adr = (u16*)PHYS_TO_K1(dramAddr);
*(adr++) = buffer >> 16;
*adr = buffer >> 16;
adr++;
devAddr += 2;
dramAddr = adr;

10
src/os/flashclearstatus.c Normal file
View File

@ -0,0 +1,10 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
void osFlashClearStatus(void) {
// select status mode
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS);
// clear status
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress, 0);
return;
}

15
src/os/flashgetaddr.c Normal file
View File

@ -0,0 +1,15 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
u32 __osFlashGetAddr(u32 page_num) {
u32 devAddr;
if (__osFlashVersion == OLD_FLASH) {
// Account for hardware bug in old flash where the address bits are shifted 1-off where they should be
devAddr = page_num * (FLASH_BLOCK_SIZE >> 1);
} else {
devAddr = page_num * FLASH_BLOCK_SIZE;
}
return devAddr;
}

View File

@ -40,7 +40,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 page_num, void* dramAddr, u
osEPiStartDma(&__osFlashHandler, mb, OS_READ);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
page_num = (page_num + 256) & 0xF00;
mb->dramAddr = (u32)mb->dramAddr + mb->size;
mb->dramAddr = (void*)((u32)mb->dramAddr + mb->size);
}
while (n_pages > 256) {
@ -51,7 +51,7 @@ s32 osFlashReadArray(OSIoMesg* mb, s32 priority, u32 page_num, void* dramAddr, u
osEPiStartDma(&__osFlashHandler, mb, OS_READ);
osRecvMesg(mq, NULL, OS_MESG_BLOCK);
page_num += 256;
mb->dramAddr = (u32)mb->dramAddr + mb->size;
mb->dramAddr = (void*)((u32)mb->dramAddr + mb->size);
}
mb->size = n_pages * FLASH_BLOCK_SIZE;

27
src/os/flashreadid.c Normal file
View File

@ -0,0 +1,27 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
void osFlashReadId(u32* flash_type, u32* flash_maker) {
u8 tmp;
// why read status ?
osFlashReadStatus(&tmp);
// select silicon id read mode
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_ID);
// read silicon id using DMA
__osFlashMsg.hdr.pri = OS_MESG_PRI_NORMAL;
__osFlashMsg.hdr.retQueue = &__osFlashMessageQ;
__osFlashMsg.dramAddr = __osFlashID;
__osFlashMsg.devAddr = 0;
__osFlashMsg.size = 2 * sizeof(u32);
osInvalDCache(__osFlashID, sizeof(__osFlashID));
osEPiStartDma(&__osFlashHandler, &__osFlashMsg, OS_READ);
osRecvMesg(&__osFlashMessageQ, NULL, OS_MESG_BLOCK);
*flash_type = __osFlashID[0];
*flash_maker = __osFlashID[1];
return;
}

17
src/os/flashreadstatus.c Normal file
View File

@ -0,0 +1,17 @@
#include "ultra64.h"
#include "PR/os_internal_flash.h"
void osFlashReadStatus(u8* flash_status) {
u32 status;
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS);
// read status
osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status);
// why twice ?
osEPiWriteIo(&__osFlashHandler, __osFlashHandler.baseAddress | FLASH_CMD_REG, FLASH_CMD_STATUS);
osEPiReadIo(&__osFlashHandler, __osFlashHandler.baseAddress, &status);
*flash_status = status & 0xFF;
return;
}

View File

@ -3,7 +3,9 @@
#include "functions.h"
#include "variables.h"
#if !VERSION_PAL
NOP_FIX
#endif
u64 nuMainStack[NU_SC_STACK_SIZE / sizeof(u64)];
static OSThread IdleThread; // idle thread, id 1
@ -11,9 +13,13 @@ static OSThread MainThread; // id 3
static u64 IdleStack[NU_SC_STACK_SIZE / sizeof(u64)];
void (*nuIdleFunc)(void);
void __osInitialize_autodetect(void);
void nuBoot(void) {
osInitialize();
#if VERSION_PAL
__osInitialize_autodetect();
#endif
osCreateThread(&IdleThread, NU_IDLE_THREAD_ID, boot_idle, NULL, &IdleStack[NU_SC_STACK_SIZE / sizeof(u64)], 10);
osStartThread(&IdleThread);
}

View File

@ -1,8 +1,6 @@
#include "common.h"
#include "nu/nusys.h"
NOP_FIX
OSMesgQueue nuContWaitMesgQ;
static OSMesg nuContWaitMesgBuf;
OSMesgQueue nuContDataMutexQ;
@ -17,7 +15,6 @@ OSPfs nuContPfs[NU_CONT_MAXCONTROLLERS];
static s32 contRetrace(NUSiCommonMesg* mesg);
static s32 contRead(NUSiCommonMesg* mesg);
static s32 contReadNW(NUSiCommonMesg* mesg);
static inline s32 contReadData(OSContPad* pad, u32 lockflag);
static s32 contQuery(NUSiCommonMesg* mesg);
NUContReadFunc nuContReadFunc = NULL;
@ -47,7 +44,11 @@ u8 nuContMgrInit(void) {
bitmask = 1;
pattern = 0;
for (i = 0; i < NU_CONT_MAXCONTROLLERS; i++) {
for (i = 0; i < NU_CONT_MAXCONTROLLERS;
#if VERSION_PAL
bitmask <<= 1,
#endif
i++) {
if (nuContStatus[i].errno != 0) {
continue;
}
@ -56,7 +57,9 @@ u8 nuContMgrInit(void) {
nuContNum++;
pattern |= bitmask;
}
#if !VERSION_PAL
bitmask <<= 1;
#endif
}
return pattern;
@ -74,19 +77,7 @@ void nuContDataOpen(void) {
osRecvMesg(&nuContDataMutexQ, NULL, OS_MESG_BLOCK);
}
//copy of nuContDataClose
static inline void nuContDataClose_inline(void) {
osSendMesg(&nuContDataMutexQ, NULL, OS_MESG_BLOCK);
}
//copy of nuContDataOpen
static inline void nuContDataOpen_inline(void) {
osRecvMesg(&nuContDataMutexQ, NULL, OS_MESG_BLOCK);
}
NOP_UNFIX
static inline s32 contReadData(OSContPad* pad, u32 lockflag) {
static s32 contReadData(OSContPad* pad, u32 lockflag) {
s32 rtn;
rtn = osContStartReadData(&nuSiMesgQ);
@ -100,15 +91,26 @@ static inline s32 contReadData(OSContPad* pad, u32 lockflag) {
return rtn;
}
nuContDataClose_inline();
NOP_FIX
nuContDataClose();
osContGetReadData(pad);
NOP_UNFIX
nuContDataOpen_inline();
nuContDataOpen();
return rtn;
}
static s32 contQuery(NUSiCommonMesg* mesg) {
s32 ret = osContStartQuery(&nuSiMesgQ);
if (ret != 0) {
return ret;
}
osRecvMesg(&nuSiMesgQ, NULL, OS_MESG_BLOCK);
osContGetQuery(nuContStatus);
return ret;
}
static s32 contRetrace(NUSiCommonMesg* mesg) {
if(nuContDataLockKey) {
return NU_SI_CALLBACK_CONTINUE;
@ -147,18 +149,3 @@ static s32 contReadNW(NUSiCommonMesg* mesg) {
return rtn;
}
NOP_FIX
static s32 contQuery(NUSiCommonMesg* mesg) {
s32 ret = osContStartQuery(&nuSiMesgQ);
if (ret != 0) {
return ret;
}
osRecvMesg(&nuSiMesgQ, NULL, OS_MESG_BLOCK);
osContGetQuery(nuContStatus);
return ret;
}

View File

@ -14,15 +14,23 @@ u16 nuContPakCompanyCode = 0;
u32 nuContPakGameCode = 0;
s32 (*D_80093CA8[])(NUSiCommonMesg*) = {
NULL, contPakOpen, contPakFree, contPakFileOpen, contPakFileReadWrite, contPakFileDelete, contPakFileState,
contPakFileNum, contPakRepairId, NULL
NULL,
contPakOpen,
contPakFree,
contPakFileOpen,
contPakFileReadWrite,
contPakFileDelete,
contPakFileState,
contPakFileNum,
contPakRepairId,
NULL
};
NUCallBackList nuContPakCallBack = {
NULL,
D_80093CA8,
0x200,
0
.next = NULL,
.func = D_80093CA8,
.majorNo = NU_SI_MAJOR_NO_PAK,
.funcNum = 0
};
void nuContPakMgrInit(void) {

View File

@ -12,11 +12,37 @@ s32 contRmbForceStopMesg(NUSiCommonMesg* mesg);
s32 contRmbForceStopEndMesg(NUSiCommonMesg* mesg);
s32 (*D_80093CE4[])(NUSiCommonMesg*) = {
contRmbRetrace, contRmbCheckMesg, contRmbStartMesg, contRmbStopMesg, contRmbForceStopMesg, contRmbForceStopEndMesg,
contRmbRetrace,
contRmbCheckMesg,
contRmbStartMesg,
contRmbStopMesg,
contRmbForceStopMesg,
contRmbForceStopEndMesg,
NULL
};
NUCallBackList nuContRmbCallBack = {.next = NULL, .func = D_80093CE4, .majorNo = 0x300, .funcNum = 0};
NUCallBackList nuContRmbCallBack = {
.next = NULL,
.func = D_80093CE4,
.majorNo = NU_SI_MAJOR_NO_RMB,
.funcNum = 0
};
void nuContRmbMgrInit(void) {
u32 i;
for (i = 0; i < NU_CONT_MAXCONTROLLERS; i++) {
nuContRmbCtl[i].state = NU_CONT_RMB_STATE_STOPPED;
nuContRmbCtl[i].mode = NU_CONT_RMB_MODE_DISABLE;
nuContRmbCtl[i].counter = i;
}
nuSiCallBackAdd(&nuContRmbCallBack);
}
void nuContRmbMgrRemove(void) {
nuSiCallBackRemove(&nuContRmbCallBack);
}
s32 contRmbControl(NUContRmbCtl* rmbCtl, u32 contNo) {
s32 ret = 0;
@ -104,47 +130,12 @@ s32 contRmbRetrace(NUSiCommonMesg* mesg) {
return 0;
}
void nuContRmbMgrInit(void) {
u32 i;
for (i = 0; i < NU_CONT_MAXCONTROLLERS; i++) {
nuContRmbCtl[i].state = NU_CONT_RMB_STATE_STOPPED;
nuContRmbCtl[i].mode = NU_CONT_RMB_MODE_DISABLE;
nuContRmbCtl[i].counter = i;
}
nuSiCallBackAdd(&nuContRmbCallBack);
}
void nuContRmbMgrRemove(void) {
nuSiCallBackRemove(&nuContRmbCallBack);
}
s32 contRmbCheckMesg(NUSiCommonMesg* mesg) {
NUContRmbMesg* rmbMesg = (NUContRmbMesg*) mesg->dataPtr;
return osMotorInit(&nuSiMesgQ, &nuContPfs[rmbMesg->contNo], rmbMesg->contNo);
}
s32 contRmbStartMesg(NUSiCommonMesg* mesg) {
NUContRmbMesg* rmbMesg = (NUContRmbMesg*) mesg->dataPtr;
NUContRmbCtl* rmbCtl = (NUContRmbCtl*) rmbMesg->data;
nuContRmbCtl[rmbMesg->contNo].state = rmbCtl->state;
nuContRmbCtl[rmbMesg->contNo].frame = rmbCtl->frame;
nuContRmbCtl[rmbMesg->contNo].freq = rmbCtl->freq;
nuContRmbCtl[rmbMesg->contNo].counter = 0;
return 0;
}
s32 contRmbStopMesg(NUSiCommonMesg* mesg) {
NUContRmbMesg* rmbMesg = (NUContRmbMesg*) mesg->dataPtr;
nuContRmbCtl[rmbMesg->contNo].frame = 0;
return 0;
}
s32 contRmbForceStopMesg(NUSiCommonMesg* mesg) {
u32 i;
@ -165,3 +156,22 @@ s32 contRmbForceStopEndMesg(NUSiCommonMesg* mesg) {
return 0;
}
s32 contRmbStartMesg(NUSiCommonMesg* mesg) {
NUContRmbMesg* rmbMesg = (NUContRmbMesg*) mesg->dataPtr;
NUContRmbCtl* rmbCtl = (NUContRmbCtl*) rmbMesg->data;
nuContRmbCtl[rmbMesg->contNo].state = rmbCtl->state;
nuContRmbCtl[rmbMesg->contNo].frame = rmbCtl->frame;
nuContRmbCtl[rmbMesg->contNo].freq = rmbCtl->freq;
nuContRmbCtl[rmbMesg->contNo].counter = 0;
return 0;
}
s32 contRmbStopMesg(NUSiCommonMesg* mesg) {
NUContRmbMesg* rmbMesg = (NUContRmbMesg*) mesg->dataPtr;
nuContRmbCtl[rmbMesg->contNo].frame = 0;
return 0;
}

View File

@ -15,6 +15,8 @@ u16* FrameBuf[] = {
gFrameBuf0, gFrameBuf1, gFrameBuf2
};
extern s32 D_800B91D0[];
Gfx rdpstateinit_dl[] = {
gsDPSetEnvColor(0, 0, 0, 0),
gsDPSetPrimColor(0, 0, 0, 0, 0, 0),
@ -63,6 +65,9 @@ void nuGfxInitEX2(void) {
nuGfxSetCfb(FrameBuf, NU_GFX_FRAMEBUFFER_NUM);
nuGfxSetZBuffer((u16*) NU_GFX_ZBUFFER_ADDR);
nuGfxSwapCfbFuncSet(nuGfxSwapCfb);
#if VERSION_PAL
nuGfxSetUcodeFifo(D_800B91D0, NU_GFX_RDP_OUTPUTBUFF_SIZE);
#endif
nuGfxUcode = &nugfx_ucode;
nuGfxTaskMgrInit();

View File

@ -0,0 +1,7 @@
#include "common.h"
#include "nu/nusys.h"
void nuGfxSetUcodeFifo(void* fifoBufPtr, s32 size) {
nuGfxUcodeFifoPtr = (u64*)fifoBufPtr;
nuGfxUcodeFifoSize = size;
}

View File

@ -2,6 +2,10 @@
#include "nu/nusys.h"
u32 nuGfxCfbNum = 1;
#if VERSION_PAL
s32 nuGfxUcodeFifoSize = -1;
u64* nuGfxUcodeFifoPtr = NULL;
#endif
NUGfxSwapCfbFunc nuGfxSwapCfbFunc = NULL;
NUGfxTaskEndFunc nuGfxTaskEndFunc = NULL;
u16 beforeFlag = 0;
@ -88,8 +92,10 @@ void nuGfxTaskMgrInit(void) {
nuGfxTask[i].list.t.ucode_data_size = SP_UCODE_DATA_SIZE;
nuGfxTask[i].list.t.dram_stack = (u64*) &D_800DA040;
nuGfxTask[i].list.t.dram_stack_size = SP_DRAM_STACK_SIZE8;
#if !VERSION_PAL
nuGfxTask[i].list.t.output_buff = (u64*) &D_800B91D0;
nuGfxTask[i].list.t.output_buff_size = (u64*) &D_800B91D0[NU_GFX_RDP_OUTPUTBUFF_SIZE / sizeof(u32)];
#endif
nuGfxTask[i].list.t.yield_data_ptr = (u64*) &nuYieldBuf;
nuGfxTask[i].list.t.yield_data_size = NU_GFX_YIELD_BUF_SIZE;
}
@ -106,6 +112,10 @@ void nuGfxTaskStart(Gfx* gfxList_ptr, u32 gfxListSize, u32 ucode, u32 flag) {
nuGfxTask_ptr->list.t.flags = flag >> 16;
nuGfxTask_ptr->list.t.ucode = nuGfxUcode[ucode].ucode;
nuGfxTask_ptr->list.t.ucode_data = nuGfxUcode[ucode].ucode_data;
#if VERSION_PAL
nuGfxTask_ptr->list.t.output_buff = nuGfxUcodeFifoPtr;
nuGfxTask_ptr->list.t.output_buff_size = &nuGfxUcodeFifoPtr[nuGfxUcodeFifoSize/sizeof(u64)];
#endif
nuGfxTask_ptr->flags = flag & 0xFFFF;
nuGfxTask_ptr->framebuffer = nuGfxCfb_ptr;

View File

@ -1,8 +1,6 @@
#include "common.h"
#include "nu/nusys.h"
void gfxThread(void*);
NUGfxFunc nuGfxFunc = NULL;
NUGfxPreNMIFunc nuGfxPreNMIFunc = NULL;
OSMesgQueue nuGfxMesgQ;
@ -11,12 +9,7 @@ static char GfxStack[NU_GFX_STACK_SIZE];
OSThread D_800B1B90;
void nuGfxThreadStart(void) {
osCreateThread(&D_800B1B90, 4, gfxThread, NULL, &GfxStack[NU_GFX_STACK_SIZE], NU_GFX_THREAD_PRI);
osStartThread(&D_800B1B90);
}
void gfxThread(void* data) {
static void gfxThread(void* data) {
NUScClient gfxClient;
NUScMsg* mesgType;
@ -40,3 +33,8 @@ void gfxThread(void* data) {
}
}
}
void nuGfxThreadStart(void) {
osCreateThread(&D_800B1B90, 4, gfxThread, NULL, &GfxStack[NU_GFX_STACK_SIZE], NU_GFX_THREAD_PRI);
osStartThread(&D_800B1B90);
}

View File

@ -12,7 +12,9 @@ void nuPiReadRom(u32 rom_addr, void* buf_ptr, u32 size) {
ioMesg.hdr.pri = OS_MESG_PRI_NORMAL;
ioMesg.hdr.retQueue = &queue;
osInvalDCache(buf_ptr, size);
#if !VERSION_PAL
osInvalICache(buf_ptr, size);
#endif
while (size != 0) {
mesgSize = size;

View File

@ -1,13 +1,15 @@
#include "common.h"
#include "nu/nusys.h"
NOP_FIX
NUSched nusched;
NUScPreNMIFunc nuScPreNMIFunc = NULL;
u8 nuScPreNMIFlag;
#if VERSION_PAL
char nusys_version[] = "NuSystem2.07";
#else
char nusys_version[] = "NuSystem2.05";
#endif
u32 nuScRetraceCounter = (u32) nusys_version;
@ -69,6 +71,114 @@ void nuScCreateScheduler(u8 videoMode, u8 numFields) {
osStartThread(&nusched.graphicsThread);
}
OSMesgQueue* nuScGetAudioMQ(void) {
return &nusched.audioRequestMQ;
}
OSMesgQueue* nuScGetGfxMQ(void) {
return &nusched.graphicsRequestMQ;
}
void nuScEventHandler(void) {
OSMesg msg;
s32 beforeResetFrame;
nuScRetraceCounter = 0;
while (TRUE) {
osRecvMesg(&nusched.retraceMQ, &msg, OS_MESG_BLOCK);
switch ((s32) msg) {
case 666:
nuScRetraceCounter++;
nuScEventBroadcast(&nusched.retraceMsg);
if (nuScPreNMIFlag){
if (beforeResetFrame){
beforeResetFrame--;
} else {
nuScPreNMIFlag |= NU_SC_BEFORE_RESET;
osAfterPreNMI();
osViSetYScale(1.0);
osViBlack(TRUE);
}
}
break;
case 669:
nuScPreNMIFlag = NU_SC_PRENMI_GET;
nuScEventBroadcast(&nusched.prenmiMsg);
if (nuScPreNMIFunc != NULL){
(*nuScPreNMIFunc)();
}
beforeResetFrame = (nusched.frameRate / 2) / nusched.retraceCount - 3;
break;
default:
break;
}
}
}
void nuScAddClient(NUScClient* c, OSMesgQueue* mq, NUScMsg msgType) {
s32 mask;
mask = osSetIntMask(OS_IM_NONE);
c->msgQ = mq;
c->next = nusched.clientList;
c->msgType = msgType;
nusched.clientList = c;
if ((msgType & NU_SC_PRENMI_MSG) && nuScPreNMIFlag) {
osSendMesg(mq, &nusched.prenmiMsg, OS_MESG_NOBLOCK);
}
osSetIntMask(mask);
}
void nuScResetClientMesgType(NUScClient* client, NUScMsg msgType) {
s32 mask;
mask = osSetIntMask(OS_IM_NONE);
client->msgType = msgType;
osSetIntMask(mask);
}
void nuScRemoveClient(NUScClient* client) {
s32 mask = osSetIntMask(OS_IM_NONE);
NUScClient* clientList = nusched.clientList;
NUScClient* prev = NULL;
while (clientList != NULL) {
if (clientList == client) {
if (prev != NULL) {
prev->next = clientList->next;
} else {
nusched.clientList = clientList->next;
}
break;
}
prev = clientList;
clientList = clientList->next;
}
osSetIntMask(mask);
}
void nuScEventBroadcast(NUScMsg* msg) {
NUScClient* clientList = nusched.clientList;
while (clientList != NULL) {
if (clientList->msgType & *msg) {
osSendMesg(clientList->msgQ, msg, OS_MESG_NOBLOCK);
}
clientList = clientList->next;
}
}
void nuScExecuteAudio(void) {
NUScTask* gfxTask;
NUScTask* audioTask;
@ -160,164 +270,6 @@ void nuScExecuteGraphics(void) {
}
}
void nuScAddClient(NUScClient* c, OSMesgQueue* mq, NUScMsg msgType) {
s32 mask;
mask = osSetIntMask(OS_IM_NONE);
c->msgQ = mq;
c->next = nusched.clientList;
c->msgType = msgType;
nusched.clientList = c;
if ((msgType & NU_SC_PRENMI_MSG) && nuScPreNMIFlag) {
osSendMesg(mq, &nusched.prenmiMsg, OS_MESG_NOBLOCK);
}
osSetIntMask(mask);
}
void nuScRemoveClient(NUScClient* client) {
s32 mask = osSetIntMask(OS_IM_NONE);
NUScClient* clientList = nusched.clientList;
NUScClient* prev = NULL;
while (clientList != NULL) {
if (clientList == client) {
if (prev != NULL) {
prev->next = clientList->next;
} else {
nusched.clientList = clientList->next;
}
break;
}
prev = clientList;
clientList = clientList->next;
}
osSetIntMask(mask);
}
void nuScResetClientMesgType(NUScClient* client, NUScMsg msgType) {
s32 mask;
mask = osSetIntMask(OS_IM_NONE);
client->msgType = msgType;
osSetIntMask(mask);
}
OSMesgQueue* nuScGetGfxMQ(void) {
return &nusched.graphicsRequestMQ;
}
OSMesgQueue* nuScGetAudioMQ(void) {
return &nusched.audioRequestMQ;
}
void nuScSetFrameBufferNum(u8 frameBufferNum) {
nusched.frameBufferNum = frameBufferNum;
}
s32 nuScGetFrameRate(void) {
return nusched.frameRate;
}
void nuScEventHandler(void) {
OSMesg msg;
s32 beforeResetFrame;
nuScRetraceCounter = 0;
while (TRUE) {
osRecvMesg(&nusched.retraceMQ, &msg, OS_MESG_BLOCK);
switch ((s32) msg) {
case 666:
nuScRetraceCounter++;
nuScEventBroadcast(&nusched.retraceMsg);
if (nuScPreNMIFlag){
if (beforeResetFrame){
beforeResetFrame--;
} else {
nuScPreNMIFlag |= NU_SC_BEFORE_RESET;
osAfterPreNMI();
osViSetYScale(1.0);
osViBlack(TRUE);
}
}
break;
case 669:
nuScPreNMIFlag = NU_SC_PRENMI_GET;
nuScEventBroadcast(&nusched.prenmiMsg);
if (nuScPreNMIFunc != NULL){
(*nuScPreNMIFunc)();
}
beforeResetFrame = (nusched.frameRate / 2) / nusched.retraceCount - 3;
break;
default:
break;
}
}
}
void nuScEventBroadcast(NUScMsg* msg) {
NUScClient* clientList = nusched.clientList;
while (clientList != NULL) {
if (clientList->msgType & *msg) {
osSendMesg(clientList->msgQ, msg, OS_MESG_NOBLOCK);
}
clientList = clientList->next;
}
}
// copy of nuScAddClient
static inline void nuScAddClient_inline(NUScClient* c, OSMesgQueue* mq, NUScMsg msgType) {
s32 mask;
mask = osSetIntMask(OS_IM_NONE);
c->msgQ = mq;
c->next = nusched.clientList;
c->msgType = msgType;
nusched.clientList = c;
if ((msgType & NU_SC_PRENMI_MSG) && nuScPreNMIFlag) {
osSendMesg(mq, &nusched.prenmiMsg, OS_MESG_NOBLOCK);
}
osSetIntMask(mask);
}
// copy of nuScRemoveClient
static inline void nuScRemoveClient_inline(NUScClient* client) {
s32 mask = osSetIntMask(OS_IM_NONE);
NUScClient* clientList = nusched.clientList;
NUScClient* prev = NULL;
while (clientList != NULL) {
if (clientList == client) {
if (prev != NULL) {
prev->next = clientList->next;
} else {
nusched.clientList = clientList->next;
}
break;
}
prev = clientList;
clientList = clientList->next;
}
osSetIntMask(mask);
}
// TODO: investigate why nuScAddClient and nuScRemoveClient were inlined
void nuScWaitTaskReady(NUScTask* task) {
NUScClient client;
void* fb = task->framebuffer;
@ -327,8 +279,16 @@ void nuScWaitTaskReady(NUScTask* task) {
}
while (osViGetCurrentFramebuffer() == fb || osViGetNextFramebuffer() == fb) {
nuScAddClient_inline(&client, &nusched.waitMQ, NU_SC_RETRACE_MSG);
nuScAddClient(&client, &nusched.waitMQ, NU_SC_RETRACE_MSG);
osRecvMesg(&nusched.waitMQ, NULL, OS_MESG_BLOCK);
nuScRemoveClient_inline(&client);
nuScRemoveClient(&client);
}
}
void nuScSetFrameBufferNum(u8 frameBufferNum) {
nusched.frameBufferNum = frameBufferNum;
}
s32 nuScGetFrameRate(void) {
return nusched.frameRate;
}

47
src/os/vimodefpallpn1.c Normal file
View File

@ -0,0 +1,47 @@
/**
* @file vimodefpallpn1.c
*
* FPAL LPN1 Video Mode
*
* L = Low Resolution
* P = Point Sampled
* N = Non-Interlaced
* 1 = 16-bit Framebuffer
*/
#include "PR/os.h"
#include "PR/rcp.h"
#include "PR/viint.h"
OSViMode osViModeFpalLpn1 = {
OS_VI_FPAL_LPN1, // type
{
// comRegs
VI_CTRL_TYPE_16 | VI_CTRL_GAMMA_DITHER_ON | VI_CTRL_GAMMA_ON | VI_CTRL_ANTIALIAS_MODE_2 |
VI_CTRL_PIXEL_ADV_3, // ctrl
WIDTH(320), // width
BURST(58, 30, 4, 69), // burst
VSYNC(625), // vSync
HSYNC(3177, 23), // hSync
LEAP(3183, 3181), // leap
HSTART(128, 768), // hStart
SCALE(2, 0), // xScale
VCURRENT(0), // vCurrent
},
{ // fldRegs
{
// [0]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(47, 617), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
},
{
// [1]
ORIGIN(640), // origin
SCALE(1, 0), // yScale
HSTART(47, 617), // vStart
BURST(107, 2, 9, 0), // vBurst
VINTR(2), // vIntr
} },
};

17
src/pause/pause_gfx_de.c Normal file
View File

@ -0,0 +1,17 @@
#include "include_asset.h"
INCLUDE_IMG("pause/de/banner_hp.png", pause_banner_hp_de_png);
INCLUDE_PAL("pause/de/banner_hp.pal", pause_banner_hp_de_pal);
INCLUDE_IMG("pause/de/banner_fp.png", pause_banner_fp_de_png);
INCLUDE_PAL("pause/de/banner_fp.pal", pause_banner_fp_de_pal);
INCLUDE_IMG("pause/de/banner_bp.png", pause_banner_bp_de_png);
INCLUDE_PAL("pause/de/banner_bp.pal", pause_banner_bp_de_pal);
INCLUDE_IMG("pause/de/banner_boots.png", pause_banner_boots_de_png);
INCLUDE_PAL("pause/de/banner_boots.pal", pause_banner_boots_de_pal);
INCLUDE_IMG("pause/de/banner_hammer.png", pause_banner_hammer_de_png);
INCLUDE_PAL("pause/de/banner_hammer.pal", pause_banner_hammer_de_pal);
INCLUDE_IMG("pause/de/banner_star_energy.png", pause_banner_star_energy_de_png);
INCLUDE_PAL("pause/de/banner_star_energy.pal", pause_banner_star_energy_de_pal);
INCLUDE_IMG("pause/de/available.png", pause_available_de_png);
INCLUDE_PAL("pause/de/available.pal", pause_available_de_pal);
INCLUDE_IMG("pause/de/prompt_check_abilities.png", pause_prompt_check_abilities_de_png);
INCLUDE_PAL("pause/de/prompt_check_abilities.pal", pause_prompt_check_abilities_de_pal);

17
src/pause/pause_gfx_es.c Normal file
View File

@ -0,0 +1,17 @@
#include "include_asset.h"
INCLUDE_IMG("pause/es/banner_hp.png", pause_banner_hp_es_png);
INCLUDE_PAL("pause/es/banner_hp.pal", pause_banner_hp_es_pal);
INCLUDE_IMG("pause/es/banner_fp.png", pause_banner_fp_es_png);
INCLUDE_PAL("pause/es/banner_fp.pal", pause_banner_fp_es_pal);
INCLUDE_IMG("pause/es/banner_bp.png", pause_banner_bp_es_png);
INCLUDE_PAL("pause/es/banner_bp.pal", pause_banner_bp_es_pal);
INCLUDE_IMG("pause/es/banner_boots.png", pause_banner_boots_es_png);
INCLUDE_PAL("pause/es/banner_boots.pal", pause_banner_boots_es_pal);
INCLUDE_IMG("pause/es/banner_hammer.png", pause_banner_hammer_es_png);
INCLUDE_PAL("pause/es/banner_hammer.pal", pause_banner_hammer_es_pal);
INCLUDE_IMG("pause/es/banner_star_energy.png", pause_banner_star_energy_es_png);
INCLUDE_PAL("pause/es/banner_star_energy.pal", pause_banner_star_energy_es_pal);
INCLUDE_IMG("pause/es/available.png", pause_available_es_png);
INCLUDE_PAL("pause/es/available.pal", pause_available_es_pal);
INCLUDE_IMG("pause/es/prompt_check_abilities.png", pause_prompt_check_abilities_es_png);
INCLUDE_PAL("pause/es/prompt_check_abilities.pal", pause_prompt_check_abilities_es_pal);

17
src/pause/pause_gfx_fr.c Normal file
View File

@ -0,0 +1,17 @@
#include "include_asset.h"
INCLUDE_IMG("pause/fr/banner_hp.png", pause_banner_hp_fr_png);
INCLUDE_PAL("pause/fr/banner_hp.pal", pause_banner_hp_fr_pal);
INCLUDE_IMG("pause/fr/banner_fp.png", pause_banner_fp_fr_png);
INCLUDE_PAL("pause/fr/banner_fp.pal", pause_banner_fp_fr_pal);
INCLUDE_IMG("pause/fr/banner_bp.png", pause_banner_bp_fr_png);
INCLUDE_PAL("pause/fr/banner_bp.pal", pause_banner_bp_fr_pal);
INCLUDE_IMG("pause/fr/banner_boots.png", pause_banner_boots_fr_png);
INCLUDE_PAL("pause/fr/banner_boots.pal", pause_banner_boots_fr_pal);
INCLUDE_IMG("pause/fr/banner_hammer.png", pause_banner_hammer_fr_png);
INCLUDE_PAL("pause/fr/banner_hammer.pal", pause_banner_hammer_fr_pal);
INCLUDE_IMG("pause/fr/banner_star_energy.png", pause_banner_star_energy_fr_png);
INCLUDE_PAL("pause/fr/banner_star_energy.pal", pause_banner_star_energy_fr_pal);
INCLUDE_IMG("pause/fr/available.png", pause_available_fr_png);
INCLUDE_PAL("pause/fr/available.pal", pause_available_fr_pal);
INCLUDE_IMG("pause/fr/prompt_check_abilities.png", pause_prompt_check_abilities_fr_png);
INCLUDE_PAL("pause/fr/prompt_check_abilities.pal", pause_prompt_check_abilities_fr_pal);

View File

@ -1,6 +1,11 @@
#include "pause_common.h"
#include "message_ids.h"
#if VERSION_PAL
extern u8 D_PAL_80271B30[4];
extern u8 D_PAL_80271B34[4];
#endif
void pause_items_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening);
void pause_items_init(MenuPanel* panel);
void pause_items_handle_input(MenuPanel* panel);
@ -127,7 +132,6 @@ s32 pause_items_scroll_offset_x(s32 beforeX) {
#define X_VAR3 9
#define X_VAR4 18
#define X_VAR5 18
#define X_VAR6 27
#define X_VAR7 77
#define Y_VAR3 23
#define Y_VAR4 28
@ -140,8 +144,11 @@ s32 pause_items_scroll_offset_x(s32 beforeX) {
#define X_VAR2 105
#define X_VAR3 12
#define X_VAR4 21
#if VERSION_PAL
#define X_VAR5 D_PAL_80271B34[gCurrentLanguage]
#else
#define X_VAR5 25
#define X_VAR6 34
#endif
#define X_VAR7 85
#define Y_VAR3 17
#define Y_VAR4 23
@ -151,9 +158,6 @@ s32 pause_items_scroll_offset_x(s32 beforeX) {
#define W_VAR2 91
#endif
#if VERSION_PAL
INCLUDE_ASM(void, "pause/pause_items", pause_items_draw_contents);
#else
void pause_items_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening) {
s32 i, pageIndex, itemIndex;
s32 totalItemIndex;
@ -175,6 +179,7 @@ void pause_items_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
s32 msg, msgX, msgY, opacity1;
s32 selectedPosX, selectedPosY;
s32 cursorOffsetX, cursorOffsetY;
s32 msg2;
style = DRAW_MSG_STYLE_MENU;
palette = MSG_PAL_STANDARD;
@ -347,6 +352,10 @@ void pause_items_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
W_VAR1, 34, 255, gPauseItemsCurrentTab == 1 ? 128 : 0, 0, 0,
0, 0, 0, 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
#if VERSION_PAL
if (gCurrentLanguage == LANGUAGE_EN) {
#endif
msg = pause_get_menu_msg(PAUSE_MSG_KEY_ITEMS);
msgX = baseX + X_VAR3;
if (gPauseItemsCurrentTab == 0) {
@ -357,8 +366,38 @@ void pause_items_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (gPauseItemsCurrentTab == 1) {
opacity1 = 191;
}
draw_msg(msg, msgX, msgY, opacity1, MSG_PAL_WHITE, DRAW_MSG_STYLE_MENU);
#if VERSION_PAL
} else {
msg = pause_get_menu_msg(PAUSE_MSG_KEY_ITEMS);
msgX = baseX + 12;
if (gPauseItemsCurrentTab == 0) {
msgX = baseX + 21;
}
opacity1 = 255;
msgY = baseY + 12;
if (gPauseItemsCurrentTab == 1) {
opacity1 = 191;
}
draw_msg(msg, msgX, msgY, opacity1, MSG_PAL_WHITE, DRAW_MSG_STYLE_MENU);
msg2 = pause_get_menu_msg(PAUSE_MSG_PAL_4B);
msgX = baseX + D_PAL_80271B30[gCurrentLanguage];
if (gPauseItemsCurrentTab == 0) {
msgX = baseX + D_PAL_80271B30[gCurrentLanguage] + 9;
}
opacity1 = 255;
msgY = baseY + 22;
if (gPauseItemsCurrentTab == 1) {
opacity1 = 191;
}
draw_msg(msg2, msgX, msgY, opacity1, MSG_PAL_WHITE, DRAW_MSG_STYLE_MENU);
}
#endif
draw_box(DRAW_FLAG_NO_CLIP, &gPauseWS_17, gPauseItemsCurrentTab == 1 ? baseX + 9 : baseX, baseY + 39, 0,
W_VAR2, 34, 255, gPauseItemsCurrentTab == 0 ? 128 : 0, 0, 0,
0, 0, 0, 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0);
@ -366,7 +405,7 @@ void pause_items_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
msg = pause_get_menu_msg(PAUSE_MSG_CONSUMABLES);
msgX = baseX + X_VAR5;
if (gPauseItemsCurrentTab == 1) {
msgX = baseX + X_VAR6;
msgX = baseX + X_VAR5 + 9;
}
opacity1 = 255;
msgY = baseY + 49;
@ -397,7 +436,6 @@ void pause_items_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
}
}
}
#endif
#if VERSION_JP
#define ROWS_COUNT 5

View File

@ -1,5 +1,15 @@
#include "pause_common.h"
#if VERSION_PAL
extern u8 D_PAL_80271B20[4];
extern u8 D_PAL_80271B14[4];
extern u8 D_PAL_80271B1C[4];
extern u8 D_PAL_80271B18[4];
extern u8 D_PAL_80271B10[4];
extern u8 D_PAL_80271B24[4];
extern u8 D_PAL_80271B28[4];
#endif
void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening);
void pause_stats_init(MenuPanel* panel);
void pause_stats_handle_input(MenuPanel* panel);
@ -18,6 +28,27 @@ static s32 gPauseStatsIconIDs[12];
#define COL_C_X 110
#define POS_1_X 60
#define POS_2_X 100
#define POS_3_X 61
#define POS_4_X 16
#define PAUSE_BOX_WIDTH 113
#define X_VAR1 143
#define X_VAR2 155
#elif VERSION_PAL
#define NUMBER_OFFSET_Y 0
#define ROW_1_Y 51
#define ROW_2_Y 51
#define ROW_3_Y 85
#define ROW_4_Y 119
#define COL_A_X 25
#define COL_B_X 78
#define COL_C_X 105
#define POS_1_X D_PAL_80271B20[gCurrentLanguage]
#define POS_2_X D_PAL_80271B14[gCurrentLanguage]
#define POS_3_X D_PAL_80271B1C[gCurrentLanguage]
#define POS_4_X D_PAL_80271B18[gCurrentLanguage]
#define PAUSE_BOX_WIDTH D_PAL_80271B10[gCurrentLanguage]
#define X_VAR1 D_PAL_80271B24[gCurrentLanguage]
#define X_VAR2 D_PAL_80271B28[gCurrentLanguage]
#elif VERSION_JP
#define NUMBER_OFFSET_Y 0
#define ROW_1_Y 51
@ -29,6 +60,11 @@ static s32 gPauseStatsIconIDs[12];
#define COL_C_X 105
#define POS_1_X 62
#define POS_2_X 92
#define POS_3_X 53
#define POS_4_X 16
#define PAUSE_BOX_WIDTH 102
#define X_VAR1 151
#define X_VAR2 163
#else
#define NUMBER_OFFSET_Y 0
#define ROW_1_Y 51
@ -40,6 +76,39 @@ static s32 gPauseStatsIconIDs[12];
#define COL_C_X 105
#define POS_1_X 67
#define POS_2_X 106
#define POS_3_X 61
#define POS_4_X 16
#define PAUSE_BOX_WIDTH 113
#define X_VAR1 143
#define X_VAR2 155
#endif
#if VERSION_JP
#define X_VAR3 239
#define X_VAR4 233
#define COUNT_DRAW_STYLE DRAW_NUMBER_STYLE_MONOSPACE
#define X_VAR5 239
#define X_VAR6 248
#define X_VAR7 127
#define X_VAR8 151
#define X_VAR9 164
#define X_VAR10 128
#define X_VAR11 128
#define X_VAR12 138
#define X_VAR13 150
#else
#define X_VAR3 281
#define X_VAR4 248
#define COUNT_DRAW_STYLE DRAW_NUMBER_STYLE_MONOSPACE_RIGHT
#define X_VAR5 237
#define X_VAR6 246
#define X_VAR7 137
#define X_VAR8 163
#define X_VAR9 176
#define X_VAR10 130
#define X_VAR11 138
#define X_VAR12 140
#define X_VAR13 152
#endif
// Probably only used here, but could theoretically be used in the main menu too
@ -182,9 +251,6 @@ MenuPanel gPausePanelStats = {
.fpCleanup = &pause_stats_cleanup
};
#if VERSION_PAL
INCLUDE_ASM(void, "pause/pause_stats", pause_stats_draw_contents);
#else
void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening) {
StatsEntryData* statsEntryData;
PlayerData* playerData;
@ -201,55 +267,29 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
s32 frameCount;
s32 powFullBars;
#if VERSION_JP
// draw coin count
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_COIN], baseX + 151, baseY + 109);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_COIN], baseX + X_VAR1, baseY + 109);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_COIN]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_COINS), baseX + 163, baseY + 101, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.coins, baseX + 239, baseY + 101 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 233, baseY + 108);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_COINS), baseX + X_VAR2, baseY + 101, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.coins, baseX + X_VAR3, baseY + 101 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, COUNT_DRAW_STYLE);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + X_VAR4, baseY + 108);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_TIMES]);
// draw star point count
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_POINT], baseX + 151, baseY + 94);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_POINT], baseX + X_VAR1, baseY + 94);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_STAR_POINT]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_POINTS), baseX + 163, baseY + 86, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.starPoints, baseX + 239, baseY + 86 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 233, baseY + 93);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_POINTS), baseX + X_VAR2, baseY + 86, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.starPoints, baseX + X_VAR3, baseY + 86 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, COUNT_DRAW_STYLE);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + X_VAR4, baseY + 93);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_TIMES]);
// draw star piece count
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_PIECE], baseX + 151, baseY + 123);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_PIECE], baseX + X_VAR1, baseY + 123);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_STAR_PIECE]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_PIECES), baseX + 163, baseY + 116, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.starPieces, baseX + 239, baseY + 116 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 233, baseY + 123);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_PIECES), baseX + X_VAR2, baseY + 116, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.starPieces, baseX + X_VAR3, baseY + 116 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, COUNT_DRAW_STYLE);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + X_VAR4, baseY + 123);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_TIMES]);
#else
// draw coin count
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_COIN], baseX + 143, baseY + 109);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_COIN]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_COINS), baseX + 155, baseY + 101, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.coins, baseX + 281, baseY + 101 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 3);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 108);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_TIMES]);
// draw star point count
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_POINT], baseX + 143, baseY + 94);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_STAR_POINT]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_POINTS), baseX + 155, baseY + 86, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.starPoints, baseX + 281, baseY + 86 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 3);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 93);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_TIMES]);
// draw star piece count
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_STAR_PIECE], baseX + 143, baseY + 123);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_STAR_PIECE]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_STAR_PIECES), baseX + 155, baseY + 116, 255, MSG_PAL_STANDARD, 1);
draw_number(gPlayerData.starPieces, baseX + 281, baseY + 116 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 3);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_TIMES], baseX + 248, baseY + 123);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_TIMES]);
#endif
// draw HP count
pause_draw_menu_label(PAUSE_LBL_HP, baseX + 21, baseY + 35);
@ -280,27 +320,16 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
#define HOUR (MINUTE * 60)
// draw play time
#if VERSION_JP
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_CLOCK], baseX + 151, baseY + 140);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_CLOCK], baseX + X_VAR1, baseY + 140);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_CLOCK]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_TIME), baseX + 163, baseY + 133, 255, MSG_PAL_STANDARD, 1);
#else
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_CLOCK], baseX + 143, baseY + 140);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_CLOCK]);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_TIME), baseX + 155, baseY + 133, 255, MSG_PAL_STANDARD, 1);
#endif
draw_msg(pause_get_menu_msg(PAUSE_MSG_LBL_TIME), baseX + X_VAR2, baseY + 133, 255, MSG_PAL_STANDARD, 1);
frameCount = gPlayerData.frameCounter;
if (frameCount >= (100 * HOUR)) {
frameCount = (100 * HOUR) - 1;
}
// draw hours
#if VERSION_JP
draw_number((frameCount / (10 * HOUR)) % 10, baseX + 239, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
draw_number((frameCount / HOUR) % 10, baseX + 248, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
#else
draw_number((frameCount / (10 * HOUR)) % 10, baseX + 237, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
draw_number((frameCount / HOUR) % 10, baseX + 246, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
#endif
draw_number((frameCount / (10 * HOUR)) % 10, baseX + X_VAR5, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
draw_number((frameCount / HOUR) % 10, baseX + X_VAR6, baseY + 133 + NUMBER_OFFSET_Y, 1, MSG_PAL_STANDARD, 255, 2);
draw_msg(pause_get_menu_msg(PAUSE_MSG_DOT), baseX + 257, baseY + 132, 255, MSG_PAL_STANDARD, 1);
draw_msg(pause_get_menu_msg(PAUSE_MSG_DOT), baseX + 257, baseY + 127, 255, MSG_PAL_STANDARD, 1);
// draw minutes
@ -310,21 +339,15 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
bootsLevel = gPlayerData.bootsLevel;
hammerLevel = gPlayerData.hammerLevel;
level = gPlayerData.level;
#if VERSION_JP
draw_box(4, &gPauseWS_10, baseX + 7, baseY + 12, 0, level >= 10 ? 110 : 102, 17, 255, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL);
#else
draw_box(4, &gPauseWS_10, baseX + 7, baseY + 12, 0, level >= 10 ? 121 : 113, 17, 255, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL);
#endif
draw_box(4, &gPauseWS_10, baseX + 7, baseY + 12, 0, PAUSE_BOX_WIDTH + (level >= 10 ? 8 : 0), 17, 255, 0,
0.0f, 0.0f, 0.0f, 0.0f, 0.0f, NULL, NULL, NULL, SCREEN_WIDTH, SCREEN_HEIGHT, NULL);
// draw level
#if VERSION_JP
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_MARIO], baseX + 53, baseY + 21);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_MARIO]);
#elif VERSION_US || VERSION_PAL
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_MARIO], baseX + 61, baseY + 21);
#if !VERSION_IQUE
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_MARIO], baseX + POS_3_X, baseY + 21);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_MARIO]);
#endif
draw_msg(pause_get_menu_msg(PAUSE_MSG_MARIO), baseX + 16, baseY + 14, 255, MSG_PAL_WHITE, 1);
draw_msg(pause_get_menu_msg(PAUSE_MSG_MARIO), baseX + POS_4_X, baseY + 14, 255, MSG_PAL_WHITE, 1);
draw_msg(pause_get_menu_msg(PAUSE_MSG_LEVEL), baseX + POS_1_X, baseY + 14, 255, MSG_PAL_WHITE, 1);
draw_number(level, baseX + POS_2_X, baseY + 14 + NUMBER_OFFSET_Y, 1, MSG_PAL_WHITE, 255, 2);
@ -344,45 +367,24 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
hammerLevel = 3;
}
#if VERSION_JP
pause_draw_menu_label(PAUSE_LBL_BOOTS, baseX + 127, baseY + 10);
pause_draw_menu_label(PAUSE_LBL_HAMMER, baseX + 127, baseY + 35);
pause_draw_menu_label(PAUSE_LBL_BOOTS, baseX + X_VAR7, baseY + 10);
pause_draw_menu_label(PAUSE_LBL_HAMMER, baseX + X_VAR7, baseY + 35);
// draw boots
hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_BOOTS], gStatsBootsElements[bootsLevel]);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_BOOTS], baseX + 151, baseY + 29);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_BOOTS], baseX + X_VAR8, baseY + 29);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_BOOTS]);
draw_msg(pause_get_menu_msg(gPauseStatsBootsMessages[bootsLevel]), baseX + 164, baseY + 23, 255, MSG_PAL_WHITE, 1);
draw_msg(pause_get_menu_msg(gPauseStatsBootsMessages[bootsLevel]), baseX + X_VAR9, baseY + 23, 255, MSG_PAL_WHITE, 1);
// draw hammer
hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_HAMMER], gStatsHammerElements[hammerLevel]);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_HAMMER], baseX + 151, baseY + 54);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_HAMMER], baseX + X_VAR8, baseY + 54);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_HAMMER]);
draw_msg(pause_get_menu_msg(gPauseStatsHammerMessages[hammerLevel]), baseX + 164, baseY + 48, 255, MSG_PAL_WHITE, 1);
draw_msg(pause_get_menu_msg(gPauseStatsHammerMessages[hammerLevel]), baseX + X_VAR9, baseY + 48, 255, MSG_PAL_WHITE, 1);
// draw star power bar
pause_draw_menu_label(PAUSE_LBL_STATS, baseX + 128, baseY + 69);
pause_draw_menu_label(PAUSE_LBL_ENERGY, baseX + 128, baseY + 60);
#else
pause_draw_menu_label(PAUSE_LBL_BOOTS, baseX + 137, baseY + 10);
pause_draw_menu_label(PAUSE_LBL_HAMMER, baseX + 137, baseY + 35);
// draw boots
hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_BOOTS], gStatsBootsElements[bootsLevel]);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_BOOTS], baseX + 163, baseY + 29);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_BOOTS]);
draw_msg(pause_get_menu_msg(gPauseStatsBootsMessages[bootsLevel]), baseX + 176, baseY + 23, 255, MSG_PAL_WHITE, 1);
// draw hammer
hud_element_set_script(gPauseStatsIconIDs[STAT_ICON_HAMMER], gStatsHammerElements[hammerLevel]);
hud_element_set_render_pos(gPauseStatsIconIDs[STAT_ICON_HAMMER], baseX + 163, baseY + 54);
hud_element_draw_without_clipping(gPauseStatsIconIDs[STAT_ICON_HAMMER]);
draw_msg(pause_get_menu_msg(gPauseStatsHammerMessages[hammerLevel]), baseX + 176, baseY + 48, 255, MSG_PAL_WHITE, 1);
// draw star power bar
pause_draw_menu_label(PAUSE_LBL_STATS, baseX + 130, baseY + 69);
pause_draw_menu_label(PAUSE_LBL_ENERGY, baseX + 138, baseY + 60);
#endif
pause_draw_menu_label(PAUSE_LBL_STATS, baseX + X_VAR10, baseY + 69);
pause_draw_menu_label(PAUSE_LBL_ENERGY, baseX + X_VAR11, baseY + 60);
drawingFirst = TRUE;
curIncrement = 0;
@ -405,11 +407,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -424,11 +422,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -443,11 +437,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -462,11 +452,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -481,11 +467,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -500,11 +482,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -519,11 +497,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsSPIncElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -538,11 +512,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
curIncrement++;
hud_element_set_script(powHudElemID, gPauseStatsStarElements[powBarIdx]);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 150 + (powBarIdx * 20), baseY + 77);
#else
hud_element_set_render_pos(powHudElemID, baseX + 152 + (powBarIdx * 20), baseY + 77);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR13 + (powBarIdx * 20), baseY + 77);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -571,11 +541,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 0) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusSPEmptyIncrement);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[0], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -591,11 +557,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 1) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusSPEmptyIncrement);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[1], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -612,11 +574,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 2) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusSPEmptyIncrement);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[2], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -633,11 +591,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 3) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusSPEmptyIncrement);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[3], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -654,11 +608,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 4) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusSPEmptyIncrement);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[4], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -675,11 +625,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 5) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusSPEmptyIncrement);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[5], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -696,11 +642,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 6) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusSPEmptyIncrement);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 138 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
#else
hud_element_set_render_pos(powHudElemID, baseX + 140 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR12 + (powBarIdx * 20) + D_8024F46C[6], baseY + 75);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -717,11 +659,7 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
if (powIncIdx == 7) {
curIncrement++;
hud_element_set_script(powHudElemID, &HES_StatusStarEmpty);
#if VERSION_JP
hud_element_set_render_pos(powHudElemID, baseX + 150 + (powBarIdx * 20), baseY + 77);
#else
hud_element_set_render_pos(powHudElemID, baseX + 152 + (powBarIdx * 20), baseY + 77);
#endif
hud_element_set_render_pos(powHudElemID, baseX + X_VAR13 + (powBarIdx * 20), baseY + 77);
if (drawingFirst) {
hud_element_draw_without_clipping(powHudElemID);
drawingFirst = FALSE;
@ -739,12 +677,18 @@ void pause_stats_draw_contents(MenuPanel* menu, s32 baseX, s32 baseY, s32 width,
}
if (gPauseMenuCurrentTab == 1) {
#if VERSION_PAL
s32 palOffsetX = menu->selected >= 7 ? D_pause_80253814[gCurrentLanguage] : 0;
StatsEntryData* entry = &gStatsMenuEntries[menu->selected];
pause_set_cursor_pos(WIN_PAUSE_STATS, baseX + entry->cursorX + palOffsetX, baseY + entry->cursorY);
#else
StatsEntryData* entry = &gStatsMenuEntries[menu->selected];
pause_set_cursor_pos(WIN_PAUSE_STATS, baseX + entry->cursorX, baseY + entry->cursorY);
#endif
}
}
#endif
void pause_stats_init(MenuPanel* panel) {
s32 i;

View File

@ -45,6 +45,8 @@ void update_max_rumble_duration(void) {
void reset_max_rumble_duration(void) {
#if VERSION_JP
rumbleMaxDuration = 600;
#elif VERSION_PAL
rumbleMaxDuration = 360;
#else
rumbleMaxDuration = 300;
#endif

View File

@ -2,6 +2,8 @@
#include "entity.h"
#include "include_asset.h"
#if !VERSION_PAL
Lights1 starpoint_lights1 = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
#if VERSION_JP
@ -119,6 +121,8 @@ Gfx D_802A32D8_7AAC78[] = {
};
#endif
#endif
#include "starpoint/digit_0.vtx.inc.c"
INCLUDE_IMG("starpoint/digit_0.png", D_802A3340_7AACE0);
#include "starpoint/load_digit_0.gfx.inc.c"
@ -189,6 +193,7 @@ INCLUDE_IMG("starpoint/digit_9.png", D_802ACD60_7B4700);
#include "starpoint/_render_digit_9.gfx.inc.c"
#include "starpoint/render_digit_9.gfx.inc.c"
#if !VERSION_PAL
#if VERSION_JP
EntityModelScript EMS_starpoint_starpoint = STANDARD_ENTITY_MODEL_SCRIPT(D_802A2B98_7B2608, RENDER_MODE_CLOUD_NO_ZCMP);
EntityModelScript EMS_starpoint_starpoints = STANDARD_ENTITY_MODEL_SCRIPT(D_802A2B98_7B2608, RENDER_MODE_CLOUD_NO_ZCMP);
@ -196,6 +201,7 @@ EntityModelScript EMS_starpoint_starpoints = STANDARD_ENTITY_MODEL_SCRIPT(D_802A
EntityModelScript EMS_starpoint_starpoint = STANDARD_ENTITY_MODEL_SCRIPT(D_802A2158_7A9AF8, RENDER_MODE_CLOUD_NO_ZCMP);
EntityModelScript EMS_starpoint_starpoints = STANDARD_ENTITY_MODEL_SCRIPT(D_802A32D8_7AAC78, RENDER_MODE_CLOUD_NO_ZCMP);
#endif
#endif
EntityModelScript EMS_starpoint_digit_0 = STANDARD_ENTITY_MODEL_SCRIPT(D_802A4410_7ABDB0, RENDER_MODE_CLOUD_NO_ZCMP);
EntityModelScript EMS_starpoint_digit_1 = STANDARD_ENTITY_MODEL_SCRIPT(D_802A5530_7ACED0, RENDER_MODE_CLOUD_NO_ZCMP);
EntityModelScript EMS_starpoint_digit_2 = STANDARD_ENTITY_MODEL_SCRIPT(D_802A6650_7ADFF0, RENDER_MODE_CLOUD_NO_ZCMP);

69
src/starpoint_de.c Normal file
View File

@ -0,0 +1,69 @@
#include "common.h"
#include "entity.h"
#include "include_asset.h"
Lights1 starpoint_lights1_de = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
INCLUDE_IMG("de/starpoint/starpoint.png", D_PAL_802ABC98_81B048);
#include "de/starpoint/load_starpoint.gfx.inc.c"
#include "de/starpoint/starpoint.vtx.inc.c"
Gfx D_PAL_802ACD50_81C100[] = {
gsSPSetLights1(starpoint_lights1_de),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ACC98_81C048),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802ACD10_81C0C0[0], 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACDB0_81C160[] = {
gsSPSetLights1(starpoint_lights1_de),
gsSPDisplayList(D_PAL_802ACD50_81C100),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACDD8_81C188[] = {
gsSPSetLights1(starpoint_lights1_de),
gsSPDisplayList(D_PAL_802ACDB0_81C160),
gsSPEndDisplayList(),
};
Lights1 starpoint_lights2_de = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
INCLUDE_IMG("de/starpoint/starpoints.png", D_PAL_802ACE18_81C1C8);
#include "de/starpoint/load_starpoints.gfx.inc.c"
#include "de/starpoint/starpoints.vtx.inc.c"
Gfx D_PAL_802ADED0_81D280[] = {
gsSPSetLights1(starpoint_lights2_de),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ADE18_81D1C8),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802ADE90_81D240[0], 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADF30_81D2E0[] = {
gsSPSetLights1(starpoint_lights2_de),
gsSPDisplayList(D_PAL_802ADED0_81D280),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADF58_81D308[] = {
gsSPSetLights1(starpoint_lights2_de),
gsSPDisplayList(D_PAL_802ADF30_81D2E0),
gsSPEndDisplayList(),
};
EntityModelScript EMS_starpoint_starpoint_de = STANDARD_ENTITY_MODEL_SCRIPT(D_PAL_802ACDD8_81C188, RENDER_MODE_CLOUD_NO_ZCMP);
EntityModelScript EMS_starpoint_starpoints_de = STANDARD_ENTITY_MODEL_SCRIPT(D_PAL_802ADF58_81D308, RENDER_MODE_CLOUD_NO_ZCMP);

62
src/starpoint_en.c Normal file
View File

@ -0,0 +1,62 @@
#include "common.h"
#include "entity.h"
#include "include_asset.h"
Lights1 starpoint_lights1 = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
INCLUDE_IMG("starpoint/starpoint.png", D_802A1018_7A89B8);
#include "starpoint/load_starpoint.gfx.inc.c"
#include "starpoint/starpoint.vtx.inc.c"
Gfx D_802A20D0_7A9A70[] = {
gsSPSetLights1(starpoint_lights1),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_802A2018_7A99B8),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(D_802A2090_7A9A30, 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_802A2130_7A9AD0[] = {
gsSPSetLights1(starpoint_lights1),
gsSPDisplayList(D_802A20D0_7A9A70),
gsSPEndDisplayList(),
};
Gfx D_802A2158_7A9AF8[] = {
gsSPSetLights1(starpoint_lights1),
gsSPDisplayList(D_802A2130_7A9AD0),
gsSPEndDisplayList(),
};
Lights1 starpoint_lights2 = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
#include "starpoint/starpoints.vtx.inc.c"
INCLUDE_IMG("starpoint/starpoints.png", D_802A21D8_7A9B78);
#include "starpoint/load_starpoints.gfx.inc.c"
Gfx D_802A3250_7AABF0[] = {
gsSPSetLights1(starpoint_lights2),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_802A31D8_7AAB78),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(D_802A2198_7A9B38, 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_802A32B0_7AAC50[] = {
gsSPSetLights1(starpoint_lights2),
gsSPDisplayList(D_802A3250_7AABF0),
gsSPEndDisplayList(),
};
Gfx D_802A32D8_7AAC78[] = {
gsSPSetLights1(starpoint_lights2),
gsSPDisplayList(D_802A32B0_7AAC50),
gsSPEndDisplayList(),
};
EntityModelScript EMS_starpoint_starpoint = STANDARD_ENTITY_MODEL_SCRIPT(D_802A2158_7A9AF8, RENDER_MODE_CLOUD_NO_ZCMP);
EntityModelScript EMS_starpoint_starpoints = STANDARD_ENTITY_MODEL_SCRIPT(D_802A32D8_7AAC78, RENDER_MODE_CLOUD_NO_ZCMP);

68
src/starpoint_es.c Normal file
View File

@ -0,0 +1,68 @@
#include "common.h"
#include "entity.h"
#include "include_asset.h"
Lights1 starpoint_lights1_es = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
INCLUDE_IMG("es/starpoint/starpoint.png", D_PAL_802ABC98_81F6C8);
#include "es/starpoint/load_starpoint.gfx.inc.c"
#include "es/starpoint/starpoint.vtx.inc.c"
Gfx D_PAL_802ACD50_820780[] = {
gsSPSetLights1(starpoint_lights1_es),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ACC98_8206C8),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802ACD10_820740[0], 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACDB0_8207E0[] = {
gsSPSetLights1(starpoint_lights1_es),
gsSPDisplayList(D_PAL_802ACD50_820780),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACDD8_820808[] = {
gsSPSetLights1(starpoint_lights1_es),
gsSPDisplayList(D_PAL_802ACDB0_8207E0),
gsSPEndDisplayList(),
};
Lights1 starpoint_lights2_es = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
INCLUDE_IMG("es/starpoint/starpoints.png", D_PAL_802ACE18_820848);
#include "es/starpoint/load_starpoints.gfx.inc.c"
#include "es/starpoint/starpoints.vtx.inc.c"
Gfx D_PAL_802ADED0_821900[] = {
gsSPSetLights1(starpoint_lights2_es),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ADE18_821848),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802ADE90_8218C0[0], 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADF30_821960[] = {
gsSPSetLights1(starpoint_lights2_es),
gsSPDisplayList(D_PAL_802ADED0_821900),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADF58_821988[] = {
gsSPSetLights1(starpoint_lights2_es),
gsSPDisplayList(D_PAL_802ADF30_821960),
gsSPEndDisplayList(),
};
EntityModelScript EMS_starpoint_starpoint_es = STANDARD_ENTITY_MODEL_SCRIPT(D_PAL_802ACDD8_820808, RENDER_MODE_CLOUD_NO_ZCMP);
EntityModelScript EMS_starpoint_starpoints_es = STANDARD_ENTITY_MODEL_SCRIPT(D_PAL_802ADF58_821988, RENDER_MODE_CLOUD_NO_ZCMP);

68
src/starpoint_fr.c Normal file
View File

@ -0,0 +1,68 @@
#include "common.h"
#include "entity.h"
#include "include_asset.h"
Lights1 starpoint_lights1_fr = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
INCLUDE_IMG("fr/starpoint/starpoint.png", D_PAL_802ABC98_81D388);
#include "fr/starpoint/load_starpoint.gfx.inc.c"
#include "fr/starpoint/starpoint.vtx.inc.c"
Gfx D_PAL_802ACD50_81E440[] = {
gsSPSetLights1(starpoint_lights1_fr),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ACC98_81E388),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802ACD10_81E400[0], 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACDB0_81E4A0[] = {
gsSPSetLights1(starpoint_lights1_fr),
gsSPDisplayList(D_PAL_802ACD50_81E440),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ACDD8_81E4C8[] = {
gsSPSetLights1(starpoint_lights1_fr),
gsSPDisplayList(D_PAL_802ACDB0_81E4A0),
gsSPEndDisplayList(),
};
Lights1 starpoint_lights2_fr = gdSPDefLights1(0, 0, 0, 0, 0, 0, 0, 0, 0);
INCLUDE_IMG("fr/starpoint/starpoints.png", D_PAL_802ACE18_81E508);
#include "fr/starpoint/load_starpoints.gfx.inc.c"
#include "fr/starpoint/starpoints.vtx.inc.c"
Gfx D_PAL_802ADED0_81F5C0[] = {
gsSPSetLights1(starpoint_lights2_fr),
gsDPPipeSync(),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2),
gsSPDisplayList(D_PAL_802ADE18_81F508),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_CULL_BACK | G_SHADING_SMOOTH),
gsSPVertex(&D_PAL_802ADE90_81F580[0], 4, 0),
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADF30_81F620[] = {
gsSPSetLights1(starpoint_lights2_fr),
gsSPDisplayList(D_PAL_802ADED0_81F5C0),
gsSPEndDisplayList(),
};
Gfx D_PAL_802ADF58_81F648[] = {
gsSPSetLights1(starpoint_lights2_fr),
gsSPDisplayList(D_PAL_802ADF30_81F620),