summaryrefslogtreecommitdiff
path: root/src/mrsun.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mrsun.cpp')
-rwxr-xr-xsrc/mrsun.cpp82
1 files changed, 49 insertions, 33 deletions
diff --git a/src/mrsun.cpp b/src/mrsun.cpp
index 7e45902..0b2c798 100755
--- a/src/mrsun.cpp
+++ b/src/mrsun.cpp
@@ -65,22 +65,23 @@ int daMrSun_c::onCreate() {
OSReport("Creating the Mr.Sun Model");
allocator.link(-1, GameHeaps[0], 0, 0x20);
- nw4r::g3d::ResFile rf(getResource("bubble", "g3d/t00.brres"));
- model.setup(rf.GetResMdl("bubble"), &allocator, 0x224, 1, 0);
- SetupTextures_Enemy(&model, 0);
+ 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);
allocator.unlink();
OSReport("Setting Mr.Sun's Size to 4.0");
- this->scale = (Vec){4.0, 4.0, 4.0};
+ this->scale = (Vec){0.5, 0.5, 0.5};
OSReport("Creating Mr.Sun's Physics Struct");
ActivePhysics::Info HitMeBaby;
HitMeBaby.xDistToCenter = 0.0;
HitMeBaby.yDistToCenter = 0.0;
- HitMeBaby.xDistToEdge = 32.0;
- HitMeBaby.yDistToEdge = 32.0;
+ HitMeBaby.xDistToEdge = 16.0;
+ HitMeBaby.yDistToEdge = 16.0;
HitMeBaby.category1 = 0x3;
HitMeBaby.category2 = 0x0;
HitMeBaby.bitfield1 = 0x4F;
@@ -145,8 +146,9 @@ void daMrSun_c::updateModelMatrix() {
void daMrSun_c::beginState_Follow() {
OSReport("Mr.Sun is following youuuuu.");
this->timer = 0;
- this->rot.x = 0;
+ this->rot.x = 11000;
this->rot.y = 0;
+// this->rot.z = 11000;
}
void daMrSun_c::executeState_Follow() {
@@ -165,7 +167,7 @@ void daMrSun_c::executeState_Follow() {
float yDiff;
- yDiff = (this->Baseline - this->pos.y) / 4;
+ yDiff = (this->Baseline - this->pos.y) / 8;
this->speed.y = yDiff;
@@ -195,6 +197,7 @@ void daMrSun_c::beginState_Swoop() {
if (Player == 0) { doStateChange(&StateID_Follow); }
this->swoopTarget = Player->pos;
+ this->swoopTarget.y = this->swoopTarget.y - 24;
float relativeSunX = this->swoopTarget.x - this->pos.x;
float relativeSunY = this->swoopTarget.y - this->pos.y;
@@ -205,19 +208,27 @@ void daMrSun_c::executeState_Swoop() {
if (this->slope < 0.0) {
this->speed.x = this->speed.x + 0.3;
- this->speed.y = this->speed.y + (0.2 * -slope);
+ this->speed.y = this->speed.y - (0.2 * -slope);
}
else if (this->slope > 0.0) {
this->speed.x = this->speed.x - 0.3;
- this->speed.y = this->speed.y + (0.2 * slope);
+ this->speed.y = this->speed.y - (0.2 * slope);
+ }
+
+ float yDiff;
+
+ if (this->pos.y < this->swoopTarget.y) {
+ this->speed.x = this->speed.x * 0.2;
+ this->speed.y = this->speed.y * 0.2;
}
HandleXSpeed(this);
HandleYSpeed(this);
UpdateObjectPosBasedOnSpeedValues_real(this);
- if (this->pos.y > this->swoopTarget.y) { doStateChange(&StateID_Follow); }
+ if (this->pos.y < this->swoopTarget.y) {
+ if (this->speed.y < 0.1) { doStateChange(&StateID_Follow); } }
}
void daMrSun_c::endState_Swoop() {
@@ -231,6 +242,7 @@ void daMrSun_c::endState_Swoop() {
void daMrSun_c::beginState_Spiral() {
OSReport("Super Spiral Sunspot!");
+ this->SpiralLoop = 0;
this->xSpiralOffset = this->pos.x;
this->ySpiralOffset = this->pos.y;
}
@@ -240,12 +252,13 @@ void daMrSun_c::executeState_Spiral() {
float Period;
float Magnitude;
- Loops = 1.0;
- Period = 0.1;
- Magnitude = 1.0;
+ Loops = 6.0;
+ // Use a period of 0.1 for the moon
+ Period = 0.075;
+ Magnitude = 11.0;
- this->pos.x = Magnitude*(this->xSpiralOffset + (this->SpiralLoop * cos(this->SpiralLoop)));
- this->pos.y = Magnitude*(this->ySpiralOffset + (this->SpiralLoop * sin(this->SpiralLoop)));
+ this->pos.x = this->xSpiralOffset + Magnitude*((this->SpiralLoop * cos(this->SpiralLoop)));
+ this->pos.y = this->ySpiralOffset + Magnitude*((this->SpiralLoop * sin(this->SpiralLoop)));
this->SpiralLoop = this->SpiralLoop + Period;
@@ -321,7 +334,7 @@ void daMrSun_c::executeState_Spin() {
this->rot.y = this->rot.y + (50 * rotBonus);
int randomBall;
- randomBall = GenerateRandomNumber(5);
+ randomBall = GenerateRandomNumber(6);
if (randomBall == 1) {
int direction;
direction = GenerateRandomNumber(8);
@@ -330,29 +343,29 @@ void daMrSun_c::executeState_Spin() {
float ylaunch;
if (direction == 0) {
- xlaunch = 10.0;
+ xlaunch = 7.5;
ylaunch = 0.0; }
else if (direction == 1) { // SE
- xlaunch = 10.0;
- ylaunch = 10.0; }
+ xlaunch = 7.5;
+ ylaunch = 7.5; }
else if (direction == 2) { // S
xlaunch = 0.0;
- ylaunch = 10.0; }
+ ylaunch = 7.5; }
else if (direction == 3) { // SW
- xlaunch = -10.0;
- ylaunch = 10.0; }
+ xlaunch = -7.5;
+ ylaunch = 7.5; }
else if (direction == 4) { // W
- xlaunch = -10.0;
+ xlaunch = -7.5;
ylaunch = 0.0; }
else if (direction == 5) { // NW
- xlaunch = -10.0;
- ylaunch = -10.0; }
+ xlaunch = -7.5;
+ ylaunch = -7.5; }
else if (direction == 6) { // N
xlaunch = 0.0;
- ylaunch = -10.0; }
+ ylaunch = -7.5; }
else if (direction == 7) { // NE
- xlaunch = 10.0;
- ylaunch = -10.0; }
+ xlaunch = 7.5;
+ ylaunch = -7.5; }
dStageActor_c *spawner = CreateActor(106, 0, this->pos, 0, 0);
@@ -369,8 +382,9 @@ void daMrSun_c::executeState_Spin() {
void daMrSun_c::endState_Spin() {
OSReport("K, I is dizzy now.");
- this->rot.x = 0;
+ this->rot.x = 11000;
this->rot.y = 0;
+// this->rot.z = 11000;
}
@@ -384,8 +398,9 @@ void daMrSun_c::beginState_Wait() {
this->timer = 0;
this->speed.x = 0.0;
- this->rot.x = 0;
+ this->rot.x = 11000;
this->rot.y = 0;
+// this->rot.z = 11000;
}
void daMrSun_c::executeState_Wait() {
int Choice;
@@ -397,7 +412,7 @@ void daMrSun_c::executeState_Wait() {
OSReport("Choice: %d", Choice);
- if (Choice == 0) { doStateChange(&StateID_Spin); }
+ if (Choice == 0) { doStateChange(&StateID_Swoop); }
// else if (Choice == 1) { doStateChange(&StateID_Spin); }
// else if (Choice == 2) { doStateChange(&StateID_Swoop); }
// else if (Choice == 3) { doStateChange(&StateID_Spiral); }
@@ -409,8 +424,9 @@ void daMrSun_c::executeState_Wait() {
void daMrSun_c::endState_Wait() {
OSReport("Mr.Sun Cometh!");
this->timer = 0;
- this->rot.x = 0;
+ this->rot.x = 11000;
this->rot.y = 0;
+// this->rot.z = 11000;
}