Skip to content

Commit 5a46003

Browse files
committed
CRhino::PlayXAPlease
1 parent 5fbb6f0 commit 5a46003

File tree

3 files changed

+62
-8
lines changed

3 files changed

+62
-8
lines changed

main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// #define BOOT_GAME
44
#define MODEL_PREVIEW
55

6-
// #define LOCK_VALIDATION
6+
#define LOCK_VALIDATION
77

88

99
#include "main.h"

rhino.cpp

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "ps2pad.h"
66
#include "spidey.h"
77
#include "ps2lowsfx.h"
8+
#include "ps2redbook.h"
89
#include "camera.h"
910
#include "ai.h"
1011
#include "my_assert.h"
@@ -293,10 +294,57 @@ void CRhino::PlaySounds(void)
293294
printf("CRhino::PlaySounds(void)");
294295
}
295296

296-
// @SMALLTODO
297-
void CRhino::PlayXAPlease(i32,i32,i32)
297+
// @Ok
298+
// @AlmostMatching: slightly diff code gen
299+
void CRhino::PlayXAPlease(
300+
i32 a2,
301+
i32 a3,
302+
i32 a4)
298303
{
299-
printf("CRhino::PlayXAPlease(i32,i32,i32)");
304+
i32 v5 = Rnd(a3 + a4);
305+
i32 v6 = this->field_3DC;
306+
307+
if (v5 < a3)
308+
{
309+
if (a3 > 1)
310+
{
311+
if ( ((v6 >> a2) & (1 << v5)) != 0 && ++v5 >= a3 )
312+
{
313+
v5 = 0;
314+
}
315+
316+
for (i32 i = 0; i < a3; i++)
317+
{
318+
v6 &= ~(1 << (i + a2));
319+
}
320+
321+
v6 |= 1 << (v5 + a2);
322+
}
323+
324+
i32 v8 = a2 + v5;
325+
if ( gRhinoData[v8].field_4 )
326+
{
327+
if (Redbook_XAPlayPos(
328+
gRhinoData[v8].field_0,
329+
gRhinoData[v8].field_2,
330+
&this->mPos,
331+
gRhinoData[v8].field_6) )
332+
333+
{
334+
this->AttachXA(gRhinoData[v8].field_0, gRhinoData[v8].field_2);
335+
this->field_3DC = v6;
336+
}
337+
}
338+
else if (MechList->CanITalkRightNow() && Redbook_XAPlayPos(
339+
gRhinoData[v8].field_0,
340+
gRhinoData[v8].field_2,
341+
&MechList->mPos,
342+
gRhinoData[v8].field_6) )
343+
{
344+
MechList->AttachXA(gRhinoData[v8].field_0, gRhinoData[v8].field_2);
345+
this->field_3DC = v6;
346+
}
347+
}
300348
}
301349

302350
// @MEDIUMTODO
@@ -771,6 +819,7 @@ void validate_CRhino(void){
771819
VALIDATE(CRhino, field_358, 0x358);
772820
VALIDATE(CRhino, field_388, 0x388);
773821

822+
VALIDATE(CRhino, field_3DC, 0x3DC);
774823
VALIDATE(CRhino, field_3E0, 0x3E0);
775824
VALIDATE(CRhino, field_3E4, 0x3E4);
776825
VALIDATE(CRhino, field_3F8, 0x3F8);
@@ -789,5 +838,8 @@ void validate_SRhinoData(void)
789838
VALIDATE(SRhinoData, field_0, 0x0);
790839
VALIDATE(SRhinoData, field_2, 0x2);
791840

841+
VALIDATE(SRhinoData, field_4, 0x4);
842+
VALIDATE(SRhinoData, field_6, 0x6);
843+
792844
VALIDATE(SRhinoData, field_8, 0x8);
793845
}

rhino.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99

1010
struct SRhinoData
1111
{
12-
u16 field_0;
13-
u16 field_2;
12+
i16 field_0;
13+
i16 field_2;
1414

15-
PADDING(4);
15+
u16 field_4;
16+
i16 field_6;
1617

1718
i32 field_8;
1819
};
@@ -68,8 +69,9 @@ class CRhino : public CBaddy {
6869

6970
i32 field_388;
7071

71-
PADDING(0x3E0-0x388-4);
72+
PADDING(0x3DC-0x388-4);
7273

74+
i32 field_3DC;
7375
u32 field_3E0;
7476
u32 field_3E4[5];
7577
u32 field_3F8[5];

0 commit comments

Comments
 (0)