summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xinclude/game.h2
-rw-r--r--kamek_ntsc.x6
-rw-r--r--kamek_ntsc2.x6
-rw-r--r--kamek_pal2.x6
-rwxr-xr-xsrc/mrsun.cpp52
5 files changed, 50 insertions, 22 deletions
diff --git a/include/game.h b/include/game.h
index 93d8ae1..d16a09f 100755
--- a/include/game.h
+++ b/include/game.h
@@ -335,6 +335,8 @@ class mMtx {
Mtx data;
public:
+ mMtx() { }
+
mMtx(float _00, float _01, float _02, float _03,
float _10, float _11, float _12, float _13,
float _20, float _21, float _22, float _23);
diff --git a/kamek_ntsc.x b/kamek_ntsc.x
index 5f7042a..19cdb33 100644
--- a/kamek_ntsc.x
+++ b/kamek_ntsc.x
@@ -23,10 +23,12 @@ SECTIONS {
/* Mr Sun Related */
- BubbleModel = 0x809D0CA0;
- BubbleDraw = 0x809D0830;
ActivePhysics_InitWithStruct = 0x8008C3E0;
ActivePhysics_AddToList = 0x8008C330;
+ HandleXSpeed = 0x8006CD90;
+ HandleYSpeed = 0x8006CDE0;
+ UpdateObjectPosBasedOnSpeedValues_real = 0x8006CD40;
+ dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3 = 0x80096240;
diff --git a/kamek_ntsc2.x b/kamek_ntsc2.x
index 95523f8..1328e90 100644
--- a/kamek_ntsc2.x
+++ b/kamek_ntsc2.x
@@ -23,10 +23,12 @@ SECTIONS {
/* Mr Sun Related */
- BubbleModel = 0x809D0CC0;
- BubbleDraw = 0x809D0850;
ActivePhysics_InitWithStruct = 0x8008C3E0;
ActivePhysics_AddToList = 0x8008C330;
+ HandleXSpeed = 0x8006CD90;
+ HandleYSpeed = 0x8006CDE0;
+ UpdateObjectPosBasedOnSpeedValues_real = 0x8006CD40;
+ dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3 = 0x80096240;
diff --git a/kamek_pal2.x b/kamek_pal2.x
index a499f36..23f7941 100644
--- a/kamek_pal2.x
+++ b/kamek_pal2.x
@@ -23,10 +23,12 @@ SECTIONS {
/* Mr Sun Related */
- BubbleModel = 0xDEADBEEF;
- BubbleDraw = 0xDEADBEEF;
ActivePhysics_InitWithStruct = 0xDEADBEEF;
ActivePhysics_AddToList = 0xDEADBEEF;
+ HandleXSpeed = 0xDEADBEEF;
+ HandleYSpeed = 0xDEADBEEF;
+ UpdateObjectPosBasedOnSpeedValues_real = 0xDEADBEEF;
+ dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3 = 0xDEADBEEF;
diff --git a/src/mrsun.cpp b/src/mrsun.cpp
index b62228e..a5fa121 100755
--- a/src/mrsun.cpp
+++ b/src/mrsun.cpp
@@ -9,7 +9,10 @@ class daMrSun_c : public dEn_c {
int onDraw();
mHeapAllocator_c allocator;
- m3d::mdl_c model;
+ m3d::mdl_c bodyModel;
+ m3d::mdl_c glowModel;
+
+ bool hasGlow;
float Baseline;
float SwoopSlope;
@@ -28,7 +31,7 @@ class daMrSun_c : public dEn_c {
static daMrSun_c *build();
- void updateModelMatrix();
+ void updateModelMatrices();
USING_STATES(daMrSun_c);
DECLARE_STATE(Follow);
@@ -66,21 +69,26 @@ CREATE_STATE(daMrSun_c, Wait);
#define DEACTIVATE 0
int daMrSun_c::onCreate() {
- OSReport("Creating the Mr.Sun Model");
+ OSReport("Creating the Mr.Sun Models");
allocator.link(-1, GameHeaps[0], 0, 0x20);
if (this->settings == 0) { // It's a sun
+ hasGlow = true;
+
nw4r::g3d::ResFile rf(getResource("bilikyu", "g3d/sun.brres"));
- model.setup(rf.GetResMdl("Sun"), &allocator, 0x224, 1, 0);
- // SetupTextures_Enemy(&model, 0);
- SetupTextures_Map(&model, 0);
+ bodyModel.setup(rf.GetResMdl("Sun"), &allocator, 0x224, 1, 0);
+ SetupTextures_Map(&bodyModel, 0);
+
+ glowModel.setup(rf.GetResMdl("SunGlow"), &allocator, 0x224, 1, 0);
+ SetupTextures_Map(&glowModel, 0);
}
else { // It's a moon
+ hasGlow = false;
+
nw4r::g3d::ResFile rf(getResource("bilikyu", "g3d/bilikyu.brres"));
- model.setup(rf.GetResMdl("bilikyu"), &allocator, 0x224, 1, 0);
- // SetupTextures_Enemy(&model, 0);
- SetupTextures_Map(&model, 0);
+ bodyModel.setup(rf.GetResMdl("bilikyu"), &allocator, 0x224, 1, 0);
+ SetupTextures_Map(&bodyModel, 0);
}
allocator.unlink();
@@ -117,7 +125,7 @@ int daMrSun_c::onCreate() {
this->xSpiralOffset = 0.0;
this->ySpiralOffset = 0.0;
- this->pos.z = 3300.00
+ this->pos.z = 3300.00;
OSReport("Setting Mr.Sun's State");
doStateChange(&StateID_Follow);
@@ -134,24 +142,36 @@ int daMrSun_c::onDelete() {
int daMrSun_c::onExecute() {
//OSReport("Oh Mr.Sun, Sun, Mr.Golden Sun");
acState.execute();
- updateModelMatrix();
+ updateModelMatrices();
return true;
}
int daMrSun_c::onDraw() {
- model.scheduleForDrawing();
+ bodyModel.scheduleForDrawing();
+ if (hasGlow)
+ glowModel.scheduleForDrawing();
+
return true;
}
-void daMrSun_c::updateModelMatrix() {
+void daMrSun_c::updateModelMatrices() {
// This won't work with wrap because I'm lazy.
matrix.translation(pos.x, pos.y, pos.z);
matrix.applyRotationYXZ(&rot.x, &rot.y, &rot.z);
- model.setDrawMatrix(matrix);
- model.setScale(&scale);
- model.calcWorld(false);
+ bodyModel.setDrawMatrix(matrix);
+ bodyModel.setScale(&scale);
+ bodyModel.calcWorld(false);
+
+ if (hasGlow) {
+ mMtx glowMatrix;
+ glowMatrix.translation(pos.x, pos.y, pos.z);
+
+ glowModel.setDrawMatrix(glowMatrix);
+ glowModel.setScale(&scale);
+ glowModel.calcWorld(false);
+ }
}