Merge branch 'mariopartyrd:main' into main

This commit is contained in:
CreateSource 2024-12-03 21:00:02 -05:00 committed by GitHub
commit 13a6b310be
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
137 changed files with 26570 additions and 1112 deletions

View file

@ -1,5 +1,3 @@
#include "dolphin/gx/GXEnum.h"
#include "dolphin/gx/GXVert.h"
#include "ext_math.h"
#include "game/audio.h"
#include "game/gamework.h"
@ -22,27 +20,24 @@ typedef struct M421DllWork {
u32 unk_00;
s32 unk_04;
s32 unk_08;
u32 unk0C;
u32 unk_0C;
s32 unk_10;
u32 unk_14;
u32 unk_18;
u32 unk_1C;
u32 unk_20;
u32 unk24;
s32 unk28;
u32 unk_28;
u32 unk_2C;
s32 unk30;
char unk34[0x4];
u32 unk38;
s32 unk3C;
s32 unk40;
s32 unk44;
s32 unk48;
s32 unk4C;
u32 unk50;
s32 unk54[4];
s32 unk64[4];
} M421DllWork; /* size = 0x74 */ // TODO check the fields, they are copy pasted
s32 unk_30[4];
s32 unk_40[4];
s32 unk_50[4];
u32 unk_60;
u32 unk_64;
u32 unk_68;
u32 unk_6C;
s32 unk_70;
} M421DllWork; /* size = 0x74 */
void fn_1_10EC(omObjData *object);
void fn_1_142C(omObjData *object);
@ -66,6 +61,24 @@ void fn_1_784(omObjData *object);
void fn_1_8B8(omObjData *object);
void fn_1_CBC(omObjData *object);
Vec lbl_1_data_0 = { 100.0f, 800.0f, -100.0f };
Vec lbl_1_data_C = { 0.3f, -0.8f, 0.3f };
Vec lbl_1_data_18 = { 10.0f, 45.0f, 3500.0f };
GXColor lbl_1_data_24 = { 0xFF, 0xFF, 0xFF, 0xFF };
Vec lbl_1_data_28 = { 50.0f, 150000.0f, 50.0f };
Vec lbl_1_data_34 = { 0.0f, 1.0f, 0.0f };
Vec lbl_1_data_40 = { 0.0f, 0.0f, 0.0f };
Vec lbl_1_data_4C[3] = {
{ 0.0f, 200.0f, -50.0f },
{ 0.0f, 200.0f, -50.0f },
{ 0.0f, 200.0f, -50.0f },
};
Vec lbl_1_data_70[3] = {
{ -37.5f, 0.0f, 1500.0f },
{ -37.5f, 0.0f, 1500.0f },
{ -37.5f, 0.0f, 2300.0f },
};
s32 lbl_1_data_94[3] = { 0xF0, 0x1E, 0 };
GXColor lbl_1_data_A0 = { 0, 0, 0, 0 };
Process *lbl_1_bss_28;
@ -74,7 +87,7 @@ omObjData *lbl_1_bss_20;
// M421DllCameraStruct
omObjData *lbl_1_bss_1C;
s16 lbl_1_bss_18;
s16 lbl_1_bss_12;
s16 lbl_1_bss_12[3];
s16 lbl_1_bss_10;
s16 lbl_1_bss_E;
s16 lbl_1_bss_C;
@ -82,21 +95,92 @@ s32 lbl_1_bss_8;
s32 lbl_1_bss_4;
s32 lbl_1_bss_0;
void fn_1_578(omObjData *var_r29)
void ObjectSetup(void)
{
Mtx sp2C;
Vec sp20 = { 0.0f, 0.0f, 0.0f };
Vec sp14 = { 0.0f, 0.0f, -1.0f };
Vec sp8;
Process *process;
LightData *lightData;
lbl_1_bss_8 = 0;
HuAudSndGrpSet(0x2E);
HuAudFXListnerSetEX(&sp20, &sp14, 11200.0f, 4166.6665f, 0.0f, 300.0f, 0.0f);
lbl_1_bss_4 = lbl_1_bss_0 = -1;
lbl_1_bss_18 = -1;
lbl_1_data_28.x = 200.0f;
lbl_1_data_28.y = 1200.0f;
lbl_1_data_28.z = 160.0f;
lbl_1_data_34.x = 0.0f;
lbl_1_data_34.y = 1.0f;
lbl_1_data_34.z = 0.0f;
lbl_1_data_40.x = 0.0f;
lbl_1_data_40.y = 0.0f;
lbl_1_data_40.z = 0.0f;
Hu3DShadowCreate(22.0f, 20.0f, 25000.0f);
Hu3DShadowTPLvlSet(0.625f);
Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40);
lbl_1_bss_12[0] = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_24);
Hu3DGLightInfinitytSet(lbl_1_bss_12[0]);
lightData = &Hu3DGlobalLight[lbl_1_bss_12[0]];
lightData->unk_00 |= 0x8000;
lbl_1_data_18.x = 1.0f;
lbl_1_data_18.y = 0.0f;
lbl_1_data_18.z = 4200.0f;
sp8.x = sp8.z = 0.0f;
sp8.y = lbl_1_data_18.z;
mtxRot(sp2C, lbl_1_data_18.x, lbl_1_data_18.y, 0.0f);
PSMTXMultVec(sp2C, &sp8, &lbl_1_data_28);
Hu3DGLightPosAimSetV(lbl_1_bss_12[0], &lbl_1_data_28, &lbl_1_data_40);
Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40);
lbl_1_bss_10 = lbl_1_bss_E = lbl_1_bss_C = -1;
process = omInitObjMan(0x32, 0x2000);
lbl_1_bss_28 = process;
omGameSysInit(process);
fn_1_3020(process);
lbl_1_bss_24 = omAddObjEx(process, 0xA, 0, 0, -1, fn_1_4A0);
fn_1_B15C(process);
fn_1_4648(process);
}
void fn_1_4A0(omObjData *object)
{
M421DllWork *work;
object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(M421DllWork), MEMORY_DEFAULT_NUM);
work = object->data;
memset(work, 0, sizeof(M421DllWork));
work->unk_00 = 0;
work->unk_04 = 0;
work->unk_0C = 0;
work->unk_10 = 0;
work->unk_14 = 0;
work->unk_18 = 0;
work->unk_28 = 0;
work->unk_2C = 0;
work->unk_08 = 0;
work->unk_64 = 2;
work->unk_50[0] = work->unk_50[1] = work->unk_50[2] = work->unk_50[3] = -1;
work->unk_68 = 0;
work->unk_70 = 0;
object->func = fn_1_8B8;
}
void fn_1_578(omObjData *object)
{
Vec sp14;
Vec sp8;
M421DllCameraStruct *var_r31;
M421DllWork *var_r30;
var_r30 = var_r29->data;
var_r30->unk_04++;
var_r30->unk_10++;
var_r30->unk_18++;
var_r30->unk_2C++;
if ((omSysExitReq != 0) && (var_r30->unk_00 != 5)) {
var_r30->unk_00 = 4;
fn_1_784(var_r29);
M421DllWork *work = object->data;
work->unk_04++;
work->unk_10++;
work->unk_18++;
work->unk_2C++;
if ((omSysExitReq != 0) && (work->unk_00 != 5)) {
work->unk_00 = 4;
fn_1_784(object);
}
var_r31 = fn_1_3B78(1);
sp8.x = -(sind(var_r31->unk_28.y) * cosd(var_r31->unk_28.x));
@ -182,7 +266,7 @@ void fn_1_142C(omObjData *object)
case 0:
work->unk_1C = 0x2D;
work->unk_20 = 0x3C;
lbl_1_bss_18 = MGSeqCreate(3, 0);
lbl_1_bss_10 = MGSeqCreate(3, 0);
MGSeqPosSet(lbl_1_bss_10, 320.0f, 240.0f);
lbl_1_bss_18 = -1;
work->unk_14 = 1;
@ -192,7 +276,7 @@ void fn_1_142C(omObjData *object)
if ((lbl_1_bss_4 < 0) && ((MGSeqStatGet(lbl_1_bss_10) & 0x10) != 0)) {
lbl_1_bss_4 = HuAudSeqPlay(0x48);
}
if (MGSeqStatGet(lbl_1_bss_18) == 0 && (work->unk_08 == 0)) {
if (MGSeqStatGet(lbl_1_bss_10) == 0 && (work->unk_08 == 0)) {
work->unk_14 = 2;
work->unk_18 = 0;
object->func = fn_1_1850;
@ -201,6 +285,61 @@ void fn_1_142C(omObjData *object)
}
}
void fn_1_1850(omObjData *object)
{
M421DllWork *work = object->data;
s32 var_r26 = 0;
fn_1_578(object);
if (--work->unk_20 == 0) {
work->unk_20 = 0x3C;
work->unk_1C--;
if ((work->unk_1C == 0) && (work->unk_64 == 2)) {
work->unk_64 = 1;
var_r26 = 1;
}
}
if (lbl_1_bss_18 < 0) {
lbl_1_bss_18 = MGSeqCreate(1, work->unk_1C, -1, -1);
}
MGSeqParamSet(lbl_1_bss_18, 1, work->unk_1C);
if (work->unk_64 != 2) {
var_r26 = 1;
}
if (var_r26 != 0) {
lbl_1_bss_E = MGSeqCreate(3, 1);
MGSeqPosSet(lbl_1_bss_E, 320.0f, 240.0f);
HuAudSeqFadeOut(lbl_1_bss_4, 0x64);
work->unk_14 = 3;
work->unk_18 = 0;
if (work->unk_08 == 0) {
object->func = fn_1_1C90;
}
}
}
void fn_1_1C90(omObjData *object)
{
M421DllWork *work = object->data;
s32 var_r25 = 0;
if (lbl_1_bss_18 >= 0) {
MGSeqParamSet(lbl_1_bss_18, 2, -1);
lbl_1_bss_18 = -1;
}
fn_1_578(object);
if (work->unk_14 == 3) {
var_r25 = 1;
if ((MGSeqStatGet(lbl_1_bss_E) == 0) && (work->unk_68 == 0x1111) && (var_r25 != 0)) {
work->unk_14 = 4;
work->unk_18 = 0;
}
}
else {
work->unk_14 = 5;
work->unk_18 = 0;
fn_1_784(object);
}
}
omObjFunc fn_1_213C(Process *process, omObjData *object)
{
M421DllCameraStruct *var_r31;
@ -213,6 +352,121 @@ omObjFunc fn_1_213C(Process *process, omObjData *object)
return fn_1_21AC;
}
void fn_1_21AC(omObjData *object)
{
Vec sp20;
float var_f31;
M421DllCameraStruct *var_r30;
M421DllWork *work;
work = object->data;
fn_1_578(object);
work->unk_0C = 1;
object->work[0]++;
var_f31 = (float)object->work[0] / lbl_1_data_94[object->work[1]];
VECSubtract(&lbl_1_data_4C[object->work[1] + 1], &lbl_1_data_4C[object->work[1]], &sp20);
VECScale(&sp20, &sp20, var_f31);
VECAdd(&lbl_1_data_4C[object->work[1]], &sp20, &sp20);
Center.x = sp20.x;
Center.y = sp20.y;
Center.z = sp20.z;
VECSubtract(&lbl_1_data_70[object->work[1] + 1], &lbl_1_data_70[object->work[1]], &sp20);
VECScale(&sp20, &sp20, var_f31);
VECAdd(&lbl_1_data_70[object->work[1]], &sp20, &sp20);
CRot.x = sp20.x;
CRot.y = sp20.y;
CRot.z = 0.0f;
CZoom = sp20.z;
var_r30 = fn_1_3CB0(0);
var_r30->unk_1C = Center;
var_r30->unk_28 = CRot;
var_r30->unk_34 = CZoom;
var_r30->unk_94++;
if (var_r30->unk_94 > 180.0f) {
var_r30->unk_84 -= 0.025000002f;
if (var_r30->unk_84 < 0.0f) {
var_r30->unk_84 = 0.0f;
}
var_r30->unk_1C.x += var_r30->unk_84 * ((0.02f * frandmod(0x3E8)) - 10.0f);
var_r30->unk_1C.y += var_r30->unk_84 * ((0.02f * frandmod(0x3E8)) - 10.0f);
var_r30->unk_1C.z += var_r30->unk_84 * ((0.02f * frandmod(0x3E8)) - 10.0f);
}
if (var_f31 >= 1.0f) {
object->work[0] = 0;
object->work[1]++;
if (lbl_1_data_94[object->work[1]] == 0) {
work->unk_0C = 2;
fn_1_784(object);
}
}
}
omObjFunc fn_1_2A28(Process *process, omObjData *object)
{
M421DllCameraStruct *var_r31;
s32 var_r30;
M421DllWork *var_r29;
s32 var_r28;
var_r29 = object->data;
var_r28 = 1;
var_r31 = fn_1_3CB0(0);
if (var_r29->unk_64 == 1) {
var_r28 = 0;
}
for (var_r30 = 0; var_r30 < 4; var_r30++) {
var_r29->unk_50[var_r30] = -1;
if ((var_r29->unk_40[var_r30] == 0) == var_r28) {
var_r29->unk_50[var_r30] = var_r29->unk_30[var_r30];
}
}
for (var_r30 = 0; var_r30 < 4; var_r30++) {
if (var_r29->unk_50[var_r30] >= 0) {
GWPlayerCoinWinAdd(var_r30, 10);
}
}
var_r31->unk_54 = 0.0f;
var_r31->unk_58 = 150.0f;
var_r31->unk_5C = 0.0f;
var_r31->unk_60 = -30.0f;
var_r31->unk_64 = 0.0f;
var_r31->unk_68 = 1000.0f;
var_r31->unk_84 = 0.0f;
return fn_1_2BB8;
}
void fn_1_2BB8(omObjData *var_r29)
{
M421DllCameraStruct *var_r31;
M421DllWork *var_r28;
var_r28 = var_r29->data;
var_r31 = fn_1_3CB0(0);
fn_1_578(var_r29);
var_r31->unk_84 += 0.0016666668f;
if (var_r31->unk_84 > 0.1f) {
var_r31->unk_84 = 0.1f;
}
var_r31->unk_1C.y += var_r31->unk_84 * (var_r31->unk_58 - var_r31->unk_1C.y);
var_r31->unk_1C.z += var_r31->unk_84 * (var_r31->unk_5C - var_r31->unk_1C.z);
var_r31->unk_28.x = fn_1_4478(var_r31->unk_28.x, var_r31->unk_60, var_r31->unk_84);
var_r31->unk_34 += var_r31->unk_84 * (var_r31->unk_68 - var_r31->unk_34);
if (var_r28->unk_6C == 0x1111) {
var_r28->unk_28 = 1;
if (lbl_1_bss_0 < 0) {
lbl_1_bss_0 = HuAudSStreamPlay(1);
}
if (lbl_1_bss_C < 0) {
lbl_1_bss_C = MGSeqCreate(5, 3, var_r28->unk_50[0], var_r28->unk_50[1], var_r28->unk_50[2], var_r28->unk_50[3]);
return;
}
if ((MGSeqStatGet(lbl_1_bss_C) == 0) && (var_r28->unk_2C >= 210.0f)) {
var_r28->unk_28 = 2;
fn_1_784(var_r29);
}
}
}
void fn_1_3020(Process *process)
{
Hu3DCameraCreate(0x1F);
@ -275,7 +529,7 @@ void fn_1_3334(omObjData *object)
fn_1_335C(object);
}
void fn_1_335C(omObjData *var_r28)
void fn_1_335C(omObjData *object)
{
float var_f31;
M421DllCameraStruct *var_r31;
@ -289,7 +543,7 @@ void fn_1_335C(omObjData *var_r28)
u32 var_r22;
u32 var_r21;
var_r27 = var_r28->data;
var_r27 = object->data;
{
s32 sp40[4] = { 2, 4, 8, 16 };
u32 sp30[4];
@ -299,7 +553,7 @@ void fn_1_335C(omObjData *var_r28)
var_r24 = 0;
var_r26 = 0;
memcpy(&var_r27[5], var_r27, 5 * sizeof(M421DllCameraStruct));
switch (var_r28->work[1]) {
switch (object->work[1]) {
case 0:
break;
case 1:
@ -314,10 +568,10 @@ void fn_1_335C(omObjData *var_r28)
break;
}
if (var_r24 != 0) {
Hu3DModelAttrReset(var_r28->model[0], HU3D_ATTR_DISPOFF);
Hu3DModelAttrReset(object->model[0], HU3D_ATTR_DISPOFF);
}
else {
Hu3DModelAttrSet(var_r28->model[0], HU3D_ATTR_DISPOFF);
Hu3DModelAttrSet(object->model[0], HU3D_ATTR_DISPOFF);
}
for (var_r30 = 0; var_r30 < 4; var_r30++) {
sp30[var_r30] = var_r27[var_r30 + 6].unk_04;
@ -509,18 +763,86 @@ void fn_1_3D84(s32 arg0, s32 arg1)
}
}
s32 fn_1_3E1C(void)
{
return ((M421DllWork *)lbl_1_bss_24->data)->unk_00;
}
u32 fn_1_3E34(void)
{
return ((M421DllWork *)lbl_1_bss_24->data)->unk_0C;
}
u32 fn_1_3E4C(void)
{
return ((M421DllWork *)lbl_1_bss_24->data)->unk_14;
}
u32 fn_1_3E64(void)
{
return ((M421DllWork *)lbl_1_bss_24->data)->unk_28;
}
s32 fn_1_3E7C(s32 arg0)
{
M421DllWork *work = lbl_1_bss_24->data;
if (work->unk_64 != 2) {
return 0;
}
work->unk_60 |= (1 << ((arg0 & 3) * 4));
if (((work->unk_60 & 0x1110) == 0x1110) && (work->unk_64 == 2)) {
work->unk_64 = 0;
}
return 1;
}
s32 fn_1_3EF8(s32 arg0)
{
M421DllWork *work = lbl_1_bss_24->data;
return work->unk_50[arg0];
}
void fn_1_3F28(s32 arg0, s32 arg1, s32 arg2)
{
M421DllWork *work = lbl_1_bss_24->data;
arg0 &= 3;
work->unk_40[arg0] = arg1;
work->unk_30[arg0] = arg2;
}
void fn_1_3F68(s32 arg0)
{
((M421DllWork *)lbl_1_bss_24->data)->unk_68 |= (1 << ((arg0 & 7) * 4));
}
void fn_1_3F98(s32 arg0)
{
((M421DllWork *)lbl_1_bss_24->data)->unk_6C |= (1 << ((arg0 & 3) * 4));
}
void fn_1_3FC8(s32 arg0)
{
((M421DllWork *)lbl_1_bss_24->data)->unk_70 |= (1 << ((arg0 & 3) * 4));
}
s32 fn_1_3FF8(void)
{
return MGSeqStatGet(lbl_1_bss_E) == 0;
}
void fn_1_4030(Vec *sp8, Vec *var_r31)
{
Vec sp10;
float var_f30;
float var_f29;
PSVECSubtract(var_r31, sp8, &sp10);
VECSubtract(var_r31, sp8, &sp10);
Center = *var_r31;
CRot.x = atan2d(sp10.y, sqrtf((sp10.x * sp10.x) + (sp10.z * sp10.z)));
CRot.y = atan2d(-sp10.x, -sp10.z);
CRot.z = 0.0f;
CZoom = PSVECMag(&sp10);
CZoom = VECMag(&sp10);
}
void fn_1_4238(float arg8, float arg9, float argA, float argB, float argC, float argD)
@ -535,12 +857,12 @@ void fn_1_4238(float arg8, float arg9, float argA, float argB, float argC, float
sp30.x = argB;
sp30.y = argC;
sp30.z = argD;
PSVECSubtract(&sp30, &sp3C, &sp24);
VECSubtract(&sp30, &sp3C, &sp24);
Center = sp30;
CRot.x = atan2d(sp24.y, sqrtf((sp24.x * sp24.x) + (sp24.z * sp24.z)));
CRot.y = atan2d(-sp24.x, -sp24.z);
CRot.z = 0.0f;
CZoom = PSVECMag(&sp24);
CZoom = VECMag(&sp24);
}
float fn_1_4478(float arg8, float arg9, float argA)

54
src/REL/m421Dll/map.c Normal file
View file

@ -0,0 +1,54 @@
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "REL/m421Dll.h"
void fn_1_B1C0(omObjData *object);
void fn_1_B398(omObjData *object);
omObjData *lbl_1_bss_58;
void fn_1_B15C(Process *work)
{
omObjData *object = omAddObjEx(work, 0x1E, 6, 0, -1, fn_1_B1C0);
lbl_1_bss_58 = object;
object->work[0] = 0;
}
void fn_1_B1BC(void) { }
void fn_1_B1C0(omObjData *var_r31)
{
omSetTra(var_r31, 0.0f, 0.0f, 0.0f);
var_r31->model[0] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M421, 0x02));
Hu3DModelLayerSet(var_r31->model[0], 1);
Hu3DModelShadowMapSet(var_r31->model[0]);
var_r31->model[1] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M421, 0x00));
Hu3DModelLayerSet(var_r31->model[1], 1);
var_r31->model[2] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M421, 0x01));
Hu3DModelLayerSet(var_r31->model[2], 5);
var_r31->model[3] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M421, 0x05));
Hu3DModelLayerSet(var_r31->model[3], 1);
Hu3DModelAttrSet(var_r31->model[3], HU3D_MOTATTR_LOOP);
var_r31->model[4] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M421, 0x03));
Hu3DModelLayerSet(var_r31->model[4], 5);
Hu3DModelAttrSet(var_r31->model[4], HU3D_MOTATTR_LOOP);
var_r31->model[5] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_M421, 0x04));
Hu3DModelLayerSet(var_r31->model[5], 5);
Hu3DMotionTimeSet(var_r31->model[5], 0.0f);
var_r31->work[0] = 0;
var_r31->work[1] = 0;
var_r31->func = fn_1_B398;
}
void fn_1_B398(omObjData *object) { }
void fn_1_B39C(void)
{
Hu3DMotionTimeSet(lbl_1_bss_58->model[5], 0.0f);
}

