Skip to content

Commit

Permalink
Various Changes (#235)
Browse files Browse the repository at this point in the history
  • Loading branch information
ieee802dot11ac authored Jun 1, 2024
1 parent 2e1c3f6 commit de63ea7
Show file tree
Hide file tree
Showing 16 changed files with 205 additions and 44 deletions.
2 changes: 1 addition & 1 deletion config/SZBE69_B8/objects.json
Original file line number Diff line number Diff line change
Expand Up @@ -371,7 +371,7 @@
"system/rndobj/Rnd.cpp": "NonMatching",
"system/rndobj/ScreenMask.cpp": "NonMatching",
"system/rndobj/ShaderOptions.cpp": "Matching",
"system/rndobj/SIVideo.cpp": "NonMatching",
"system/rndobj/SIVideo.cpp": "Matching",
"system/rndobj/SoftParticles.cpp": "Matching",
"system/rndobj/Tex.cpp": "NonMatching",
"system/rndobj/TexBlendController.cpp": "NonMatching",
Expand Down
24 changes: 22 additions & 2 deletions src/system/bandobj/NoteTube.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "NoteTube.h"
#include "obj/Object.h"
#include "os/Debug.h"
#include "decomp.h"

NoteTube::NoteTube() : unk_0x1C(false), unk_0x20(-1), unk_0x24(false), mGlowLevel(-1), unk_0x2C(0), unk_0x2D(0),
unk_0x30(0), unk_0x34(0), unk_0x38(0), unk_0x3C(0), unk_0x40(0), unk_0x44(0), unk_0x48(0), unk_0x4C(0),
Expand All @@ -12,12 +14,30 @@ void NoteTube::SetNumPoints(int i) {

void NoteTube::SetPointPos(int i, Vector3 v) {
if (i < mPoints.size() ) mPoints[i] = v;
else MILO_WARN("note tube has too few points");
else MILO_WARN("note tube has too few points\n");

return;
}

DECOMP_FORCEACTIVE(NoteTube, "point pos query out of bounds\n")

void NoteTube::SetGlowLevel(int i) {
mGlowLevel = 3 - i;
MILO_ASSERT(( 0) <= (mGlowLevel) && (mGlowLevel) < ( NumGlowLevels()), 73);
}
}

void NoteTube::BakePlates() {
if (unk_0x44) unk_0x44->Bake();
if (unk_0x48) unk_0x48->Bake();
}


TubePlate::TubePlate(int i) : unk_0x0(Hmx::Object::New<RndMesh>()), unk_0x4(0), unk_0x8(i),
unk_0xC(3.40282346638528859812e38), unk_0x10(0), unk_0x14(0), unk_0x18(3.40282346638528859812e38),
unk_0x1C(3.40282346638528859812e38), unk_0x20(0), unk_0x24(0) {
unk_0x0->mOwner->mVerts.reserve(unk_0x8, true);
unk_0x0->mOwner->mFaces.reserve(unk_0x8); // evil regswap
Reset();
}

TubePlate::~TubePlate() { delete unk_0x0; unk_0x0 = 0; } // why bother setting it to 0 in the dtor...?
21 changes: 20 additions & 1 deletion src/system/bandobj/NoteTube.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
#ifndef BANDOBJ_NOTETUBE_H
#define BANDOBJ_NOTETUBE_H

#include "rndobj/Mesh.h"
#include "obj/Object.h"
#include <vector>

class TubePlate {
public:
TubePlate(int);
~TubePlate();
void Bake();
void Reset();

RndMesh* unk_0x0;
u32 unk_0x4, unk_0x8;
f32 unk_0xC, unk_0x10;
u8 unk_0x14;
f32 unk_0x18, unk_0x1C, unk_0x20;
u8 unk_0x24;
};

class NoteTube : public Hmx::Object {
public:
NoteTube();
Expand All @@ -15,7 +31,9 @@ class NoteTube : public Hmx::Object {
int mGlowLevel;
u8 unk_0x2C, unk_0x2D;
float unk_0x30, unk_0x34, unk_0x38;
u32 unk_0x3C, unk_0x40, unk_0x44, unk_0x48, unk_0x4C, unk_0x50;
u32 unk_0x3C, unk_0x40;
TubePlate* unk_0x44, *unk_0x48;
u32 unk_0x4C, unk_0x50;
float unk_0x54;
std::vector<Vector3> mPoints;
float unk_0x60;
Expand All @@ -24,6 +42,7 @@ class NoteTube : public Hmx::Object {
void SetPointPos(int, Vector3);
void SetGlowLevel(int);
int NumGlowLevels() const { return 4; }
void BakePlates();
};

#endif // BANDOBJ_NOTETUBE_H
2 changes: 1 addition & 1 deletion src/system/math/strips/Striper.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
DFaces = null;
WFaces = null;
NbFaces = 0;
AskForWords = true;
//AskForWords = true;
OneSided = true;
SGIAlgorithm = true;
ConnectAllStrips = false;
Expand Down
21 changes: 21 additions & 0 deletions src/system/rndobj/Cam.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#include "rndobj/Cam.h"
#include "obj/ObjMacros.h"
#include "obj/ObjPtr_p.h"
#include "obj/Object.h"
#include "os/Debug.h"
#include "rndobj/Draw.h"
#include "rndobj/Trans.h"
#include "rndobj/Utl.h"
Expand Down Expand Up @@ -73,6 +75,19 @@ RndCam::~RndCam(){
if(sCurrent == this) sCurrent = 0;
}

void RndCam::SetFrustum(float f1, float f2, float f3, float f4) {
if (f2 - 0.0001f > f1 * 1000) {
static DebugNotifyOncer _dw;
const char* s = MakeString("%s: %f/%f plane ratio exceeds 1000", mName, f2, f1);
if (::AddToNotifies(s, _dw.mNotifies))
TheDebugNotifier << s;
if (f2 == mFarPlane) f1 = f2 / 1000;
if (f2 != mFarPlane) f2 = f1 * 1000;
}
mNearPlane = f1; mFarPlane = f2; mYFov = f3; mUnknownFloat = f4;
UpdateLocal();
}

BEGIN_HANDLERS(RndCam)
HANDLE(set_frustum, OnSetFrustum)
HANDLE(set_z_range, OnSetZRange)
Expand All @@ -95,6 +110,10 @@ DataNode RndCam::OnSetFrustum(const DataArray* da){
return DataNode(0);
}

void RndCam::UpdateLocal() {

}

DataNode RndCam::OnSetZRange(const DataArray* da){
mZRange.Set(da->Float(2), da->Float(3));
return DataNode(0);
Expand All @@ -111,6 +130,8 @@ DataNode RndCam::OnFarPlane(const DataArray*){
}

BEGIN_PROPSYNCS(RndCam)
//SYNC_SUPERCLASS(RndTransformable)
SYNC_PROP_ACTION(near_plane, mNearPlane, 0x11, )
SYNC_PROP(z_range, mZRange)
SYNC_PROP_ACTION(screen_rect, mScreenRect, 0x11, UpdateLocal())
END_PROPSYNCS
8 changes: 7 additions & 1 deletion src/system/rndobj/Font.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@
#define RNDOBJ_FONT_H

#include "obj/Object.h"
#include "utl/MemMgr.h"

class RndFont : public Hmx::Object {
class RndFont : public Hmx::Object { // 0x84
public:
RndFont();
OBJ_CLASSNAME(RndFont)
NEW_OBJ(RndFont)

NEW_OVERLOAD
};

#endif // RNDOBJ_FONT_H
1 change: 1 addition & 0 deletions src/system/rndobj/HiResScreen.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class HiResScreen {
int GetPaddingX() const; int GetPaddingY() const;
Hmx::Rect CurrentTileRect(const Hmx::Rect&, Hmx::Rect&, Hmx::Rect&) const;
Hmx::Rect ScreenRect(const RndCam*, const Hmx::Rect&) const; Hmx::Rect ScreenRect() const;
void InvScreenRect() const;

bool mActive; // 0x4
int mTiling; // 0x8
Expand Down
56 changes: 55 additions & 1 deletion src/system/rndobj/Mesh.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
#include "Mesh.h"
#include "decomp.h"
#include "math/strips/Striper.h"
#include "obj/ObjPtr_p.h"
#include "obj/Object.h"
#include "os/Debug.h"
Expand All @@ -14,10 +16,20 @@ INIT_REVS(RndMesh)

int RndMesh::MaxBones() { return MAX_BONES; }

// DECOMP_FORCEFUNC(Mesh, ObjVector<RndBone>, resize(3)) TODO figure out why this is a nothing burger

bool RndMesh::IsSkinned() const { return mBones.size(); }

void RndMesh::SetMat(RndMat* m) { mMat = m; }

void RndMesh::SetGeomOwner(RndMesh* m) {MILO_ASSERT(m, 487); mOwner = m;}

void RndMesh::ScaleBones(float f) {
for (std::vector<RndBone>::iterator it = mBones.begin(); it != mBones.end(); it++) {
it->mOffset.v *= f;
}
}

RndMesh::RndMesh() : mMat(this, NULL), mOwner(this, this), mBones(this),
unk_0xF0(0), unk_0xF4(1), unk_0xF8(0), unk_0xFC(0), unk_0x108(0), unk_0x10C(0), unk_0x110(0), unk_0x114(0),
unk_0x118(0), unk_0x11C(0) {
Expand All @@ -27,7 +39,12 @@ RndMesh::RndMesh() : mMat(this, NULL), mOwner(this, this), mBones(this),
unk9p3 = false;
}

RndMesh::~RndMesh() { delete unk_0x11C; delete unk_0xF8; }
RndMesh::~RndMesh() {
delete unk_0x11C; unk_0x11C = NULL;
delete unk_0xF8; unk_0xF8 = NULL;
delete unk_0xFC; unk_0xFC = NULL; ClearCompressedVerts();

}

RndMesh::Vert::Vert() : x(0), y(0), z(0), nx(0), ny(1), nz(0), why(),
unk_0x20(-1), u(0), v(0), unk_0x2C(0), unk_0x2E(0), unk_0x30(0), unk_0x32(0) {}
Expand Down Expand Up @@ -60,6 +77,37 @@ RndMultiMesh* RndMesh::CreateMultiMesh() {
return m->unk_0xFC;
}

BinStream& operator>>(BinStream& bs, STRIPERRESULT& sr) {
bs >> sr.NbStrips;
int runs; bs >> runs;
sr.AllocLengthsAndRuns(sr.NbStrips, runs);
bs.Read(sr.StripLengths, sr.NbStrips * 4);
bs.Read(sr.StripRuns, runs * 2);

return bs;
}

bool RndMesh::CacheStrips(BinStream& bs) {
bool ret = false;
if (bs.Cached() && bs.GetPlatform() == kPlatformWii && mOwner.mPtr == this && mFaces.size() != 0
&& mVerts.size() != 0 && !(unk_0xF0 & 0x20)) ret = true;
return ret;
}

void RndMesh::CreateStrip(int i, int j, Striper& striper, STRIPERRESULT& sr, bool onesided) {
STRIPERCREATE sc;
sc.WFaces = &mFaces[i].idx0;
sc.NbFaces = j;
sc.ConnectAllStrips = false;
sc.OneSided = onesided;
sc.SGIAlgorithm = false;
MILO_ASSERT(striper.Init(sc), 1115);
MILO_ASSERT(striper.Compute(sr), 1116);
for (int i = 1; i < sr.NbStrips; i++) {
sr.NbStrips += sr.StripLengths[i];
}
}

SAVE_OBJ(RndMesh, 1135)

void RndMesh::Load(BinStream& bs) {
Expand Down Expand Up @@ -205,6 +253,12 @@ void RndMesh::Sync(int i) {
OnSync(unk9p1 ? i | 0x200 : i);
}

void RndMesh::ClearCompressedVerts() {
delete unk_0x114;
unk_0x114 = NULL;
unk_0x118 = 0;
}

#pragma dont_inline on
BEGIN_HANDLERS(RndMesh)
HANDLE(compare_edge_verts, OnCompareEdgeVerts)
Expand Down
28 changes: 19 additions & 9 deletions src/system/rndobj/Mesh.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
#ifndef RNDOBJ_MESH_H
#define RNDOBJ_MESH_H
#include "math/Bsp.h"
#include "math/strips/StdAfx.h"
#include "math/Vec.h"
#include "obj/Dir.h"
#include "obj/ObjPtr_p.h"
#include "obj/ObjVector.h"
#include "obj/Object.h"
#include "rndobj/Draw.h"
#include "rndobj/Mat.h"
#include "rndobj/Trans.h"
Expand Down Expand Up @@ -49,8 +51,10 @@ class RndMesh : public RndDrawable, public RndTransformable {
kVolumeBox
};

class VertVector : public std::vector<Vert, s32> {
class VertVector : public std::vector<Vert, s32> { // ???????
public:
void resize(int, bool);
void reserve(int, bool);
std::vector<Vert>::iterator begin() { return std::vector<Vert, s32>::begin(); }
std::vector<Vert>::iterator end() { return std::vector<Vert, s32>::end(); }
};
Expand Down Expand Up @@ -87,29 +91,35 @@ class RndMesh : public RndDrawable, public RndTransformable {
ObjPtr<RndMat, class ObjectDir> mMat; // 0xC4
std::vector<u8, u16> unk_0xD0; // ???
ObjOwnerPtr<RndMesh, class ObjectDir> mOwner; // 0xD8
ObjVector<RndBone> mBones;
ObjVector<RndBone> mBones; // 0xe4
int unk_0xF0, unk_0xF4;
BSPNode* unk_0xF8;
RndMultiMesh* unk_0xFC; // ...why?
std::vector<int> unk_0x100;
std::vector<STRIPERRESULT> unk_0x100;
int unk_0x108, unk_0x10C;
u8 unk_0x110;
int unk_0x114, unk_0x118;
int* unk_0x114, unk_0x118;
FileLoader* unk_0x11C;

int NumBones() const;
bool IsSkinned() const;
void SetMat(RndMat*);
int EstimatedSizeKb() const;
bool CacheStrips(BinStream&);
void ClearCompressedVerts();
void CopyBones(const RndMesh*);
void CopyGeometryFromOwner();
RndMultiMesh* CreateMultiMesh();
void CreateStrip(int, int, Striper&, STRIPERRESULT&, bool);
int EstimatedSizeKb() const;
bool IsSkinned() const;
int NumBones() const;
void PreLoadVertices(BinStream&);
void PostLoadVertices(BinStream&);
void RemoveInvalidBones();
void ScaleBones(float);
void SetMat(RndMat*);
void SetGeomOwner(RndMesh*);
void Sync(int);
RndMultiMesh* CreateMultiMesh();

DECLARE_REVS
NEW_OBJ(RndMesh)

DataNode OnCompareEdgeVerts(const DataArray*);
DataNode OnAttachMesh(const DataArray*);
Expand Down
6 changes: 3 additions & 3 deletions src/system/rndobj/Rnd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ static DataNode FailRestartConsole(DataArray*) {
void Rnd::ShowConsole(bool b) { mConsole->SetShowing(b); }
bool Rnd::ConsoleShowing() { return mConsole->mShowing; }

Rnd::Rnd() : unk_0x20(0.3), unk_0x24(0.3), unk_0x28(0.3), unk_0x2C(1), mWidth(640), mHeight(480),
mDraws(this, kObjListNoNull) {}
Rnd::Rnd() : mColor(0.3, 0.3, 0.3, 1), mWidth(640), mHeight(480), mDraws(this, kObjListNoNull) {}

float Rnd::YRatio() {
static const float kRatio[4] = {1.0f, 0.75f, 0.5625f, 0.5625f}; // qualifiers :)
Expand All @@ -77,6 +76,7 @@ void Rnd::PreInit() {
DataArray* rndcfg = SystemConfig("rnd");
rndcfg->FindData("bpp", mScreenBpp, false);
MILO_ASSERT((mScreenBpp == 16) || (mScreenBpp == 32), 575);
SetupFont();
RndGraph::Init();
Hmx::Object::RegisterFactory(DOFProc::StaticClassName(), DOFProc::NewObject);
RndTransformable::Init();
Expand Down Expand Up @@ -104,7 +104,7 @@ void Rnd::PreInit() {
Hmx::Object::RegisterFactory(RndTransformable::StaticClassName(), RndTransformable::NewObject); // ?
Hmx::Object::RegisterFactory(RndGroup::StaticClassName(), RndGroup::NewObject);
Hmx::Object::RegisterFactory(RndDir::StaticClassName(), RndDir::NewObject);
mConsole = new (_PoolAlloc(0x58, 0x58, FastPool)) RndConsole;
mConsole = new RndConsole;
DataRegisterFunc("keep_going", FailKeepGoing);
DataRegisterFunc("restart_console", FailRestartConsole);
}
Expand Down
2 changes: 2 additions & 0 deletions src/system/rndobj/Rnd.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class Rnd : public Hmx::Object, public RndOverlay::Callback { // there's some mu

RndOverlay* unk_0x70, *unk_0x74, *unk_0x78;
RndConsole* mConsole; // 0x80
int unk_0x84, unk_0x88, unk_0x8C;

int mAspectRatio; // 0xE0
int unk_0xE4;
Expand All @@ -54,6 +55,7 @@ class Rnd : public Hmx::Object, public RndOverlay::Callback { // there's some mu
float DrawTimers(float);
float YRatio();
void Modal(bool&, char*, bool);
void SetupFont();

DataNode OnScreenDump(const DataArray*);
DataNode OnScreenDumpUnique(const DataArray*);
Expand Down
Loading

0 comments on commit de63ea7

Please sign in to comment.