Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions config/RSBE01_02/rels/st_mansion/splits.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,26 @@ global_destructor_chain.c:
.dtors start:0x00000000 end:0x00000008
.bss start:0x00000000 end:0x00000004

mo_stage/st_mansion/gr_mansion.cpp:
.text start:0x00001670 end:0x00001A5C
.data start:0x00000630 end:0x00000AE0
.rodata start:0x00000040 end:0x00000044

mo_stage/st_mansion/gr_mansion_area_up.cpp:
.text start:0x0000A104 end:0x0000A590
.data start:0x000024D8 end:0x00002738
.rodata start:0x000000B8 end:0x000000CC

mo_stage/st_mansion/gr_mansion_area_down.cpp:
.text start:0x0000A590 end:0x0000AA78
.data start:0x00002738 end:0x00002998
.rodata start:0x000000D0 end:0x000000E4

mo_stage/st_mansion/gr_mansion_area_break.cpp:
.text start:0x0000AA78 end:0x0000AD50
.data start:0x00002998 end:0x00002BE0
.rodata start:0x000000E8 end:0x000000EC

mo_stage/mo_stage.cpp:
.text start:0x0000CC28 end:0x0000CCC4
.data start:0x00003060 end:0x0000306D
Expand Down
180 changes: 94 additions & 86 deletions config/RSBE01_02/rels/st_mansion/symbols.txt

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion config/RSBE01_02/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4189,7 +4189,7 @@ fn_8009D468 = .text:0x8009D468; // type:function size:0xFC
fn_8009D564 = .text:0x8009D564; // type:function size:0x1E0
fn_8009D744 = .text:0x8009D744; // type:function size:0x2D4
fn_8009DA18 = .text:0x8009DA18; // type:function size:0x178
cmReqQuake__FiP5Vec3f = .text:0x8009DB90; // type:function size:0x1B0
cmReqQuake__FQ27cmQuake9AmplitudeP5Vec3f = .text:0x8009DB90; // type:function size:0x1B0
cmRemoveQuake__Fi = .text:0x8009DD40; // type:function size:0x1A8
fn_8009DEE8 = .text:0x8009DEE8; // type:function size:0x1A8
fn_8009E090 = .text:0x8009E090; // type:function size:0x1AC
Expand Down
7 changes: 6 additions & 1 deletion configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -1266,7 +1266,12 @@ def MatchingFor(*versions):
"mw_version": config.linker_version,
"cflags": cflags_rel,
"host": False,
"objects": [],
"objects": [
Object(Matching, "mo_stage/st_mansion/gr_mansion.cpp"),
Object(Matching, "mo_stage/st_mansion/gr_mansion_area_up.cpp"),
Object(Matching, "mo_stage/st_mansion/gr_mansion_area_down.cpp"),
Object(Matching, "mo_stage/st_mansion/gr_mansion_area_break.cpp"),
],
},
{
"lib": "st_mariopast",
Expand Down
15 changes: 15 additions & 0 deletions include/st_mansion/gr_mansion.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#pragma once

#include <gr/gr_yakumono.h>

class grMansion : public grYakumono {
protected:
u8 unk150;
float unk154;

public:
static grMansion* create(int modelIndex, const char* nodeName, const char* taskName);
grMansion(const char* taskName);
virtual ~grMansion();
};
static_assert(sizeof(grMansion) == 0x158, "Class is wrong size!");
40 changes: 40 additions & 0 deletions include/st_mansion/gr_mansion_area.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#pragma once

#include <mt/mt_vector.h>
#include <snd/snd_3d_generator.h>

#include <st_mansion/gr_mansion.h>

class grMansionArea : public grMansion {
protected:
Vec3f* unk158;
u8* unk15C;
u8* unk160;
float* unk164;
float unk168;
u8 unk16C;
u8 unk16D;
u8 unk16E;
u32 unk170;
u8 unk174;
float unk178;
snd3DGenerator unk17C;

public:
grMansionArea(const char* taskName);
virtual ~grMansionArea();
virtual void processAnim();
virtual void update(float deltaFrame);
virtual void updateDestroy(float deltaFrame);
virtual void updateCallBack(float deltaFrame);
virtual void setMotion(u32 index, bool loop, bool force, float* frameCount);
virtual void setPillarNode(u32 nodeIndex) { unk170 = nodeIndex; }
virtual void setPosWork(Vec3f* position) { unk158 = position; }
virtual void setStateWork(u8* state) { unk15C = state; }
virtual void setStateSubWork(u8* state) { unk160 = state; }
virtual void setScaleRateWork(float* rate) { unk164 = rate; }
virtual void setType(u8 type) { unk16D = type; }
virtual void setTypeLR(u8 type) { unk16E = type; }
virtual void setScaleRateFlg(u8 flag) { unk16C = flag; }
};
static_assert(sizeof(grMansionArea) == 0x184, "Class is wrong size!");
33 changes: 33 additions & 0 deletions include/st_mansion/gr_mansion_area_break.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#pragma once

#include <st_mansion/gr_mansion_area.h>

class grMansionAreaBreak : public grMansionArea {
private:
enum State { // Name unknown
State_0 = 0,
State_2 = 2,
State_4 = 4
};
enum WorkState { // Name unknown
WorkState_0 = 0,
WorkState_2 = 2,
WorkState_3 = 3,
WorkState_4 = 4
};
enum Type { // Name unknown
Type_2 = 2,
Type_3 = 3
};
enum SubState { // Name unknown
SubState_1 = 1,
SubState_2 = 2,
SubState_3 = 3
};

public:
static grMansionAreaBreak* create(int modelIndex, const char* nodeName, const char* taskName);
grMansionAreaBreak(const char* taskName) : grMansionArea(taskName) { }
virtual ~grMansionAreaBreak();
virtual void updateDestroy(float deltaFrame);
};
31 changes: 31 additions & 0 deletions include/st_mansion/gr_mansion_area_down.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#pragma once

#include <st_mansion/gr_mansion_area.h>

class grMansionAreaDown : public grMansionArea {
private:
enum State { // Name unknown
State_0 = 0,
State_2 = 2,
State_3 = 3,
State_4 = 4,
State_5 = 5,
State_6 = 6
};
enum WorkState { // Name unknown
WorkState_0 = 0,
WorkState_1 = 1,
WorkState_2 = 2,
WorkState_4 = 4
};
enum TypeLR { // Name unknown
TypeLR_0 = 0,
TypeLR_1 = 1
};

public:
static grMansionAreaDown* create(int modelIndex, const char* nodeName, const char* taskName);
grMansionAreaDown(const char* taskName) : grMansionArea(taskName) { }
virtual ~grMansionAreaDown();
virtual void updateDestroy(float deltaFrame);
};
31 changes: 31 additions & 0 deletions include/st_mansion/gr_mansion_area_up.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#pragma once

#include <st_mansion/gr_mansion_area.h>

class grMansionAreaUp : public grMansionArea {
private:
enum State { // Name unknown
State_0 = 0,
State_2 = 2,
State_3 = 3,
State_4 = 4,
State_5 = 5,
State_6 = 6
};
enum WorkState { // Name unknown
WorkState_0 = 0,
WorkState_1 = 1,
WorkState_2 = 2,
WorkState_4 = 4
};
enum TypeLR { // Name unknown
TypeLR_0 = 0,
TypeLR_1 = 1
};

public:
static grMansionAreaUp* create(int modelIndex, const char* nodeName, const char* taskName);
grMansionAreaUp(const char* taskName) : grMansionArea(taskName) { }
virtual ~grMansionAreaUp();
virtual void updateDestroy(float deltaFrame);
};
17 changes: 17 additions & 0 deletions include/st_mansion/gr_mansion_ground.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#include <mt/mt_vector.h>
#include <st_mansion/gr_mansion.h>

class grMansionGround : public grMansion {
private:
Vec3f* unk158;

public:
static grMansionGround* create(int modelIndex, const char* nodeName, const char* taskName);
grMansionGround(const char* taskName) : grMansion(taskName), unk158(nullptr) { }
virtual ~grMansionGround();
virtual void processAnim();
virtual void setPosGimmickWork(Vec3f* positions) { unk158 = positions; }
};
static_assert(sizeof(grMansionGround) == 0x15C, "Class is wrong size!");
38 changes: 38 additions & 0 deletions src/mo_stage/st_mansion/gr_mansion.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include <memory.h>
#include <st_mansion/gr_mansion_ground.h>

#include <st_mansion/gr_mansion.h>

grMansion* grMansion::create(int modelIndex, const char* nodeName, const char* taskName) {
grMansion* ground = new (Heaps::StageInstance) grMansion(taskName);
if (ground != nullptr) {
ground->setMdlIndex(modelIndex);
ground->setTgtNode(nodeName);
}
return ground;
}

grMansion::grMansion(const char* taskName) : grYakumono(taskName), unk150(0), unk154(0.0f) {
setupMelee();
}

grMansion::~grMansion() { }

grMansionGround* grMansionGround::create(int modelIndex, const char* nodeName, const char* taskName) {
grMansionGround* ground = new (Heaps::StageInstance) grMansionGround(taskName);
if (ground != nullptr) {
ground->setMdlIndex(modelIndex);
ground->setTgtNode(nodeName);
}
return ground;
}

grMansionGround::~grMansionGround() { }

void grMansionGround::processAnim() {
Ground::processAnim();
if (unk158 != nullptr) {
getNodePosition(&unk158[0], 0, "FrontLocator_L");
getNodePosition(&unk158[1], 0, "FrontLocator_R");
}
}
70 changes: 70 additions & 0 deletions src/mo_stage/st_mansion/gr_mansion_area_break.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#include <memory.h>

#include <st_mansion/gr_mansion_area_break.h>

grMansionAreaBreak* grMansionAreaBreak::create(int modelIndex, const char* nodeName, const char* taskName) {
grMansionAreaBreak* ground = new (Heaps::StageInstance) grMansionAreaBreak(taskName);
if (ground != nullptr) {
ground->setMdlIndex(modelIndex);
ground->setTgtNode(nodeName);
}
return ground;
}

grMansionAreaBreak::~grMansionAreaBreak() { }

void grMansionAreaBreak::updateDestroy(float deltaFrame) {
unk154 -= deltaFrame;
if (unk154 < 0.0f) {
unk154 = 0.0f;
}
switch (unk150) {
case State_0:
setVisibility(false);
unk150 = State_2;
break;
case State_2:
if (*unk15C == WorkState_2) {
switch (unk16D) {
case Type_3:
setVisibility(false);
break;
case Type_2:
setVisibility(true);
break;
}
unk150 = State_4;
}
break;
case State_4:
if (*unk15C == WorkState_3) {
switch (unk16D) {
case Type_3:
setVisibility(true);
break;
case Type_2:
setVisibility(false);
break;
}
} else if (*unk15C == WorkState_2) {
switch (unk16D) {
case Type_2:
switch (*unk160) {
case SubState_1:
case SubState_2:
case SubState_3:
break;
default:
setMotionFrame(0.0f, 0);
break;
}
break;
}
} else if (*unk15C == WorkState_4) {
// The original explicitly leaves this state unchanged.
} else if (*unk15C == WorkState_0) {
unk150 = State_0;
}
break;
}
}
Loading