1828
src/REL/m421Dll/player.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -1988,11 +1988,15 @@ void BoardLast5GfxInit(void)
} else {
prio = 1400;
}
#if !VERSION_JPN
spr_file = last5GfxSprTbl[i];
if(i == 2 && work->is_last && GWLanguageGet() != 0) {
spr_file = DATA_MAKE_NUM(DATADIR_BOARD, 98);
}
BoardSpriteCreate(spr_file, prio, NULL, &work->sprites[i]);
#else
BoardSpriteCreate(last5GfxSprTbl[i], prio, NULL, &work->sprites[i]);
#endif
HuSprGrpMemberSet(work->group, i, work->sprites[i]);
HuSprAttrSet(work->group, i, HUSPR_ATTR_LINEAR);
HuSprPosSet(work->group, i, last5GfxPosTbl[lastF][i][0], last5GfxPosTbl[lastF][i][1]);
@ -2203,4 +2207,4 @@ void BoardDataAsyncWait(s32 status)
while(!HuDataGetAsyncStat(status)) {
HuPrcVSleep();
}
}
}

View file

@ -137,6 +137,18 @@ static s32 bowserSuitCharMdlTbl[] = {
static s32 bowserSuitMotTbl[] = { DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 0x19), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 0x1A),
DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 0x1B), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 0x1E), DATA_MAKE_NUM(DATADIR_BKOOPASUIT, 0x1F) };
#if VERSION_JPN
static s32 sparkMotTbl[] = {
DATA_MAKE_NUM(DATADIR_BOARD, 0x94),
DATA_MAKE_NUM(DATADIR_BOARD, 0x95),
DATA_MAKE_NUM(DATADIR_BOARD, 0x96),
DATA_MAKE_NUM(DATADIR_BOARD, 0x97),
DATA_MAKE_NUM(DATADIR_BOARD, 0x98),
DATA_MAKE_NUM(DATADIR_BOARD, 0x99),
DATA_MAKE_NUM(DATADIR_BOARD, 0x9A),
DATA_MAKE_NUM(DATADIR_BOARD, 0x9B),
};
#else
static s32 sparkMotTbl[] = {
DATA_MAKE_NUM(DATADIR_BOARD, 0x95),
DATA_MAKE_NUM(DATADIR_BOARD, 0x96),
@ -147,6 +159,7 @@ static s32 sparkMotTbl[] = {
DATA_MAKE_NUM(DATADIR_BOARD, 0x9B),
DATA_MAKE_NUM(DATADIR_BOARD, 0x9C),
};
#endif
static s32 boardSparkSfxTbl[] = {
0x128,
@ -2499,7 +2512,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam)
BoardCameraMotionWait();
BoardCameraTargetPlayerSet(player);
BoardPlayerIdleSet(player);
temp_r28 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 0x74), NULL, 0);
temp_r28 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, VERSION_JPN ? 0x73 : 0x74), NULL, 0);
BoardModelMotionStart(temp_r28, 0, 0x40000002);
BoardModelMotionTimeSet(temp_r28, 30.0f);
BoardModelAttrSet(temp_r28, 0x40000002);
@ -2507,7 +2520,7 @@ static s32 DoSparkSpace(s32 player, s32 pause_cam)
BoardModelScaleSet(temp_r28, 2.0f, 2.0f, 2.0f);
BoardModelVisibilitySet(temp_r28, 0);
BoardModelLayerSet(temp_r28, 1);
sp2E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 0x67), NULL, 0);
sp2E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, VERSION_JPN ? 0x66 : 0x67), NULL, 0);
BoardModelLayerSet(sp2E, 1);
BoardModelMotionStart(sp2E, 0, 0);
HuAudFXPlay(796);

