Port m402Dll and m404Dll to PAL and finish m458Dll (#509)

* Ported m404Dll to PAL and misc changes

* Port m402Dll to PAL

* Cleaned up some ternaries in m458Dll

* Finish m458Dll with the help of Shigure
This commit is contained in:
dbalatoni13 2025-01-05 22:31:32 +01:00 committed by GitHub
parent b347ee8bd0
commit 05a2e87763
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 604 additions and 664 deletions

View file

@ -778,7 +778,7 @@ static void fn_1_2970(UnkFn27A8Struct *arg0, omObjData *arg1, u8 arg2)
static void fn_1_2B30(UnkFn27A8Struct *arg0, omObjData *arg1, omObjData *arg2)
{
arg0->unk50 = 0;
arg0->unk20 = (770.0f - arg0->unk1C) / 18.0f;
arg0->unk20 = (770.0f - arg0->unk1C) / (REFRESH_RATE * 0.3f);
arg0->unk0C = Hu3DMotionTimeGet(arg2->model[0]);
Hu3DMotionTimeSet(lbl_1_bss_54[arg0->unk54]->model[0], 0.0f);
Hu3DMotionSpeedSet(arg1->model[0], 1.0f);
@ -795,13 +795,13 @@ static u8 fn_1_2DBC(UnkFn27A8Struct *arg0, omObjData *arg1)
float var_f29;
arg0->unk50++;
var_f30 = 90.0f * (arg0->unk50 / 18.0f);
var_f30 = 90.0f * (arg0->unk50 / (VERSION_NTSC ? 18.0f : 15.000001f));
var_f29 = arg0->unk0C * (1.0 - sind(var_f30));
Hu3DMotionTimeSet(arg1->model[0], var_f29);
fn_1_1D18(arg1->model[0], "motionC-stretch", &sp20);
arg0->unk28 = sp20.y - arg0->unk14 + 388.0f;
arg0->unk1C += arg0->unk20;
if (18.0f < arg0->unk50) {
if ((REFRESH_RATE * 0.3f) < arg0->unk50) {
arg0->unk20 = (670.0f - arg0->unk1C) / 20.0f;
Hu3DModelAttrReset(arg1->model[0], HU3D_MOTATTR_LOOP | HU3D_MOTATTR_PAUSE);
Hu3DMotionSet(arg1->model[0], arg1->motion[2]);
@ -927,7 +927,7 @@ static void fn_1_3204(omObjData *arg0)
}
}
}
if (60.0f <= temp_r31->unk30) {
if (1.0f * REFRESH_RATE <= temp_r31->unk30) {
temp_r31->unk4C = 2017;
fn_1_2B30(temp_r31, arg0, temp_r29);
}
@ -950,7 +950,7 @@ static void fn_1_3204(omObjData *arg0)
case 2017:
if (fn_1_2DBC(temp_r31, temp_r29) != 0) {
temp_r31->unk4C = 2018;
temp_r31->unk50 = 120;
temp_r31->unk50 = 2 * REFRESH_RATE;
}
break;
case 2018:
@ -1125,7 +1125,7 @@ static void fn_1_43D8(omObjData *arg0)
case 2008:
if (fn_1_2DBC(temp_r31, temp_r30) != 0) {
temp_r31->unk4C++;
temp_r31->unk50 = 120;
temp_r31->unk50 = 2 * REFRESH_RATE;
}
break;
case 2009:
@ -1195,7 +1195,7 @@ static void fn_1_43D8(omObjData *arg0)
case 2014:
if (fn_1_2DBC(temp_r31, temp_r30) != 0) {
temp_r31->unk4C++;
temp_r31->unk50 = 120;
temp_r31->unk50 = 2 * REFRESH_RATE;
}
break;
case 2015:
@ -1665,8 +1665,8 @@ static void fn_1_8218(omObjData *arg0)
}
if (MGSeqStatGet(lbl_1_bss_1AA) == 0) {
arg0->work[0]++;
lbl_1_bss_1B0 = 1800;
lbl_1_bss_1A8 = MGSeqCreate(1, lbl_1_bss_1B0 / 60, -1, -1);
lbl_1_bss_1B0 = 30 * REFRESH_RATE;
lbl_1_bss_1A8 = MGSeqCreate(1, lbl_1_bss_1B0 / REFRESH_RATE, -1, -1);
lbl_1_bss_1AA = -1;
}
}
@ -1675,7 +1675,7 @@ static void fn_1_8218(omObjData *arg0)
MGSeqParamSet(lbl_1_bss_1A8, 1, (lbl_1_bss_1B0 + REFRESH_RATE - 1) / REFRESH_RATE);
lbl_1_bss_1B0--;
if (lbl_1_bss_1B0 < 0 || lbl_1_bss_26 >= 0) {
lbl_1_bss_1B0 = 1800;
lbl_1_bss_1B0 = 30 * REFRESH_RATE;
lbl_1_bss_2C = 0.0f;
arg0->work[0] = 1007;
}
@ -1698,8 +1698,8 @@ static void fn_1_8218(omObjData *arg0)
}
else {
lbl_1_bss_2C += 1.0f;
if (90.0f >= lbl_1_bss_2C) {
fn_1_13DC(lbl_1_bss_2C / 90.0f, &lbl_1_data_1C);
if (1.5f * REFRESH_RATE >= lbl_1_bss_2C) {
fn_1_13DC(lbl_1_bss_2C / (1.5f * REFRESH_RATE), &lbl_1_data_1C);
}
if (MGSeqStatGet(lbl_1_bss_1AA) == 0) {
arg0->work[0]++;

View file

@ -12,6 +12,7 @@
#include "game/wipe.h"
#include "string.h"
#include "version.h"
typedef struct UnkM404Struct {
s16 unk_00;
@ -281,7 +282,7 @@ s32 fn_1_38C(void)
void fn_1_39C(omObjData *object)
{
fn_1_37C(0);
lbl_1_bss_24 = 60;
lbl_1_bss_24 = REFRESH_RATE;
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
object->func = fn_1_400;
}
@ -294,7 +295,7 @@ void fn_1_400(omObjData *object)
break;
}
fn_1_37C(1);
lbl_1_bss_24 = 180;
lbl_1_bss_24 = 3 * REFRESH_RATE;
break;
case 1:
if (--lbl_1_bss_24) {
@ -327,22 +328,22 @@ void fn_1_400(omObjData *object)
if (!MGSeqStatGet(lbl_1_bss_C)) {
fn_1_37C(5);
WipeColorSet(255, 255, 255);
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 30);
lbl_1_bss_24 = 60;
WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, REFRESH_RATE / 2);
lbl_1_bss_24 = REFRESH_RATE;
}
case 5:
if (--lbl_1_bss_24) {
break;
}
fn_1_37C(6);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60);
WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, REFRESH_RATE);
break;
case 6:
if (WipeStatGet()) {
break;
}
fn_1_37C(7);
lbl_1_bss_24 = 180;
lbl_1_bss_24 = 3 * REFRESH_RATE;
break;
case 7:
if (--lbl_1_bss_24) {
@ -356,7 +357,7 @@ void fn_1_400(omObjData *object)
else {
HuAudSStreamPlay(4);
}
lbl_1_bss_24 = 210;
lbl_1_bss_24 = 3.5 * REFRESH_RATE;
break;
case 8:
break;
@ -740,7 +741,7 @@ void fn_1_1344(omObjData *object)
DCFlushRangeNoSync(var_r31->unk_50->bmp->data, (var_r31->unk_50->bmp->pixSize * (var_r31->unk_50->bmp->sizeX * var_r31->unk_50->bmp->sizeY)) / 8);
Hu3DMotionOverlaySet(object->model[0], object->motion[2]);
object->trans.y = 1500.0f;
var_r31->unk_38 = var_r31->unk_02 * 60 / 2;
var_r31->unk_38 = var_r31->unk_02 * REFRESH_RATE / 2;
CharModelDataClose(var_r31->unk_0C);
if (GWPlayerCfg[var_r31->unk_02].iscom == 1) {
var_r28 = lbl_1_data_8E8[lbl_1_bss_1C];
@ -782,7 +783,7 @@ void fn_1_1AFC(omObjData *object)
}
}
if (object->trans.y > 0.0f) {
var_r31->unk_24 = var_r31->unk_24 - 1.0000001f;
var_r31->unk_24 = var_r31->unk_24 - (VERSION_NTSC ? 1.0000001f : 1.2f);
object->trans.y += var_r31->unk_24;
if (object->trans.y < 0.0f) {
object->trans.y = 0.0f;
@ -799,7 +800,7 @@ void fn_1_1AFC(omObjData *object)
}
if (var_r31->unk_38 == 0) {
var_r31->unk_00_field2 = 1;
var_r31->unk_38 = 30;
var_r31->unk_38 = REFRESH_RATE / 2;
return;
}
var_r31->unk_38--;
@ -950,13 +951,13 @@ void fn_1_3F30(omObjData *object)
var_r31 = object->data;
if (var_r31->unk_5E < (var_r31->unk_6C - 1)) {
if ((3.0f + var_r31->unk_64) >= var_r31->unk_68) {
var_r31->unk_64 = 3.0f - (var_r31->unk_68 - var_r31->unk_64);
if ((180.0f / REFRESH_RATE + var_r31->unk_64) >= var_r31->unk_68) {
var_r31->unk_64 = 180.0f / REFRESH_RATE - (var_r31->unk_68 - var_r31->unk_64);
var_r31->unk_5E += 3;
var_r31->unk_68 = fn_1_2EBC(var_r31->unk_70[var_r31->unk_5E], 1.0f);
}
else {
var_r31->unk_64 += 3.0f;
var_r31->unk_64 += 180.0f / REFRESH_RATE;
}
var_r31->unk_60 = fn_1_3A38(var_r31->unk_70[var_r31->unk_5E], var_r31->unk_60, var_r31->unk_64);
var_r30 = var_r31->unk_70[var_r31->unk_5E];
@ -1012,8 +1013,8 @@ void fn_1_44A0(omObjData *object)
}
if (((var_r31->unk_06 * var_r31->unk_06) + (var_r31->unk_07 * var_r31->unk_07)) > 16.0f) {
var_f31 = atan2d(var_r31->unk_06, -var_r31->unk_07);
var_r31->unk_20 = 3.0f * sind(var_f31);
var_r31->unk_28 = 3.0f * cosd(var_f31);
var_r31->unk_20 = (VERSION_NTSC ? 3.0 : 3.5999999046325684) * sind(var_f31);
var_r31->unk_28 = (VERSION_NTSC ? 3.0 : 3.5999999046325684) * cosd(var_f31);
var_r28 = 1;
if (var_r31->unk_20 > 0.0f) {
CharModelMotionSpeedSet(var_r31->unk_0C, 0.5f);
@ -1090,7 +1091,7 @@ void fn_1_44A0(omObjData *object)
break;
case 1:
var_r28 = 1;
object->trans.x += 4.0000005f;
object->trans.x += VERSION_NTSC ? 4.0000005f : 4.8f;
if (object->trans.x >= 3200.0f) {
var_r31->unk_12++;
var_r31->unk_38 = 0x3C;
@ -1468,14 +1469,14 @@ void fn_1_66DC(omObjData *object)
case 1:
fn_1_648C(0, 1, 1.0 - cosd(90.0f * lbl_1_bss_4));
if (lbl_1_bss_4 < 1.0f) {
lbl_1_bss_4 += 0.007999999f;
lbl_1_bss_4 += VERSION_NTSC ? 0.007999999f : 0.0095999995f;
if (lbl_1_bss_4 > 1.0f) {
lbl_1_bss_4 = 1.0f;
}
}
break;
case 3:
Center.x += 2.0000002f;
Center.x += VERSION_NTSC ? 2.0000002f : 2.4f;
Hu3DShadowData.unk_14.x = 1000.0f + var_r31->pos.x;
Hu3DShadowData.unk_20.x = Hu3DShadowData.unk_14.x - 1500.0f;
break;
@ -1484,7 +1485,7 @@ void fn_1_66DC(omObjData *object)
break;
case 7:
if (Center.x < 3000.0f) {
Center.x += 25.0f;
Center.x += VERSION_NTSC ? 25.0f : 30.0f;
}
default:
break;

View file

@ -667,20 +667,11 @@ void fn_1_758(omObjData *var_r29)
sp1F0 = var_r31->unk_60[var_r26] + var_r31->unk_90[var_r26];
sp1EC = var_r31->unk_80[var_r26] + var_r31->unk_B0[var_r26];
if (var_r31->unk_F0[var_r26] == 0) {
if (var_r31->unk_28 != 0.0f) {
if (var_r31->unk_28 < 0.0f ? (sp1F0 < var_r31->unk_20) : (sp1F0 > var_r31->unk_20)) {
goto block_169;
}
}
if (var_r31->unk_28 != 0.0f && !(var_r31->unk_28 < 0.0f ? (sp1F0 < var_r31->unk_20) : (sp1F0 > var_r31->unk_20))) { }
else {
block_169:
if (var_r31->unk_2C != 0.0f) {
if (var_r31->unk_2C < 0.0f ? (sp1EC < var_r31->unk_24) : (sp1EC > var_r31->unk_24)) {
goto block_174;
}
}
if (var_r31->unk_2C != 0.0f
&& !(var_r31->unk_2C < 0.0f ? (sp1EC < var_r31->unk_24) : (sp1EC > var_r31->unk_24))) { }
else {
block_174:
var_r31->unk_1C = 0;
var_r31->unk_14 = var_r26;
var_r25 = var_r26;
@ -935,28 +926,16 @@ void fn_1_758(omObjData *var_r29)
}
}
else if (var_r31->unk_1C != 0) {
if (var_r31->unk_28 != 0.0f) {
if (!(var_r31->unk_28 < 0.0f ? (var_f30 < var_r31->unk_20) : (var_f30 > var_r31->unk_20))) {
var_f29 = var_r31->unk_28 < 0.0f ? (var_f30 > var_r31->unk_20 ? -1 : 0) : (var_f30 < var_r31->unk_20 ? 1 : 0);
}
else {
goto block_368;
}
if (var_r31->unk_28 != 0.0f && !(var_r31->unk_28 < 0.0f ? (var_f30 < var_r31->unk_20) : (var_f30 > var_r31->unk_20))) {
var_f29 = var_r31->unk_28 < 0.0f ? (var_f30 > var_r31->unk_20 ? -1 : 0) : (var_f30 < var_r31->unk_20 ? 1 : 0);
}
else {
block_368:
var_f29 = var_r31->unk_58 < -0.1 ? 1.0f : (var_r31->unk_58 > 0.1 ? -1.0f : (-10.0f * var_r31->unk_58));
}
if (var_r31->unk_2C != 0.0f) {
if ((var_r31->unk_2C < 0.0f ? (var_f31 < var_r31->unk_24) : (var_f31 > var_r31->unk_24)) == 0) {
var_f28 = var_r31->unk_2C < 0.0f ? (var_f31 > var_r31->unk_24 ? -1 : 0) : (var_f31 < var_r31->unk_24 ? 1 : 0);
}
else {
goto block_390;
}
if (var_r31->unk_2C != 0.0f && (var_r31->unk_2C < 0.0f ? (var_f31 < var_r31->unk_24) : (var_f31 > var_r31->unk_24)) == 0) {
var_f28 = var_r31->unk_2C < 0.0f ? (var_f31 > var_r31->unk_24 ? -1 : 0) : (var_f31 < var_r31->unk_24 ? 1 : 0);
}
else {
block_390:
var_f28 = var_r31->unk_5C < -0.1 ? 1.0f : (var_r31->unk_5C > 0.1 ? -1.0f : (-10.0f * var_r31->unk_5C));
}
}

View file

@ -1,6 +1,7 @@
#include "game/audio.h"
#include "game/chrman.h"
#include "game/data.h"
#include "game/sprite.h"
#include "game/esprite.h"
#include "game/gamework_data.h"
#include "game/hsfdraw.h"
@ -14,9 +15,12 @@
#include "game/process.h"
#include "game/window.h"
#include "game/wipe.h"
#include "string.h"
#include "ext_math.h"
s32 rand8(void);
typedef struct {
/* 0x00 */ s32 unk00;
/* 0x04 */ s32 unk04;

View file

@ -177,24 +177,8 @@ void fn_1_A0(void)
s32 lbl_1_data_16C = -1;
// https://decomp.me/scratch/QQLCN r17 issues
void fn_1_4C8(omObjData *object)
{
Mtx sp1E0;
float sp1A8[2];
float sp1A0[2];
s32 spD0;
s32 spCC;
s32 spC8;
s32 spC4;
s32 spC0;
float spBC;
s32 spB8;
ModelData *spB4;
float spB0;
float spAC;
s32 spA8;
s32 spA4;
float var_f31;
float var_f30;
float var_f28;
@ -222,6 +206,22 @@ void fn_1_4C8(omObjData *object)
s32 var_r18;
s32 var_r17;
Mtx sp1E0;
float sp1A8[2];
float sp1A0[2];
s32 spD0;
s32 spCC;
s32 spC8;
s32 spC4;
s32 spC0;
float spBC;
s32 spB8;
ModelData *spB4;
float spB0;
float spAC;
s32 spA8;
s32 spA4;
var_r31 = object->data;
var_r27 = (&lbl_1_bss_BC)[1 - object->work[0]]->data;
var_f23 = 0.0f;
@ -277,8 +277,7 @@ void fn_1_4C8(omObjData *object)
spC4 = 0;
spC0 = 0;
if (fabs((500.0 * var_r31->unk_3C) - object->trans.x) < 10.0) {
var_r17 = object->trans.x < -250.0 ? -1 : (object->trans.x > 250.0 ? 1 : 0);
spD0 = var_r17;
var_r17 = spD0 = object->trans.x < -250.0 ? -1 : (object->trans.x > 250.0 ? 1 : 0);
}
else {
var_r17 = (object->trans.x < 0.0f ? -1 : 0);
@ -519,7 +518,6 @@ void fn_1_4C8(omObjData *object)
espAttrSet(lbl_1_data_8[1], HUSPR_ATTR_DISPOFF);
}
if (lbl_1_bss_B4 == 0x122) {
// TODO remove temporary?
spB8 = HuAudFXPlay((var_r31->unk_08 != -1 ? var_r31->unk_08 : 8) + 0x800);
HuAudFXFadeOut(spB8, 0x9C4);
}
@ -584,7 +582,7 @@ void fn_1_4C8(omObjData *object)
}
else {
var_f20 = 1.0f;
var_f21 = 1.0f;
var_f21 = 0.5f;
}
var_r23->scale.x = var_f20 + (var_f21 * sind((float)(var_r31->unk_1C % 180)));
var_r23->scale.y = var_r23->scale.z = var_r23->scale.x;
@ -724,16 +722,9 @@ void fn_1_4C8(omObjData *object)
if (lbl_1_data_15C >= 6) {
spA4 = lbl_1_bss_18;
for (spA8 = 0; spA8 < 0x32; spA8++) {
loop_344:
lbl_1_bss_18 = rand8() % 11;
if (lbl_1_bss_18 >= 9) {
if (lbl_1_bss_18 == (var_r31->unk_00 + 9)) {
goto loop_344;
}
}
if ((lbl_1_bss_18 < 9) && (lbl_1_bss_28C[lbl_1_bss_18].unk_0C == 0)) {
goto loop_344;
}
do {
lbl_1_bss_18 = rand8() % 11;
} while ((lbl_1_bss_18 >= 9 && lbl_1_bss_18 == var_r31->unk_00 + 9) || (lbl_1_bss_18 < 9 && lbl_1_bss_28C[lbl_1_bss_18].unk_0C == 0));
if (spA4 != lbl_1_bss_18) {
break;
}
@ -958,8 +949,7 @@ void fn_1_350C(omObjData *var_r27)
var_f25 *= lbl_1_data_114.unk_04 * 2;
var_f26 *= lbl_1_data_114.unk_04 * 2;
lbl_1_data_114.unk_00 = !lbl_1_data_114.unk_00;
lbl_1_data_114.unk_04 = (lbl_1_data_114.unk_04 > 24) ? 23
: (lbl_1_data_114.unk_04 - 1 > 0) ? (lbl_1_data_114.unk_04 - 1) : 0;
lbl_1_data_114.unk_04 = (lbl_1_data_114.unk_04 > 24) ? 23 : (lbl_1_data_114.unk_04 - 1 > 0) ? (lbl_1_data_114.unk_04 - 1) : 0;
Center.x = 0.0f;
Center.y = 100.0f + var_f26;
}
@ -1383,122 +1373,61 @@ void fn_1_6314(omObjData *object)
{
s32 sp10;
void *spC;
s32 sp8;
M458DllWork *var_r31;
M458DllWork *work;
s32 var_r29;
s32 var_r28;
s32 var_r27;
s32 var_r26;
s32 var_r25;
s32 var_r24;
s32 var_r23;
s32 var_r22;
s32 var_r21;
s32 var_r20;
s32 var_r19;
s32 var_r18;
s32 var_r17;
var_r31 = object->data;
work = object->data;
spC = (&lbl_1_bss_BC)[1 - object->work[0]]->data;
memset(var_r31, 0, 0x44);
var_r31->unk_00 = object->work[0];
// probably ternary, but it causes regswaps
if (GWPlayerCfg->group == var_r31->unk_00) {
var_r28 = 0;
}
else {
if (GWPlayerCfg[1].group == var_r31->unk_00) {
var_r27 = 1;
}
else {
if (GWPlayerCfg[2].group == var_r31->unk_00) {
var_r26 = 2;
}
else {
if (GWPlayerCfg[3].group == var_r31->unk_00) {
var_r25 = 3;
}
else {
var_r25 = 4;
}
var_r26 = var_r25;
}
var_r27 = var_r26;
}
var_r28 = var_r27;
}
var_r31->unk_04 = var_r28;
if (GWPlayerCfg->group == (1 - var_r31->unk_00)) {
var_r24 = 0;
}
else {
if (GWPlayerCfg[1].group == (1 - var_r31->unk_00)) {
var_r23 = 1;
}
else {
if (GWPlayerCfg[2].group == (1 - var_r31->unk_00)) {
var_r22 = 2;
}
else {
if (GWPlayerCfg[3].group == (1 - var_r31->unk_00)) {
var_r21 = 3;
}
else {
var_r21 = 4;
}
var_r22 = var_r21;
}
var_r23 = var_r22;
}
var_r24 = var_r23;
}
sp10 = var_r24;
if (var_r31->unk_04 == 4) {
memset(work, 0, sizeof(M458DllWork));
work->unk_00 = object->work[0];
work->unk_04 = GWPlayerCfg->group == work->unk_00
? 0
: (GWPlayerCfg[1].group == work->unk_00 ? 1 : (GWPlayerCfg[2].group == work->unk_00 ? 2 : (GWPlayerCfg[3].group == work->unk_00 ? 3 : 4)));
sp10 = GWPlayerCfg->group == (1 - work->unk_00)
? 0
: (GWPlayerCfg[1].group == (1 - work->unk_00)
? 1
: (GWPlayerCfg[2].group == (1 - work->unk_00) ? 2 : (GWPlayerCfg[3].group == (1 - work->unk_00) ? 3 : 4)));
if (work->unk_04 == 4) {
OSReport("m458:wrong player group\n");
var_r31->unk_04 = var_r31->unk_00;
work->unk_04 = work->unk_00;
}
if ((var_r31->unk_00 == 1) && (lbl_1_bss_14 != 0)) {
var_r31->unk_08 = -1;
var_r31->unk_0C = -1;
var_r31->unk_04 = -1;
var_r31->unk_10 = 0;
if ((work->unk_00 == 1) && (lbl_1_bss_14 != 0)) {
work->unk_08 = -1;
work->unk_0C = -1;
work->unk_04 = -1;
work->unk_10 = 0;
}
else {
var_r31->unk_08 = GWPlayerCfg[var_r31->unk_04].character;
var_r20 = 1;
if ((var_r31->unk_08 != -1) && (GWPlayerCfg[var_r31->unk_04].iscom == 0)) {
var_r20 = 0;
}
var_r31->unk_0C = var_r20 != 0 ? -1 : GWPlayerCfg[var_r31->unk_04].pad_idx;
var_r31->unk_10 = var_r31->unk_0C != -1 ? 0 : GWPlayerCfg[var_r31->unk_04].diff;
work->unk_08 = GWPlayerCfg[work->unk_04].character;
work->unk_0C = ((work->unk_08 == -1) || (GWPlayerCfg[work->unk_04].iscom != 0)) ? -1 : GWPlayerCfg[work->unk_04].pad_idx;
work->unk_10 = work->unk_0C != -1 ? 0 : GWPlayerCfg[work->unk_04].diff;
}
var_r31->unk_18 = 0;
var_r31->unk_20 = 3;
var_r31->unk_24 = -1;
if (var_r31->unk_08 != -1) {
object->model[0] = CharModelCreate(var_r31->unk_08, 1);
work->unk_18 = 0;
work->unk_20 = 3;
work->unk_24 = -1;
if (work->unk_08 != -1) {
object->model[0] = CharModelCreate(work->unk_08, 1);
}
else {
object->model[0] = Hu3DModelCreateFile(0x30007);
}
omSetTra(object, 0.0f, var_r31->unk_00 == 0 ? 0 : 0x12C, 0.0f);
if (var_r31->unk_08 != -1) {
omSetTra(object, 0.0f, work->unk_00 == 0 ? 0 : 0x12C, 0.0f);
if (work->unk_08 != -1) {
omSetSca(object, 2.5f, 2.5f, 2.5f);
}
else {
omSetSca(object, 2.0f, 2.0f, 2.0f);
}
for (var_r29 = 0; var_r29 < 0xA; var_r29++) {
if (var_r31->unk_08 != -1) {
object->motion[var_r29]
= CharModelMotionCreate(var_r31->unk_08, lbl_1_data_10[var_r29] + (lbl_1_data_38[var_r29] != 0 ? var_r31->unk_08 : 0));
if (work->unk_08 != -1) {
object->motion[var_r29] = CharModelMotionCreate(work->unk_08, lbl_1_data_10[var_r29] + (lbl_1_data_38[var_r29] != 0 ? work->unk_08 : 0));
}
else if (lbl_1_data_60[var_r29] != 0) {
object->motion[var_r29] = Hu3DJointMotionFile(object->model[0], lbl_1_data_60[var_r29]);
}
}
Hu3DMotionSet(object->model[0], object->motion[var_r31->unk_20]);
Hu3DMotionSet(object->model[0], object->motion[work->unk_20]);
Hu3DMotionTimeSet(object->model[0], 10.0f);
Hu3DModelAttrReset(object->model[0], HU3D_MOTATTR_LOOP);
Hu3DModelShadowSet(object->model[0]);

View file

@ -12,6 +12,11 @@
#include "REL/modeseldll.h"
#include "ext_math.h"
#ifndef __MWERKS__
#include "game/esprite.h"
#include "game/thpmain.h"
#endif
s16 lbl_1_data_80[] = { 16, 17, 18, 19, 20, 21 };
s32 lbl_1_data_8C[] = { DATA_MAKE_NUM(DATADIR_MODESEL, 0x30), DATA_MAKE_NUM(DATADIR_MODESEL, 0x32), DATA_MAKE_NUM(DATADIR_MODESEL, 0x34),

View file

@ -6,17 +6,22 @@
#include "game/hsfman.h"
#include "game/hsfmotion.h"
#include "game/memory.h"
#include "game/sprite.h"
#include "game/window.h"
#include "dolphin.h"
#include "math.h"
#include "version.h"
#ifndef __MWERKS__
#include "game/gamework.h"
#endif
#define RECORD_TYPE_BOARD 0
#define RECORD_TYPE_MG 1
#define NUM_CHARACTERS 8
#define NUM_BOARDS 6
#define CHARACTERS_MAX 8
#define BOARDS_MAX 6
#define PLAY_COUNT_NUM_DIGITS 4
#define WIN_COUNT_NUM_DIGITS 3
@ -92,15 +97,15 @@ omObjData *OptionRecordCreate(void)
object = omAddObjEx(optionObjMan, 1003, 0, 0, 1, NULL);
work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RecordWork), MEMORY_DEFAULT_NUM);
object->data = work;
for (i = 0; i < NUM_BOARDS; i++) {
for (i = 0; i < BOARDS_MAX; i++) {
work->boardRecord[i].playCount = GWBoardPlayCountGet(i);
work->boardRecord[i].maxStars = GWBoardMaxStarsGet(i);
work->boardRecord[i].maxCoins = GWBoardMaxCoinsGet(i);
for (character = 0; character < NUM_CHARACTERS; character++) {
for (character = 0; character < CHARACTERS_MAX; character++) {
work->boardRecord[i].winCount[character] = GWBoardWinCountGet(character, i);
}
}
for (i = 0; i < 6; i++) {
for (i = 0; i < BOARDS_MAX; i++) {
work->mgRecord[i] = GWMGRecordGet(mgRecordIdxTbl[i]);
}
work->board = 0;
@ -608,7 +613,7 @@ static void ShowBoard(omObjData *object, s32 board)
#if VERSION_NTSC
espPosSet(work->sprList[10], 456.0f, 312.0f);
#endif
for (i = 0; i < NUM_CHARACTERS; i++) {
for (i = 0; i < CHARACTERS_MAX; i++) {
espPosSet(work->sprList[i + 49], 92.0f + 50.0f * i, 200.0f);
for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) {
espPosSet(work->sprList[i * 3 + 23 + j], 80.0f + 50.0f * i + 12.0f * j, 230.0f);
@ -634,7 +639,7 @@ static void ShowBoard(omObjData *object, s32 board)
espDispOn(work->sprList[i + 19]);
}
espDispOn(work->sprList[10]);
for (i = 0; i < NUM_CHARACTERS; i++) {
for (i = 0; i < CHARACTERS_MAX; i++) {
espDispOn(work->sprList[i + 49]);
for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) {
espDispOn(work->sprList[i * 3 + 23 + j]);
@ -679,9 +684,9 @@ static void ShowTotal(omObjData *object)
s32 j;
espPosSet(work->sprList[6], 275.0f, 72.0f);
for (i = 0; i < NUM_CHARACTERS; i++) {
for (i = 0; i < CHARACTERS_MAX; i++) {
espPosSet(work->sprList[i + 57], 148.0f + 80.0f * (i % 4), 172.0f + 104.0f * (i / 4));
for (j = 0, winCount = 0; j < NUM_BOARDS; j++) {
for (j = 0, winCount = 0; j < BOARDS_MAX; j++) {
winCount += work->boardRecord[j].winCount[i];
}
for (j = 0; j < WIN_COUNT_NUM_DIGITS; j++) {
@ -690,7 +695,7 @@ static void ShowTotal(omObjData *object)
}
}
espDispOn(work->sprList[6]);
for (i = 0; i < NUM_CHARACTERS; i++) {
for (i = 0; i < CHARACTERS_MAX; i++) {
espDispOn(work->sprList[i + 57]);
for (j = 0; j < 3; j++) {
espDispOn(work->sprList[i * 3 + 65 + j]);

View file

@ -9,7 +9,7 @@
#include "REL/present.h"
#define NUM_CHARACTERS 8
#define CHARACTERS_MAX 8
#define PRESENT_MDL_MAX 134
#define PRESENT_MAX 60
@ -445,7 +445,7 @@ s32 PresentExecModeGet(omObjData *object)
return work->execMode;
}
static const s32 roomIdxTbl[NUM_CHARACTERS] = {
static const s32 roomIdxTbl[CHARACTERS_MAX] = {
ROOM_MARIO,
ROOM_LUIGI,
ROOM_PEACH,
@ -869,7 +869,7 @@ static BOOL CameraRotationDoneCheck(omObjData *object)
return work->timeRot < 1.0f;
}
s32 roomIdxTbl2[NUM_CHARACTERS] = {
s32 roomIdxTbl2[CHARACTERS_MAX] = {
ROOM_MARIO,
ROOM_LUIGI,
ROOM_PEACH,
@ -888,7 +888,7 @@ static void ShowHidePresents(omObjData *object)
Hu3DModelAttrReset(work->object[0]->model[0], HU3D_ATTR_DISPOFF);
for (character = 0; character < NUM_CHARACTERS; character++) {
for (character = 0; character < CHARACTERS_MAX; character++) {
s32 j;
if (UnlockedPresents(object, roomIdxTbl2[character]) > 0) {
Hu3DModelAttrReset(work->object[character + 109]->model[0], HU3D_ATTR_DISPOFF);
@ -916,7 +916,7 @@ static void ShowHidePresents(omObjData *object)
if (PresentUnlocked(object, ROOM_TROPHY, 0)) {
Hu3DModelAttrReset(work->object[1]->model[0], HU3D_ATTR_DISPOFF);
}
for (i = 0; i < NUM_CHARACTERS; i++) {
for (i = 0; i < CHARACTERS_MAX; i++) {
if (PresentUnlocked(object, roomIdxTbl2[i], PRESENT_CONSTELLATION)) {
Hu3DModelAttrReset(work->object[i + 126]->model[0], HU3D_ATTR_DISPOFF);
}