diff options
-rwxr-xr-x | include/game.h | 2 | ||||
-rw-r--r-- | kamek_ntsc.x | 6 | ||||
-rw-r--r-- | kamek_ntsc2.x | 6 | ||||
-rw-r--r-- | kamek_pal2.x | 6 | ||||
-rwxr-xr-x | src/mrsun.cpp | 52 |
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); + } } |