summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bossRamboo.cpp1
-rw-r--r--src/bossSamurshai.cpp4
-rw-r--r--src/classic_controller.S175
-rwxr-xr-xsrc/mrsun.cpp9
-rw-r--r--src/prolog.S2
-rw-r--r--src/soundPlayer.S1
-rw-r--r--src/topman.cpp14
7 files changed, 140 insertions, 66 deletions
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) {