View file

@ -4,7 +4,6 @@
#include "string.h"
#include "version.h"
s16 GwLanguage = 1;
s16 GwLanguageSave = -1;
@ -55,7 +54,7 @@ void GWInit(void)
_InitFlag();
GWErase();
InitPlayerConfig();
#if VERSION_JAP
#if VERSION_JPN
GWGameStat.language = 0;
#elif VERSION_ENG
GWGameStat.language = 1;
@ -132,7 +131,7 @@ void GWGameStatReset(void)
GameStat *game_stat = &GWGameStatDefault;
memset(game_stat, 0, sizeof(GameStat));
game_stat->unk_00 = 0;
#if VERSION_JAP
#if VERSION_JPN
game_stat->language = 0;
#elif VERSION_ENG
game_stat->language = 1;
@ -163,7 +162,7 @@ s32 GWMessDelayGet(void)
GWSystem.mess_speed = 1;
GWSystem.mess_delay = 32;
}
#else
#else
if (GWSystem.mess_delay > 64) {
GWSystem.mess_speed = 1;
GWSystem.mess_delay = 48;

View file

@ -8,17 +8,8 @@
#include "ext_math.h"
#include "string.h"
typedef struct hsf_draw_object {
/* 0x00 */ ModelData *model;
/* 0x04 */ HsfObject *object;
/* 0x08 */ float z;
/* 0x0C */ Mtx matrix;
/* 0x3C */ Vec scale;
} HsfDrawObject;
static void objCall(ModelData *arg0, HsfObject *arg1);
static void objMesh(ModelData *arg0, HsfObject *arg1);
static void FaceDraw(HsfDrawObject *arg0, HsfFace *arg1);
static s32 SetTevStageNoTex(HsfDrawObject *arg0, HsfMaterial *arg1);
static void SetTevStageTex(HsfDrawObject *arg0, HsfMaterial *arg1);
static GXTevKColorSel SetKColor(GXTevStageID arg0, u8 arg1);

View file

@ -33,69 +33,55 @@ typedef struct seq_info {
s32 time_max;
} SeqInfo;
static s32 SeqInitTimer(SeqWork *work, va_list params);
static s32 SeqUpdateTimer(SeqWork *work);
static s32 SeqInitType2(SeqWork *work, va_list params);
static s32 SeqUpdateType2(SeqWork *work);
static s32 SeqInitMGBasic(SeqWork *work, va_list params);
static s32 SeqUpdateMGBasic(SeqWork *work);
static s32 SeqInitMGCommon(SeqWork *work, va_list params);
static s32 SeqUpdateMG1vs3(SeqWork *work);
static s32 SeqUpdateMGBattle(SeqWork *work);
static s32 SeqUpdateMGStory(SeqWork *work);
static s32 SeqUpdateMG2vs2(SeqWork *work);
static s32 SeqUpdateMGBowser(SeqWork *work);
static s32 SeqInitWin(SeqWork *work, va_list params);
static s32 SeqUpdateWin(SeqWork *work);
static s32 SeqInitDraw(SeqWork *work, va_list params);
static s32 SeqUpdateDraw(SeqWork *work);
static s32 SeqInitRecord(SeqWork *work, va_list params);
static s32 SeqUpdateRecord(SeqWork *work);
static s32 SeqInitFlip(SeqWork *work, va_list params);
static s32 SeqUpdateFlip(SeqWork *work);
OverlayID mgSeqOvlPrev = OVL_INVALID;
static SeqInfo seqInfoTbl[] = {
{ NULL, NULL, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 60 },
{ SeqInitTimer, SeqUpdateTimer, HU_DISP_CENTERX + 4, 64.0f, 1.0f, 1.0f, 60 },
{ SeqInitType2, SeqUpdateType2, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 0.5f, 0.5f, 60 },
{ SeqInitMGBasic, SeqUpdateMGBasic, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitMGCommon, SeqUpdateMG1vs3, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitWin, SeqUpdateWin, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitMGCommon, SeqUpdateMGBattle, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitMGCommon, SeqUpdateMGStory, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitMGBasic, SeqUpdateMGBasic, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitMGCommon, SeqUpdateMG2vs2, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitFlip, SeqUpdateFlip, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitMGCommon, SeqUpdateMGBowser, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitWin, SeqUpdateWin, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ SeqInitDraw, SeqUpdateDraw, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 60 },
{ SeqInitRecord, SeqUpdateRecord, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitTimer, MGSeqUpdateTimer, HU_DISP_CENTERX + 4, 64.0f, 1.0f, 1.0f, 60 },
{ MGSeqInitType2, MGSeqUpdateType2, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 0.5f, 0.5f, 60 },
{ MGSeqInitMGBasic, MGSeqUpdateMGBasic, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitMGCommon, MGSeqUpdateMG1vs3, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitWin, MGSeqUpdateWin, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitMGCommon, MGSeqUpdateMGBattle, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitMGCommon, MGSeqUpdateMGStory, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitMGBasic, MGSeqUpdateMGBasic, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitMGCommon, MGSeqUpdateMG2vs2, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitFlip, MGSeqUpdateFlip, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitMGCommon, MGSeqUpdateMGBowser, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitWin, MGSeqUpdateWin, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ MGSeqInitDraw, MGSeqUpdateDraw, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 60 },
{ MGSeqInitRecord, MGSeqUpdateRecord, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 180 },
{ NULL, NULL, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 60 },
{ NULL, NULL, HU_DISP_CENTERX + 4, HU_DISP_CENTERY, 1.0f, 1.0f, 60 },
};
static s32 seqType2SprTbl[6] = { 0, 0, 0, 0, 0, 0 };
static s16 mgSeqTypeTbl[9] = { MG_SEQ_TYPE_4P, MG_SEQ_TYPE_1VS3, MG_SEQ_TYPE_2VS2, MG_SEQ_TYPE_BOWSER, MG_SEQ_TYPE_BATTLE, MG_SEQ_TYPE_PINBALL,
MG_SEQ_TYPE_STORY, MG_SEQ_TYPE_BOWSER, MG_SEQ_TYPE_STORY };
static s16 mgSeqTypeTbl[9] = {
MG_SEQ_TYPE_4P,
MG_SEQ_TYPE_1VS3,
MG_SEQ_TYPE_2VS2,
MG_SEQ_TYPE_BOWSER,
MG_SEQ_TYPE_BATTLE,
MG_SEQ_TYPE_PINBALL,
MG_SEQ_TYPE_STORY,
MG_SEQ_TYPE_BOWSER,
MG_SEQ_TYPE_STORY,
};
static char lbl_8012F336[] = { "アイウエオカキク"
"ケコサシスセソタ"
"チツテトナニヌネ"
"ノハヒフヘホマミ"
"ムメモヤユヨラリ"
"ルレロワヲンァィ"
"ゥェォャュョッカ"
"キクコサシスセソ"
"タチツテトハヒフ"
"ヘホハヒフヘホ"
"!?ー" };
static char lbl_8012F336[] = {
"アイウエオカキク"
"ケコサシスセソタ"
"チツテトナニヌネ"
"ノハヒフヘホマミ"
"ムメモヤユヨラリ"
"ルレロワヲンァィ"
"ゥェォャュョッカ"
"キクコサシスセソ"
"タチツテトハヒフ"
"ヘホハヒフヘホ"
"!?ー",
};
static char lbl_8012F389[] = "x first\n";
static char lbl_8012F392[] = "y first\n";
@ -339,7 +325,7 @@ static void *SeqReadFile(s32 file)
return HuAR_ARAMtoMRAMFileRead(file, MEMORY_DEFAULT_NUM, HEAP_DATA);
}
static s32 SeqInitTimer(SeqWork *work, va_list params)
s32 MGSeqInitTimer(SeqWork *work, va_list params)
{
AnimData *spr_anim;
s16 sprite;
@ -401,7 +387,7 @@ static s32 SeqInitTimer(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateTimer(SeqWork *work)
s32 MGSeqUpdateTimer(SeqWork *work)
{
float scale;
float tp_lvl;
@ -558,7 +544,7 @@ static s32 SeqUpdateTimer(SeqWork *work)
}
}
static s32 SeqInitType2(SeqWork *work, va_list params)
s32 MGSeqInitType2(SeqWork *work, va_list params)
{
s16 spr_idx;
s16 spr_grp;
@ -667,7 +653,7 @@ static s32 SeqInitType2(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateType2(SeqWork *work)
s32 MGSeqUpdateType2(SeqWork *work)
{
float tp_lvl;
s16 spr_grp;
@ -818,14 +804,20 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags);
static s32 SeqMakeWord(SeqWork *work, char *str, s16 flags)
{
s16 len;
s16 x;
s16 i;
s16 grp_idx;
#if VERSION_JPN
char *str_ptr;
AnimData **char_anim;
s16 *char_pos;
#else
AnimData **char_anim;
s16 *char_pos;
char *str_ptr;
#endif
s16 spr_grp;
s16 i;
s16 x;
s16 grp_idx;
s16 len;
AnimData **char_anim;
for (grp_idx = 0; grp_idx < 16; grp_idx++) {
if (work->spr_grp[grp_idx] == -1) {
break;
@ -839,13 +831,27 @@ static s32 SeqMakeWord(SeqWork *work, char *str, s16 flags)
str_ptr = str;
x = 0;
len = 0;
while (*str_ptr != 0) {
while (*str_ptr != '\0') {
#if VERSION_JPN
if (*str_ptr == ' ') {
x += 56;
}
else {
char_anim[len] = SeqLoadFontChar(str_ptr, flags);
if (char_anim[len]) {
char_pos[len] = x;
x += 56;
len++;
}
}
#else
char_anim[len] = SeqLoadFontChar(str_ptr, flags);
if (char_anim[len]) {
char_pos[len] = x;
x += 56;
len++;
}
#endif
str_ptr++;
}
work->spr_grp[grp_idx] = spr_grp = HuSprGrpCreate(len);
@ -870,24 +876,26 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags)
if (c == 222 || c == 223) {
return NULL;
}
#if !VERSION_JPN
if (c == 32) {
return HuSprAnimRead(SeqReadFile(DATA_MAKE_NUM(DATADIR_GAMEMES, 10)));
}
#endif
for (id = 0, list = seqFontAlphaTbl; *list != 0; id++, list++) {
if (*list == c) {
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + 21);
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + (VERSION_JPN ? 20 : 21));
return HuSprAnimRead(SeqReadFile(data_num));
}
}
for (id = 0, list = seqFontNumTbl; *list != 0; id++, list++) {
if (*list == c) {
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + 11);
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + (VERSION_JPN ? 10 : 11));
return HuSprAnimRead(SeqReadFile(data_num));
}
}
for (id = 0, list = seqPunctTbl; *list != 0; id++, list++) {
if (*list == c) {
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + 154);
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + (VERSION_JPN ? 153 : 154));
return HuSprAnimRead(SeqReadFile(data_num));
}
}
@ -908,10 +916,10 @@ static AnimData *SeqLoadFontChar(char *str, s16 flags)
while (*list != 0) {
if (*list == c) {
if (flags & 0x1) {
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + 156);
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + (VERSION_JPN ? 155 : 156));
}
else {
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + 73);
data_num = DATA_MAKE_NUM(DATADIR_GAMEMES, id + (VERSION_JPN ? 72 : 73));
}
return HuSprAnimRead(SeqReadFile(data_num));
}
@ -928,14 +936,14 @@ static float ForceDefine480()
static void SeqPlayStartFX(void);
static s32 SeqInitMGBasic(SeqWork *work, va_list params)
s32 MGSeqInitMGBasic(SeqWork *work, va_list params)
{
s16 i;
s16 word_grp;
work->state = va_arg(params, int);
if (work->state == 2) {
return SeqInitDraw(work, params);
return MGSeqInitDraw(work, params);
}
work->type = 0;
work->angle = 0;
@ -978,7 +986,7 @@ static s32 SeqInitMGBasic(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateMGBasic(SeqWork *work)
s32 MGSeqUpdateMGBasic(SeqWork *work)
{
s16 idx;
float scale;
@ -1147,7 +1155,7 @@ static s32 SeqUpdateMGBasic(SeqWork *work)
return 1;
}
static s32 SeqInitMGCommon(SeqWork *work, va_list params)
s32 MGSeqInitMGCommon(SeqWork *work, va_list params)
{
s16 i;
float tp_lvl;
@ -1156,7 +1164,7 @@ static s32 SeqInitMGCommon(SeqWork *work, va_list params)
work->state = va_arg(params, int);
if (work->state == 2) {
return SeqInitDraw(work, params);
return MGSeqInitDraw(work, params);
}
work->type = 0;
work->angle = 0;
@ -1226,7 +1234,7 @@ static s32 SeqInitMGCommon(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateMGBattle(SeqWork *work)
s32 MGSeqUpdateMGBattle(SeqWork *work)
{
s16 idx;
float scale;
@ -1465,7 +1473,7 @@ static s32 SeqUpdateMGBattle(SeqWork *work)
return 1;
}
static s32 SeqUpdateMG1vs3(SeqWork *work)
s32 MGSeqUpdateMG1vs3(SeqWork *work)
{
s16 idx;
float scale;
@ -1678,7 +1686,7 @@ static s32 SeqUpdateMG1vs3(SeqWork *work)
return 1;
}
static s32 SeqUpdateMGStory(SeqWork *work)
s32 MGSeqUpdateMGStory(SeqWork *work)
{
s16 idx;
float scale;
@ -1889,7 +1897,7 @@ static s32 SeqUpdateMGStory(SeqWork *work)
return 1;
}
static s32 SeqUpdateMG2vs2(SeqWork *work)
s32 MGSeqUpdateMG2vs2(SeqWork *work)
{
s16 idx;
float scale;
@ -2062,14 +2070,14 @@ static s32 SeqUpdateMG2vs2(SeqWork *work)
return 1;
}
static s32 SeqInitFlip(SeqWork *work, va_list params)
s32 MGSeqInitFlip(SeqWork *work, va_list params)
{
s16 i;
s16 word_grp;
s16 word_ofs;
work->state = va_arg(params, int);
if (work->state == 2) {
return SeqInitDraw(work, params);
return MGSeqInitDraw(work, params);
}
work->type = 0;
work->angle = 0;
@ -2148,7 +2156,7 @@ static s32 SeqInitFlip(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateFlip(SeqWork *work)
s32 MGSeqUpdateFlip(SeqWork *work)
{
s16 idx;
float scale;
@ -2321,7 +2329,7 @@ static s32 SeqUpdateFlip(SeqWork *work)
return 1;
}
static s32 SeqUpdateMGBowser(SeqWork *work)
s32 MGSeqUpdateMGBowser(SeqWork *work)
{
s16 idx;
float scale;
@ -2545,7 +2553,7 @@ static s32 SeqUpdateMGBowser(SeqWork *work)
return 1;
}
static s32 SeqInitDraw(SeqWork *work, va_list params)
s32 MGSeqInitDraw(SeqWork *work, va_list params)
{
s16 word_grp;
work->state = 2;
@ -2576,7 +2584,7 @@ static s32 SeqInitDraw(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateDraw(SeqWork *work)
s32 MGSeqUpdateDraw(SeqWork *work)
{
s16 idx;
float scale;
@ -2665,22 +2673,54 @@ static s32 SeqUpdateDraw(SeqWork *work)
return 1;
}
static char *winCharNameTbl[]
= { "マリオ", "MARIO", "ルイージ", "LUIGI", "ピーチ", "PEACH", "ヨッシー", "YOSHI", "ワリオ", "WARIO", "ドンキー", " DK ", "デイジー", "DAISY", "ワルイージ", "WALUIGI",
"クッパ", "BOWSER", "キノピオ", "TOAD", "ヘイホー", "SHY GUY", "テレサ", "BOO", "ノコノコ", "KOOPA", "ミニクッパ", VERSION_NTSC ? "KOOPA KID" : "MINI BOWSER", "クリボー", "GOOMBA" };
static char *winCharNameTbl[] = {
"マリオ",
"MARIO",
"ルイージ",
"LUIGI",
"ピーチ",
"PEACH",
"ヨッシー",
"YOSHI",
"ワリオ",
"WARIO",
"ドンキー",
VERSION_JPN ? "DK" : " DK ",
"デイジー",
"DAISY",
"ワルイージ",
"WALUIGI",
"クッパ",
"BOWSER",
"キノピオ",
"TOAD",
"ヘイホー",
VERSION_JPN ? "HEHOH" : "SHY GUY",
"テレサ",
VERSION_JPN ? "TERETHA" : "BOO",
"ノコノコ",
VERSION_JPN ? "NOKONOKO" : "KOOPA",
"ミニクッパ",
VERSION_NTSC ? (VERSION_ENG ? "KOOPA KID" : "BABYBOWSER") : "MINI BOWSER",
"クリボー",
VERSION_JPN ? "KURIBO" : "GOOMBA",
};
static char *winWordTbl[] = { "カチ", "WON!", "ハイボク", "LOSE", "ユウショウ!", "CHAMPION!" };
static s16 winPosOfs[][5][2]
= { { { 114, 0 }, { -144, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } }, { { 0, 35 }, { -144, -35 }, { 144, -35 }, { 0, 0 }, { 0, 0 } },
{ { 0, 105 }, { 0, -105 }, { -144, 0 }, { 144, 0 }, { 0, 0 } }, { { 0, 105 }, { -144, -105 }, { 144, -105 }, { -144, 0 }, { 144, 0 } } };
static s16 winPosOfs[][5][2] = {
{ { VERSION_JPN ? 144 : 114, 0 }, { -144, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } },
{ { 0, 35 }, { -144, -35 }, { 144, -35 }, { 0, 0 }, { 0, 0 } },
{ { 0, 105 }, { 0, -105 }, { -144, 0 }, { 144, 0 }, { 0, 0 } },
{ { 0, 105 }, { -144, -105 }, { 144, -105 }, { -144, 0 }, { 144, 0 } },
};
static s16 winnerNameW[8];
#define GET_LANG_IDX() ((seqLanguage == 0) ? 0 : 1)
#define GET_WIN_KANAF() ((seqLanguage == 0) ? 1 : 0)
static s32 SeqInitWin(SeqWork *work, va_list params)
s32 MGSeqInitWin(SeqWork *work, va_list params)
{
int win_type = va_arg(params, int);
s16 word_idx;
@ -2705,13 +2745,17 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
}
}
word_grp = SeqMakeWord(work, winWordTbl[word_idx], GET_WIN_KANAF());
winnerNameW[0] = work->word_len * 50;
winnerNameW[0] = work->word_len * (VERSION_JPN ? 56 : 50);
#if !VERSION_JPN
for (i = 0; i < work->word_len; i++) {
HuSprPosSet(work->spr_grp[word_grp], i, 25.0f + ((i * 50) - (0.5f * (work->word_len * 50))), 0.0f);
HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR);
}
#endif
num_winners = 0;
#if !VERSION_JPN
work->win_scale = 1.0f;
#endif
for (j = 0; j < 4; j++) {
int winner = va_arg(params, int);
(void)winner; // to match PAL
@ -2719,7 +2763,7 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
continue;
}
word_grp = SeqMakeWord(work, winCharNameTbl[(winner * 2) + GET_LANG_IDX()], 0);
#if VERSION_NTSC
#if VERSION_ENG
if (seqLanguage != 0) {
char *name = winCharNameTbl[(winner * 2) + GET_LANG_IDX()];
word_w = 0.0f;
@ -2751,21 +2795,19 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
}
winnerNameW[num_winners + 1] = word_w;
}
else {
if (winner == 7 || winner == 13) {
for (i = 0; i < work->word_len; i++) {
HuSprPosSet(work->spr_grp[word_grp], i, 26.0f + ((i * 52) - (0.5f * (work->word_len * 52))), 0.0f);
HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR);
}
work->win_scale = 0.8f;
winnerNameW[num_winners + 1] = work->word_len * 52;
}
else {
work->win_scale = 1.0f;
winnerNameW[num_winners + 1] = work->word_len * 56;
else if (winner == 7 || winner == 13) {
for (i = 0; i < work->word_len; i++) {
HuSprPosSet(work->spr_grp[word_grp], i, 26.0f + ((i * 52) - (0.5f * (work->word_len * 52))), 0.0f);
HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR);
}
work->win_scale = 0.8f;
winnerNameW[num_winners + 1] = work->word_len * 52;
}
#else
else {
work->win_scale = 1.0f;
winnerNameW[num_winners + 1] = work->word_len * 56;
}
#elif VERSION_PAL
for (i = 0; i < work->word_len; i++) {
HuSprPosSet(work->spr_grp[word_grp], i, 25.0f + ((i * 50) - (0.5f * (work->word_len * 50))), 0.0f);
HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR);
@ -2780,6 +2822,27 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
work->win_scale = 0.75f;
}
winnerNameW[num_winners + 1] = work->word_len * 50;
#else
if (seqLanguage != 0) {
for (i = 0; i < work->word_len; i++) {
HuSprPosSet(work->spr_grp[word_grp], i, 25.0f + (i * 50 - (0.5f * (work->word_len * 50))), 0.0f);
HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR);
}
work->win_scale = 0.75f;
winnerNameW[num_winners + 1] = work->word_len * 50;
}
else if (winner == 7 || winner == 13) {
for (i = 0; i < work->word_len; i++) {
HuSprPosSet(work->spr_grp[word_grp], i, 26.0f + ((i * 52) - (0.5f * (work->word_len * 52))), 0.0f);
HuSprAttrSet(work->spr_grp[word_grp], i, HUSPR_ATTR_LINEAR);
}
work->win_scale = 0.8f;
winnerNameW[num_winners + 1] = work->word_len * 52;
}
else {
work->win_scale = 1.0f;
winnerNameW[num_winners + 1] = work->word_len * 56;
}
#endif
num_winners++;
}
@ -2792,7 +2855,11 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
work->type = 0;
for (j = 0; j < num_winners + 1; j++) {
if (num_winners == 1) {
#if VERSION_JPN
word_x = 32 + (winnerNameW[1] + winnerNameW[0]);
#else
word_x = 32.0f + ((float)winnerNameW[0] + (winnerNameW[1] * work->win_scale));
#endif
if (j == 0) {
word_x = (((HU_DISP_WIDTH - word_x) / 2.0f) + (word_x - (winnerNameW[0] / 2))) - HU_DISP_CENTERX;
}
@ -2802,7 +2869,7 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
}
else {
if (abs(winPosOfs[num_winners - 1][j][0]) == 144.0f) {
#if VERSION_NTSC
#if VERSION_ENG
if (winnerNameW[j] + 32 < HU_DISP_CENTERX) {
word_x = 176.0f;
}
@ -2815,7 +2882,7 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
else {
word_x = (HU_DISP_WIDTH - word_x) - HU_DISP_CENTERX;
}
#else
#elif VERSION_PAL
if (32.0f + (work->win_scale * winnerNameW[j]) < HU_DISP_CENTERX) {
word_x = 32.0f + ((winnerNameW[j] * work->win_scale) / 2.0f);
}
@ -2825,6 +2892,16 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
if (winPosOfs[num_winners - 1][j][0] < 0) {
word_x = -word_x;
}
#else
if (32 + winnerNameW[j] < HU_DISP_CENTERX) {
word_x = 32 + winnerNameW[j] / 2;
}
else {
word_x = 120.0f;
}
if (winPosOfs[num_winners - 1][j][0] < 0) {
word_x = -word_x;
}
#endif
}
else {
@ -2846,7 +2923,7 @@ static s32 SeqInitWin(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateWin(SeqWork *work)
s32 MGSeqUpdateWin(SeqWork *work)
{
s32 idx;
float tp_lvl;
@ -2923,15 +3000,15 @@ static s32 SeqUpdateWin(SeqWork *work)
else {
if (abs(winPosOfs[work->word_len - 2][idx][0]) == 144.0f) {
if (winnerNameW[idx] + 32 < HU_DISP_CENTERX) {
pos_x = VERSION_NTSC ? 176.0f : winnerNameW[idx] / 2 + 32;
pos_x = VERSION_ENG ? 176.0f : winnerNameW[idx] / 2 + 32;
}
else {
pos_x = VERSION_NTSC ? 32.0f + ((winnerNameW[idx] * work->win_scale) / 2.0f) : 128.0f;
pos_x = VERSION_ENG ? 32.0f + ((winnerNameW[idx] * work->win_scale) / 2.0f) : 128.0f;
}
if (winPosOfs[work->word_len - 2][idx][0] < 0) {
pos_x = VERSION_NTSC ? -(HU_DISP_CENTERX - pos_x) : -pos_x;
pos_x = VERSION_ENG ? -(HU_DISP_CENTERX - pos_x) : -pos_x;
}
#if VERSION_NTSC
#if VERSION_ENG
else {
pos_x = (HU_DISP_WIDTH - pos_x) - HU_DISP_CENTERX;
}
@ -2974,7 +3051,7 @@ static s32 SeqUpdateWin(SeqWork *work)
return 1;
}
static s32 SeqInitRecord(SeqWork *work, va_list params)
s32 MGSeqInitRecord(SeqWork *work, va_list params)
{
AnimData *spr_data;
s16 spr_grp;
@ -3093,7 +3170,7 @@ static s32 SeqInitRecord(SeqWork *work, va_list params)
return 1;
}
static s32 SeqUpdateRecord(SeqWork *work)
s32 MGSeqUpdateRecord(SeqWork *work)
{
s16 group;
if (_CheckFlag(FLAG_ID_MAKE(1, 12))) {

View file

@ -1,15 +1,15 @@
#include "game/saveload.h"
#include "game/data.h"
#include "game/pad.h"
#include "game/window.h"
#include "game/flag.h"
#include "game/card.h"
#include "game/sprite.h"
#include "game/gamework_data.h"
#include "data_num/win.h"
#include "game/card.h"
#include "game/data.h"
#include "game/flag.h"
#include "game/gamework_data.h"
#include "game/pad.h"
#include "game/sprite.h"
#include "game/window.h"
#include "string.h"
#include "stddef.h"
#include "string.h"
#if VERSION_ENG
#define SAVE_WRITE_BEGIN _SetFlag(FLAG_ID_MAKE(3, 0));
@ -19,13 +19,12 @@
#define SAVE_WRITE_END
#endif
#define SAVE_GET_PLAYER(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, player)]
#define SAVE_GET_PLAYER_STORY(player_idx) &saveBuf.buf[((player_idx)*sizeof(PlayerState))+offsetof(SaveBufData, playerStory)]
#define SAVE_GET_PLAYER(player_idx) &saveBuf.buf[((player_idx) * sizeof(PlayerState)) + offsetof(SaveBufData, player)]
#define SAVE_GET_PLAYER_STORY(player_idx) &saveBuf.buf[((player_idx) * sizeof(PlayerState)) + offsetof(SaveBufData, playerStory)]
static s16 SLCreateSaveWin(void);
static void SLKillSaveWin(void);
extern u8 UnMountCnt;
CARDFileInfo curFileInfo;
@ -36,27 +35,28 @@ s32 saveExecF;
u8 curBoxNo;
s16 curSlotNo;
static u8 commentTbl[2][32] = {
"Mario Party 4",
"File 0 00/00/0000"
};
#if VERSION_JPN
static u8 commentTbl[2][32] = { "マリオパーティ4", "??月??日 データ?です。" };
static u8 sjisNumTbl[20] = "";
#else
static u8 commentTbl[2][32] = { "Mario Party 4", "File 0 00/00/0000" };
#endif
char *SaveFileNameTbl[] = {
"MARIPA4BOX0",
"MARIPA4BOX1",
"MARIPA4BOX2"
};
char *SaveFileNameTbl[] = { "MARIPA4BOX0", "MARIPA4BOX1", "MARIPA4BOX2" };
s32 SaveEnableF = 1;
static char *SlotNameTbl[] = {
"A",
"B"
};
static char *SlotNameTbl[] = { "A", "B" };
#if VERSION_JPN
static char *slotIconMesTbl[] = { "\x0E\x16", "\x0E\x17" };
static u8 sjisSpace[] = " ";
#endif
static s32 saveMessWin = -1;
s32 SLFileOpen(char *fileName) {
s32 SLFileOpen(char *fileName)
{
s32 result;
if (SaveEnableF == 0) {
@ -64,7 +64,7 @@ s32 SLFileOpen(char *fileName) {
}
while (1) {
result = SLCardMount(curSlotNo);
if(result < 0) {
if (result < 0) {
return result;
}
result = HuCardOpen(curSlotNo, fileName, &curFileInfo);
@ -96,16 +96,19 @@ s32 SLFileOpen(char *fileName) {
if (result != 0) {
return result;
}
} else {
}
else {
return CARD_RESULT_NOFILE;
}
} else {
}
else {
return CARD_RESULT_READY;
}
}
}
s32 SLFileCreate(char *fileName, u32 size, void *addr) {
s32 SLFileCreate(char *fileName, u32 size, void *addr)
{
float winSize[2];
u32 byteNotUsed;
u32 filesNotUsed;
@ -184,7 +187,8 @@ s32 SLFileCreate(char *fileName, u32 size, void *addr) {
return 0;
}
s32 SLFileWrite(s32 length, void *addr) {
s32 SLFileWrite(s32 length, void *addr)
{
float winSize[2];
s32 window;
s32 result;
@ -210,7 +214,8 @@ s32 SLFileWrite(s32 length, void *addr) {
return result;
}
s32 SLFileRead(s32 length, void *addr) {
s32 SLFileRead(s32 length, void *addr)
{
s32 result;
if (SaveEnableF == 0) {
@ -219,13 +224,15 @@ s32 SLFileRead(s32 length, void *addr) {
result = HuCardRead(&curFileInfo, addr, length, 0);
if (result == CARD_RESULT_NOCARD) {
SLMessOut(0);
} else if (result < 0) {
}
else if (result < 0) {
SLMessOut(1);
}
return result;
}
s32 SLFileClose(void) {
s32 SLFileClose(void)
{
s32 result;
if (SaveEnableF == 0) {
@ -235,15 +242,18 @@ s32 SLFileClose(void) {
return result;
}
void SLCurSlotNoSet(s16 slotno) {
void SLCurSlotNoSet(s16 slotno)
{
curSlotNo = slotno;
}
void SLCurBoxNoSet(s16 boxno) {
void SLCurBoxNoSet(s16 boxno)
{
curBoxNo = boxno;
}
void SLSaveFlagSet(s32 flag) {
void SLSaveFlagSet(s32 flag)
{
if (flag == 0) {
GWGameStat.party_continue = 0;
GWGameStat.story_continue = 0;
@ -251,11 +261,13 @@ void SLSaveFlagSet(s32 flag) {
SaveEnableF = flag;
}
s32 SLSaveFlagGet(void) {
s32 SLSaveFlagGet(void)
{
return SaveEnableF;
}
void SLSaveDataMake(s32 erase, OSTime *time) {
void SLSaveDataMake(s32 erase, OSTime *time)
{
AnimData *anim_data;
u8 *buf;
s32 i;
@ -270,24 +282,25 @@ void SLSaveDataMake(s32 erase, OSTime *time) {
buf[i] = (&commentTbl[0][0])[i];
}
for (i = 0; i < 0x20; i++) {
(&buf[0x20])[i] = (&commentTbl[0][0])[i+32];
(&buf[0x20])[i] = (&commentTbl[0][0])[i + 32];
}
anim_data = HuSprAnimReadFile(WIN_CARD_BANNER_ANM);
memcpy(buf + offsetof(SaveBufData, banner), anim_data->bmp->data, CARD_BANNER_WIDTH*CARD_BANNER_HEIGHT);
memcpy(buf + offsetof(SaveBufData, banner), anim_data->bmp->data, CARD_BANNER_WIDTH * CARD_BANNER_HEIGHT);
memcpy(buf + offsetof(SaveBufData, bannerTlut), anim_data->bmp->palData, 512);
anim_data = HuSprAnimReadFile(curBoxNo + WIN_CARD_BOX1_ICON_ANM);
memcpy(buf + offsetof(SaveBufData, icon), anim_data->bmp->data, CARD_ICON_WIDTH*CARD_ICON_HEIGHT*4);
memcpy(buf + offsetof(SaveBufData, icon), anim_data->bmp->data, CARD_ICON_WIDTH * CARD_ICON_HEIGHT * 4);
memcpy(buf + offsetof(SaveBufData, iconTlut), anim_data->bmp->palData, 512);
SLSaveDataInfoSet(time);
}
void SLSaveDataInfoSet(OSTime *time) {
void SLSaveDataInfoSet(OSTime *time)
{
s16 year;
s16 digit;
OSCalendarTime sp8;
#if VERSION_ENG
OSTicksToCalendarTime(*time, &sp8);
#if VERSION_ENG
saveBuf.data.comment[37] = curBoxNo + '1';
digit = (sp8.mon + 1) / 10;
saveBuf.data.comment[40] = digit + '0';
@ -308,8 +321,7 @@ void SLSaveDataInfoSet(OSTime *time) {
saveBuf.data.comment[48] = digit + '0';
year -= digit * 10;
saveBuf.data.comment[49] = year + '0';
#elif VERSION_PAL
OSTicksToCalendarTime(*time, &sp8);
#elif VERSION_PAL
saveBuf.data.comment[37] = curBoxNo + '1';
digit = sp8.mday / 10;
saveBuf.data.comment[40] = digit + '0';
@ -330,33 +342,38 @@ void SLSaveDataInfoSet(OSTime *time) {
saveBuf.data.comment[48] = digit + '0';
year -= digit * 10;
saveBuf.data.comment[49] = year + '0';
#else
//TODO: Japanese Version
OSTicksToCalendarTime(*time, &sp8);
saveBuf.data.comment[37] = curBoxNo + '1';
digit = sp8.mday / 10;
saveBuf.data.comment[40] = digit + '0';
digit = sp8.mday % 10;
saveBuf.data.comment[41] = digit + '0';
#else
saveBuf.data.comment[52] = sjisNumTbl[(curBoxNo + 1) * 2];
saveBuf.data.comment[53] = sjisNumTbl[(curBoxNo + 1) * 2 + 1];
digit = (sp8.mon + 1) / 10;
saveBuf.data.comment[43] = digit + '0';
if (digit == 0) {
saveBuf.data.comment[32] = sjisSpace[0];
saveBuf.data.comment[33] = sjisSpace[1];
}
else {
saveBuf.data.comment[32] = sjisNumTbl[digit * 2];
saveBuf.data.comment[33] = sjisNumTbl[digit * 2 + 1];
}
digit = (sp8.mon + 1) % 10;
saveBuf.data.comment[44] = digit + '0';
year = sp8.year;
digit = year / 1000;
saveBuf.data.comment[46] = digit + '0';
year -= digit * 1000;
digit = year / 100;
saveBuf.data.comment[47] = digit + '0';
year -= digit * 100;
digit = year / 10;
saveBuf.data.comment[48] = digit + '0';
year -= digit * 10;
saveBuf.data.comment[49] = year + '0';
#endif
saveBuf.data.comment[34] = sjisNumTbl[digit * 2];
saveBuf.data.comment[35] = sjisNumTbl[digit * 2 + 1];
digit = sp8.mday / 10;
if (digit == 0) {
saveBuf.data.comment[38] = sjisSpace[0];
saveBuf.data.comment[39] = sjisSpace[1];
}
else {
saveBuf.data.comment[38] = sjisNumTbl[digit * 2];
saveBuf.data.comment[39] = sjisNumTbl[digit * 2 + 1];
}
digit = sp8.mday % 10;
saveBuf.data.comment[40] = sjisNumTbl[digit * 2];
saveBuf.data.comment[41] = sjisNumTbl[digit * 2 + 1];
#endif
}
void SLCommonSet(void) {
void SLCommonSet(void)
{
OSTime create_time;
create_time = OSGetTime();
@ -365,7 +382,8 @@ void SLCommonSet(void) {
SLSaveDataInfoSet(&create_time);
}
void SLSaveBoard(void) {
void SLSaveBoard(void)
{
s16 i;
memcpy(&saveBuf.data.system, &GWSystem, sizeof(SystemState));
@ -374,7 +392,8 @@ void SLSaveBoard(void) {
}
}
void SLSaveBoardStory(void) {
void SLSaveBoardStory(void)
{
s16 i;
memcpy(&saveBuf.data.systemStory, &GWSystem, sizeof(SystemState));
@ -383,7 +402,8 @@ void SLSaveBoardStory(void) {
}
}
s32 SLSave(void) {
s32 SLSave(void)
{
s32 result;
while (1) {
@ -392,7 +412,8 @@ s32 SLSave(void) {
if (result == CARD_RESULT_NOFILE) {
if (!SLSerialNoCheck()) {
SLMessOut(9);
} else {
}
else {
SLCreateSaveWin();
result = SLFileCreate(SaveFileNameTbl[curBoxNo], 16384, &saveBuf);
SLKillSaveWin();
@ -401,7 +422,8 @@ s32 SLSave(void) {
goto block_32;
}
}
} else {
}
else {
if (result == CARD_RESULT_NOCARD) {
result = SLMessOut(10);
if (result != 0) {
@ -414,15 +436,18 @@ s32 SLSave(void) {
if (result >= 0) {
if (!SLSerialNoCheck()) {
SLMessOut(9);
} else {
}
else {
SLCreateSaveWin();
result = SLFileWrite(16384, &saveBuf);
SLKillSaveWin();
if (result == CARD_RESULT_NOCARD) {
SLMessOut(0);
} else if (result == CARD_RESULT_WRONGDEVICE) {
}
else if (result == CARD_RESULT_WRONGDEVICE) {
SLMessOut(7);
} else if (result == CARD_RESULT_BROKEN) {
}
else if (result == CARD_RESULT_BROKEN) {
result = HuCardSectorSizeGet(curSlotNo);
if (result > 0 && result != 8192) {
SLMessOut(8);
@ -436,13 +461,15 @@ s32 SLSave(void) {
return result;
}
continue;
} else {
}
else {
result = CARD_RESULT_BROKEN;
}
} else if (result < 0) {
}
else if (result < 0) {
SLMessOut(1);
}
block_32:
block_32:
SLFileClose();
if (result >= 0) {
HuCardUnMount(curSlotNo);
@ -451,11 +478,12 @@ block_32:
}
}
}
block_36:
block_36:
result = SLMessOut(10);
if (result != 0) {
SLMessOut(11);
} else {
}
else {
SLSaveFlagSet(0);
break;
}
@ -470,23 +498,31 @@ block_36:
#define SAVEWIN_POS 120
#endif
static s16 SLCreateSaveWin(void) {
#if VERSION_JPN
#define SAVEWIN_MESS slotIconMesTbl
#else
#define SAVEWIN_MESS SlotNameTbl
#endif
static s16 SLCreateSaveWin(void)
{
float size[2];
s16 window;
HuWinInit(1);
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0);
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SAVEWIN_MESS[curSlotNo]), 0);
HuWinMesMaxSizeGet(1, size, MAKE_MESSID(16, 68));
window = HuWinExCreateStyled(-10000.0f, SAVEWIN_POS, size[0], size[1], -1, 2);
saveMessWin = window;
HuWinExAnimIn(window);
HuWinInsertMesSet(window, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0);
HuWinInsertMesSet(window, MAKE_MESSID_PTR(SAVEWIN_MESS[curSlotNo]), 0);
HuWinMesSet(window, MAKE_MESSID(16, 68));
HuWinMesWait(window);
return window;
}
static void SLKillSaveWin(void) {
static void SLKillSaveWin(void)
{
if (saveMessWin != -1) {
HuWinExAnimOut(saveMessWin);
HuWinExCleanup(saveMessWin);
@ -494,7 +530,8 @@ static void SLKillSaveWin(void) {
}
}
s32 SLLoad(void) {
s32 SLLoad(void)
{
s32 result;
u16 *save_checksum;
u16 checksum;
@ -513,11 +550,13 @@ s32 SLLoad(void) {
return 0;
}
void SLLoadGameStat(void) {
void SLLoadGameStat(void)
{
memcpy(&GWGameStat, &saveBuf.data.stat, sizeof(GameStat));
}
void SLLoadBoard(void) {
void SLLoadBoard(void)
{
s16 i;
memcpy(&GWSystem, &saveBuf.data.system, sizeof(SystemState));
@ -531,7 +570,8 @@ void SLLoadBoard(void) {
}
}
void SLLoadBoardStory(void) {
void SLLoadBoardStory(void)
{
s16 i;
memcpy(&GWSystem, &saveBuf.data.systemStory, 0xDC);
@ -545,11 +585,13 @@ void SLLoadBoardStory(void) {
}
}
s32 SLSerialNoGet(void) {
s32 SLSerialNoGet(void)
{
return CARDGetSerialNo(curSlotNo, &SLSerialNo);
}
BOOL SLSerialNoCheck(void) {
BOOL SLSerialNoCheck(void)
{
s32 result;
u64 serialNo;
@ -566,7 +608,8 @@ BOOL SLSerialNoCheck(void) {
return TRUE;
}
BOOL SLCheckSumCheck(void) {
BOOL SLCheckSumCheck(void)
{
u16 *save_checksum = (u16 *)&saveBuf.buf[sizeof(SaveBufData)];
u16 checksum = SLCheckSumGet();
@ -576,7 +619,8 @@ BOOL SLCheckSumCheck(void) {
return FALSE;
}
u16 SLCheckSumGet(void) {
u16 SLCheckSumGet(void)
{
u32 i;
u32 checksum;
@ -584,17 +628,19 @@ u16 SLCheckSumGet(void) {
checksum += saveBuf.buf[i];
}
checksum = ~checksum;
return (u16) checksum & 0xFFFF;
return (u16)checksum & 0xFFFF;
}
void SLCheckSumSet(void) {
void SLCheckSumSet(void)
{
u16 checksum = SLCheckSumGet();
saveBuf.buf[sizeof(SaveBufData)] = (checksum >> 8) & 0xFF;
saveBuf.buf[sizeof(SaveBufData)+1] = checksum;
saveBuf.buf[sizeof(SaveBufData) + 1] = checksum;
}
s32 SLStatSet(s32 reportF) {
s32 SLStatSet(s32 reportF)
{
CARDStat stat;
s32 fileNo;
s32 result;
@ -643,7 +689,8 @@ s32 SLStatSet(s32 reportF) {
return result;
}
s32 SLCardMount(s16 slotNo) {
s32 SLCardMount(s16 slotNo)
{
s32 result;
while (1) {
@ -673,10 +720,12 @@ s32 SLCardMount(s16 slotNo) {
if (result != 0) {
return result;
}
} else {
}
else {
return CARD_RESULT_FATAL_ERROR;
}
} else {
}
else {
break;
}
}
@ -692,7 +741,8 @@ s32 SLCardMount(s16 slotNo) {
return 0;
}
s32 SLFormat(s16 slotNo) {
s32 SLFormat(s16 slotNo)
{
float winSize[2];
s16 result;
s16 window1;
@ -700,11 +750,11 @@ s32 SLFormat(s16 slotNo) {
OSTime time;
HuWinInit(1);
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0);
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SAVEWIN_MESS[curSlotNo]), 0);
HuWinMesMaxSizeGet(1, winSize, MAKE_MESSID(16, 56));
window1 = HuWinExCreateStyled(-10000.0f, SAVEWIN_POS, winSize[0], winSize[1], -1, 2);
HuWinExAnimIn(window1);
HuWinInsertMesSet(window1, MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0);
HuWinInsertMesSet(window1, MAKE_MESSID_PTR(SAVEWIN_MESS[curSlotNo]), 0);
HuWinMesSet(window1, MAKE_MESSID(16, 56));
HuWinMesMaxSizeGet(1, winSize, MAKE_MESSID(16, 11));
window2 = HuWinExCreateStyled(-10000.0f, 200.0f, winSize[0], winSize[1], -1, 2);
@ -754,7 +804,8 @@ s32 SLFormat(s16 slotNo) {
return result;
}
s16 SLMessOut(s16 mess) {
s16 SLMessOut(s16 mess)
{
WindowData *var_r26;
float size[2];
u32 slot_mess;
@ -782,19 +833,23 @@ s16 SLMessOut(s16 mess) {
case 2:
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0);
slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]);
#if VERSION_NTSC
#if VERSION_ENG
save_mess = MAKE_MESSID(16, 74);
#else
#elif VERSION_PAL
save_mess = MAKE_MESSID(16, 72);
#endif
#else
save_mess = MAKE_MESSID(16, 5);
#endif
break;
case 3:
#if VERSION_NTSC
#if VERSION_ENG
save_mess = MAKE_MESSID(16, 74);
#else
#elif VERSION_PAL
save_mess = MAKE_MESSID(16, 72);
#endif
#else
save_mess = MAKE_MESSID(16, 6);
#endif
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0);
slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]);
break;
@ -841,11 +896,11 @@ s16 SLMessOut(s16 mess) {
case 11:
HuWinInsertMesSizeGet(MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]), 0);
slot_mess = MAKE_MESSID_PTR(SlotNameTbl[curSlotNo]);
#if VERSION_NTSC
#if VERSION_ENG
save_mess = MAKE_MESSID(16, 72);
#else
#else
save_mess = MAKE_MESSID(16, 76);
#endif
#endif
break;
case 12:
@ -854,7 +909,8 @@ s16 SLMessOut(s16 mess) {
}
if (save_mess == MAKE_MESSID(16, 4)) {
HuWinMesMaxSizeGet(1, size, MAKE_MESSID(16, 78));
} else {
}
else {
HuWinMesMaxSizeGet(1, size, save_mess);
}
window = HuWinExCreateStyled(-10000.0f, 200.0f, size[0], size[1], -1, 2);

View file

@ -22,7 +22,11 @@ extern s32 HuDvdErrWait;
static s32 SR_PreRstChk[4] = {};
#if VERSION_NTSC
#if VERSION_JPN
static s32 padding[4] = {};
#endif
#if VERSION_ENG
#include "coveropen_en.inc"
#include "fatalerror_en.inc"
@ -31,7 +35,7 @@ static s32 SR_PreRstChk[4] = {};
#include "retryerror_en.inc"
#include "wrongdisc_en.inc"
#else
#elif VERSION_PAL
#include "coveropen_en.inc"
#include "fatalerror_en.inc"
@ -68,6 +72,15 @@ static s32 SR_PreRstChk[4] = {};
#include "retryerror_sp.inc"
#include "wrongdisc_sp.inc"
#else
#include "coveropen_jp.inc"
#include "fatalerror_jp.inc"
#include "loading_jp.inc"
#include "nodisc_jp.inc"
#include "retryerror_jp.inc"
#include "wrongdisc_jp.inc"
#endif
static s16 SR_PushTime[4] = {};
@ -287,11 +300,11 @@ static void ToeDispCheck(void)
static void _HuDvdErrDispXFB(s32 error)
{
#if VERSION_NTSC
#if VERSION_ENG
static void *bmpMes[][6] = {
loading_en, coveropen_en, nodisc_en, wrongdisc_en, retryerror_en, fatalerror_en
loading_en, coveropen_en, nodisc_en, wrongdisc_en, retryerror_en, fatalerror_en
};
#else
#elif VERSION_PAL
static void *bmpMes[][6] = {
loading_en, coveropen_en, nodisc_en, wrongdisc_en, retryerror_en, fatalerror_en,
loading_fr, coveropen_fr, nodisc_fr, wrongdisc_fr, retryerror_fr, fatalerror_fr,
@ -299,6 +312,10 @@ static void _HuDvdErrDispXFB(s32 error)
loading_it, coveropen_it, nodisc_it, wrongdisc_it, retryerror_it, fatalerror_it,
loading_sp, coveropen_sp, nodisc_sp, wrongdisc_sp, retryerror_sp, fatalerror_sp
};
#else
static void *bmpMes[][6] = {
loading_jp, coveropen_jp, nodisc_jp, wrongdisc_jp, retryerror_jp, fatalerror_jp
};
#endif
s16 *bmpData;
@ -524,4 +541,4 @@ static void HuSoftResetPostProc(void)
HuPadRumbleAllStop();
SR_ExecReset = TRUE;
}
}
}

File diff suppressed because it is too large Load diff