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}
0 commit comments