CDummy::SelectNewTrack

This commit is contained in:
krystalgamer 2024-06-09 17:36:49 +02:00
parent e6b12df629
commit 3fe91b888d
4 changed files with 87 additions and 6 deletions

5
ob.cpp
View File

@ -528,7 +528,10 @@ void CSuper::ApplyPose(__int16 *a2){
// @NotOk
// slightly different register allocation
// relies on global Animations
void CSuper::RunAnim(__int16 a2, int a3, int a4)
void CSuper::RunAnim(
i32 a2,
i32 a3,
i32 a4)
{
int mRegion; // ecx
unsigned __int16 v6; // dx

2
ob.h
View File

@ -164,7 +164,7 @@ public:
EXPORT void UpdateFrame(void);
EXPORT void CycleAnim(int a2, char a3);
EXPORT void ApplyPose(__int16 *a2);
EXPORT void RunAnim(__int16, int, int);
EXPORT void RunAnim(i32, i32, i32);
int field_F4;

View File

@ -1,7 +1,63 @@
#pragma once
#include "shell.h"
#include "validate.h"
#include "ps2m3d.h"
#include "utils.h"
// @Ok
void CDummy::SelectNewTrack(int a2)
{
this->field_1B8 = 0;
this->field_1BC = 0;
if (this->field_1A4 || this->field_1A8 || this->field_1AC)
{
do
{
switch(Rnd(3))
{
case 0:
this->field_1B8 = this->field_1A4;
break;
case 1:
this->field_1B8 = this->field_1A8;
break;
case 2:
this->field_1B8 = this->field_1AC;
break;
}
}
while(!this->field_1B8);
print_if_false(*this->field_1B8 != 0xFFFF, "First anim must not be 0xFFFF");
if (a2)
{
u16 *v7 = this->field_1B8;
i32 i = 0;
for (i = 0; *v7 != 0xFFFF; i++)
v7++;
i32 v9 = 0;
i32 v10;
do
{
v10 = Rnd(i);
v9++;
}
while (this->field_1B8[v10] == this->field_12A && v9 < 100);
if (this->field_1B8[v10] != this->field_12A)
this->field_1B8 = &this->field_1B8[v10];
}
this->field_1BC = this->field_1B8;
this->RunAnim(*this->field_1BC, 0, -1);
}
else
{
this->RunAnim(this->field_1C0, 0, -1);
}
}
// @Ok
void __inline CDummy::FadeAway(void)
@ -47,6 +103,7 @@ void CShellMysterioHeadGlow::Move(void)
this->field_54 += this->field_A4;
}
// @Ok
void Spidey_CIcon::AI(void)
{
this->mAngles.vy += 50;
@ -64,6 +121,13 @@ void validate_CRudeWordHitterSpidey(void){
void validate_CDummy(void){
VALIDATE_SIZE(CDummy, 0xA18);
VALIDATE(CDummy, field_1A4, 0x1A4);
VALIDATE(CDummy, field_1A8, 0x1A8);
VALIDATE(CDummy, field_1AC, 0x1AC);
VALIDATE(CDummy, field_1B8, 0x1B8);
VALIDATE(CDummy, field_1BC, 0x1BC);
VALIDATE(CDummy, field_1C0, 0x1C0);
VALIDATE(CDummy, field_1F8, 0x1F8);
VALIDATE(CDummy, field_1FC, 0x1FC);

20
shell.h
View File

@ -38,10 +38,24 @@ class CDummy : public CSuper {
public:
EXPORT void FadeBack(void);
EXPORT void FadeAway(void);
unsigned char padStart[0x1F8-0x194];
EXPORT void SelectNewTrack(int);
unsigned char padStart[0x1A4-0x194];
int field_1F8;
int field_1FC;
u16 *field_1A4;
u16 *field_1A8;
u16 *field_1AC;
u8 padAfter1AC[0x1B8-0x1AC-4];
u16 *field_1B8;
u16 *field_1BC;
i32 field_1C0;
u8 padAfter1BC[0x1F8-0x1C0-4];
i32 field_1F8;
i32 field_1FC;
unsigned char padAfter1FC[0x240-0x1FC-4];
CItem field_240;