From 2e39b2f0ce099aa167c8a188d88e30af4bfc19f3 Mon Sep 17 00:00:00 2001 From: Colin Noga Date: Sat, 25 May 2013 00:03:33 -0500 Subject: A large number of fixes - ramboo, samurai, shy guy, topman, MrSun, classic controller --- src/bossRamboo.cpp | 1 + src/bossSamurshai.cpp | 4 +- src/classic_controller.S | 175 ++++++++++++++++++++++++++++++++--------------- src/mrsun.cpp | 9 ++- src/prolog.S | 2 +- src/soundPlayer.S | 1 + src/topman.cpp | 14 ++-- 7 files changed, 140 insertions(+), 66 deletions(-) (limited to 'src') diff --git a/src/bossRamboo.cpp b/src/bossRamboo.cpp index 3bc19d7..59e6d0c 100644 --- a/src/bossRamboo.cpp +++ b/src/bossRamboo.cpp @@ -205,6 +205,7 @@ int daRamboo_c::onCreate() { this->speed.x = 0.0; this->ytimer = 0; + this->pos.z = 3300.0; char eventNum = (this->settings >> 16) & 0xFF; diff --git a/src/bossSamurshai.cpp b/src/bossSamurshai.cpp index 12adfeb..ba871cd 100644 --- a/src/bossSamurshai.cpp +++ b/src/bossSamurshai.cpp @@ -264,7 +264,7 @@ daSamurshai *daSamurshai::build() { if (collMgr.isOnTopOfTile()) { isBouncing = true; } - pos.x = direction ? pos.x + speed.x : pos.x - speed.x; + pos.x += direction ? 2.0 : -2.0; return true; } return false; @@ -339,7 +339,7 @@ int daSamurshai::onCreate() { _324 = 18.0f; // These structs tell stupid collider what to collide with - these are from koopa troopa - static const lineSensor_s below(12<<12, 4<<12, 0<<12); + static const lineSensor_s below(-0<<12, 0<<12, 0<<12); static const pointSensor_s above(0<<12, 12<<12); static const lineSensor_s adjacent(6<<12, 9<<12, 6<<12); diff --git a/src/classic_controller.S b/src/classic_controller.S index 6084c05..a1af772 100644 --- a/src/classic_controller.S +++ b/src/classic_controller.S @@ -24,17 +24,17 @@ #define WPAD_CLASSIC_BUTTON_UP 0x0001 #define WPAD_CLASSIC_BUTTON_LEFT 0x0002 -#define WPAD_CLASSIC_BUTTON_ZR 0x0004 +#define WPAD_CLASSIC_BUTTON_R 0x0004 #define WPAD_CLASSIC_BUTTON_X 0x0008 #define WPAD_CLASSIC_BUTTON_A 0x0010 #define WPAD_CLASSIC_BUTTON_Y 0x0020 #define WPAD_CLASSIC_BUTTON_B 0x0040 -#define WPAD_CLASSIC_BUTTON_ZL 0x0080 -#define WPAD_CLASSIC_BUTTON_FULL_R 0x0200 +#define WPAD_CLASSIC_BUTTON_L 0x0080 +#define WPAD_CLASSIC_BUTTON_ZR 0x0200 #define WPAD_CLASSIC_BUTTON_PLUS 0x0400 #define WPAD_CLASSIC_BUTTON_HOME 0x0800 #define WPAD_CLASSIC_BUTTON_MINUS 0x1000 -#define WPAD_CLASSIC_BUTTON_FULL_L 0x2000 +#define WPAD_CLASSIC_BUTTON_ZL 0x2000 #define WPAD_CLASSIC_BUTTON_DOWN 0x4000 #define WPAD_CLASSIC_BUTTON_RIGHT 0x8000 @@ -51,9 +51,30 @@ .text .align 4 -;TODO - check that classic controller is attached -;TODO - add tilt to right analog -;TODO - add R/L to be full tilt + + + + +.global waggleAdjust +waggleAdjust: + + lbz r5, 0x5C(r3) # wiimote extension type + cmpwi r5, 2 # classic controller + + beq ClassicControllerWaggle + + stfs f0, 0(r4) + blr + +ClassicControllerWaggle: + + li r12, 0 + stw r12, 0(r4) + blr + + + + .global _switch_buttons _switch_buttons: addi r1,r1,0x50 # replaced instruction @@ -71,8 +92,38 @@ _switch_buttons: lbz r5,0x5C(r26) # wiimote extension type cmpwi r5, 2 # classic controller - beq cleanup + bne cleanup + + lwz r5, 0x60(r26) +Tilt: + + lwz r5, 0x80(r26) + cmpwi r5, 0 + beq TiltLeftSkip + + lfs f11, 0x80(r26) + + lis r5, 0 + stw r5, 0x80(r26) + lfs f10, 0x80(r26) + + fsubs f11, f10, f11 + + stfs f11, 0x58(r26) + li r5, 0 + stw r5, 0x54(r26) + +TiltLeftSkip: + + lwz r5, 0x7C(r26) + cmpwi r5, 0 + beq TiltRightSkip + stw r5, 0x58(r26) + li r5, 0 + stw r5, 0x54(r26) + +TiltRightSkip: lwz r5,0x60(r26) # wiimote cc data ; KPADInsideStatus->KPADEXStatus_bl->hold bl map_buttons lwz r4,0(r26) # wiimote ; KPADInsideStatus->hold @@ -102,56 +153,58 @@ cleanup: addi r1,r1,stackSize blr -; r5 == CC data -; r5 returns the wpad data +# r5 == CC data +# r5 returns the wpad data + + map_buttons: - andi. r4,r5,0x10 // WPAD_CLASSIC_BUTTON_A - cmpwi r4,0 - beq- skip_waggle - lis r6,0x7fc0 // float - stw r6,0x10(r26) // set waggle ; KPADInsideStatus->acc->y -skip_waggle: li r6,0 + andi. r4,r5,0x10 // WPAD_CLASSIC_BUTTON_A + beq- skip_A + ori r6,r6,0x100 // WPAD_BUTTON_2 +skip_A: andi. r4,r5,0x800 // WPAD_CLASSIC_BUTTON_HOME beq- skip_home ori r6,r6,0x8000 // WPAD_BUTTON_HOME skip_home: andi. r4,r5,0x20 // WPAD_CLASSIC_BUTTON_Y - beq- skip_run_one - ori r6,r6,0x200 // WPAD_BUTTON_1 -skip_run_one: + beq- skip_Y + ori r6,r6,0x800 // WPAD_BUTTON_A +skip_Y: andi. r4,r5,0x8 // WPAD_CLASSIC_BUTTON_X - beq- skip_run_two - ori r6,r6,0x200 // WPAD_BUTTON_1 -skip_run_two: + beq- skip_X + lis r6,0x7fc0 // float + stw r6,0x10(r26) // set waggle ; KPADInsideStatus->acc->y +skip_X: andi. r4,r5,0x40 // WPAD_CLASSIC_BUTTON_B - beq- skip_jump - ori r6,r6,0x100 // WPAD_BUTTON_2 -skip_jump: + beq- skip_B + ori r6,r6,0x200 // WPAD_BUTTON_1 +skip_B: andi. r4,r5,0x80 // WPAD_CLASSIC_BUTTON_ZL - beq- skip_bubble1 - ori r6,r6,0x8 // WPAD_BUTTON_A -skip_bubble1: + beq- skip_ZL + ori r6,r6,0x200 // WPAD_BUTTON_1 +skip_ZL: andi. r4,r5,0x4 // WPAD_CLASSIC_BUTTON_ZR - beq- skip_bubble2 - ori r6,r6,0x8 // WPAD_BUTTON_A -skip_bubble2: + beq- skip_ZR + lis r6,0x7fc0 // float + stw r6,0x10(r26) // set waggle ; KPADInsideStatus->acc->y +skip_ZR: andi. r4,r5,1 // WPAD_CLASSIC_BUTTON_UP - beq- skip_right + beq- skip_up ori r6,r6,2 // WPAD_BUTTON_RIGHT -skip_right: +skip_up: andi. r4,r5,2 // WPAD_CLASSIC_BUTTON_LEFT - beq- skip_up + beq- skip_left ori r6,r6,8 // WPAD_BUTTON_UP -skip_up: +skip_left: andi. r4,r5,0x8000 // WPAD_CLASSIC_BUTTON_RIGHT - beq- skip_down + beq- skip_right ori r6,r6,4 // WPAD_BUTTON_DOWN -skip_down: +skip_right: andi. r4,r5,0x4000 // WPAD_CLASSIC_BUTTON_DOWN - beq- skip_left + beq- skip_down ori r6,r6,1 // WPAD_BUTTON_LEFT -skip_left: +skip_down: andi. r4,r5,0x400 // WPAD_CLASSIC_BUTTON_PLUS beq- skip_plus ori r6,r6,0x10 // WPAD_BUTTON_PLUS @@ -162,33 +215,41 @@ skip_plus: skip_minus: lfs f8,0x6c(r26) // left analog x ; KPADInsideStatus->KPADEXStatus_cl->lstick lfs f9,0x70(r26) // left analog y ; KPADInsideStatus->KPADEXStatus_cl->rstick + lis r5,float_one@ha lfs f10,float_one@l(r5) + + lis r5,float_neg_one@ha lfs f11,float_neg_one@l(r5) -; fcmpu cr0,f8,f10 -; bne skip_right_analog -; ori r6,r6,4 // WPAD_BUTTON_DOWN -;skip_right_analog: -; fcmpu cr0,f9,f10 -; bne skip_right_analog -; ori r6,r6,2 // WPAD_BUTTON_RIGHT -;skip_up_analog: -; fcmpu cr0,f9,f11 -; bne skip_right_analog -; ori r6,r6,1 // WPAD_BUTTON_LEFT -;skip_down_analog: -; fcmpu cr0,f8,f11 -; bne skip_right_analog -; ori r6,r6,8 // WPAD_BUTTON_UP -;skip_left_analog: + + fcmpu cr0,f8,f10 // WPAD_R_ANALOG_RIGHT + blt skip_right_analog + ori r6,r6,4 // WPAD_BUTTON_DOWN +skip_right_analog: + fcmpu cr0,f9,f10 // WPAD_R_ANALOG_UP + blt skip_up_analog + ori r6,r6,2 // WPAD_BUTTON_RIGHT +skip_up_analog: + fcmpu cr0,f8,f11 // WPAD_R_ANALOG_LEFT + bge skip_down_analog + ori r6,r6,8 // WPAD_BUTTON_UP +skip_down_analog: + fcmpu cr0,f9,f11 // WPAD_R_ANALOG_DOWN + bge skip_left_analog + ori r6,r6,1 // WPAD_BUTTON_LEFT +skip_left_analog: mr r5,r6 blr + + + + .data float_one: -.float 1.0 +.float 0.5 float_neg_one: -.float -1.0 +.float -0.5 float_zero: .float 0.0 diff --git a/src/mrsun.cpp b/src/mrsun.cpp index 1cdfdc9..fa9c96a 100755 --- a/src/mrsun.cpp +++ b/src/mrsun.cpp @@ -53,6 +53,7 @@ class daMrSun_c : public dEn_c { void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther); bool collisionCat1_Fireball_E_Explosion(ActivePhysics *apThis, ActivePhysics *apOther); bool collisionCat2_IceBall_15_YoshiIce(ActivePhysics *apThis, ActivePhysics *apOther); + bool collisionCat5_Mario(ActivePhysics *apThis, ActivePhysics *apOther); bool collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther); bool collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics *apOther); bool collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics *apOther); @@ -110,7 +111,7 @@ bool daMrSun_c::collisionCat9_RollingObject(ActivePhysics *apThis, ActivePhysics return true; } bool daMrSun_c::collisionCat13_Hammer(ActivePhysics *apThis, ActivePhysics *apOther) { - this->timer = 0; + this->timer = 0; PlaySound(this, SE_EMY_DOWN); doStateChange(&StateID_DieFall); return true; @@ -137,6 +138,10 @@ bool daMrSun_c::collisionCatA_PenguinMario(ActivePhysics *apThis, ActivePhysics DamagePlayer(this, apThis, apOther); return true; } +bool daMrSun_c::collisionCat5_Mario(ActivePhysics *apThis, ActivePhysics *apOther) { + DamagePlayer(this, apThis, apOther); + return true; +} void daMrSun_c::dieFall_Execute() { @@ -261,7 +266,7 @@ int daMrSun_c::onCreate() { doStateChange(&StateID_Follow); - this->onExecute(); + // this->onExecute(); return true; } diff --git a/src/prolog.S b/src/prolog.S index 7d7e40b..ffeaf92 100644 --- a/src/prolog.S +++ b/src/prolog.S @@ -61,7 +61,7 @@ startLoop: .data PMsg: - .string "Newer Super Mario Bros. Wii - Hacks by Treeki and Tempus 2009-2013\nNewer Release Candidate 05 - v1012\n.ctors: %p - %p\n" + .string "Newer Super Mario Bros. Wii - Hacks by Treeki and Tempus 2009-2013\nNewer Release Candidate 08 - v1012\n.ctors: %p - %p\n" PMsg2: .string "%d inits called\n" diff --git a/src/soundPlayer.S b/src/soundPlayer.S index 1cf7cbd..8fbfd7b 100644 --- a/src/soundPlayer.S +++ b/src/soundPlayer.S @@ -59,6 +59,7 @@ PlaySound: # Go away if it is cmpwi r3, 0 + li r3, 0 bne GoAwaySoundGuy # If we're good to go, play the sound! diff --git a/src/topman.cpp b/src/topman.cpp index 55123f8..5d98761 100644 --- a/src/topman.cpp +++ b/src/topman.cpp @@ -433,8 +433,11 @@ void daTopman::updateModelMatrices() { } void daTopman::executeState_Walk() { - if (!this->isOutOfView()) - PlaySound(this, SE_BOSS_JR_CROWN_JR_RIDE); // 5 + if (!this->isOutOfView()) { + nw4r::snd::SoundHandle *handle = PlaySound(this, SE_BOSS_JR_CROWN_JR_RIDE); + if (handle) + handle->SetVolume(0.5f, 0); + } bool ret = calculateTileCollisions(); if (ret) { @@ -486,8 +489,11 @@ void daTopman::updateModelMatrices() { } void daTopman::executeState_Wait() { - if (!this->isOutOfView()) - PlaySound(this, SE_BOSS_JR_CROWN_JR_RIDE); // 5 + if (!this->isOutOfView()) { + nw4r::snd::SoundHandle *handle = PlaySound(this, SE_BOSS_JR_CROWN_JR_RIDE); + if (handle) + handle->SetVolume(0.5f, 0); + } bool ret = calculateTileCollisions(); if (ret) { -- cgit v1.2.3