diff options
Diffstat (limited to '')
| -rw-r--r-- | bugfixes.yaml | 10 | ||||
| -rw-r--r-- | kamek_pal.x | 1 | ||||
| -rw-r--r-- | src/koopatlas/core.h | 3 | ||||
| -rw-r--r-- | src/koopatlas/hud.cpp | 4 | ||||
| -rw-r--r-- | src/koopatlas/pathmanager.cpp | 155 | ||||
| -rw-r--r-- | src/koopatlas/pathmanager.h | 4 | ||||
| -rw-r--r-- | src/koopatlas/player.cpp | 154 | ||||
| -rw-r--r-- | src/koopatlas/player.h | 191 | 
8 files changed, 451 insertions, 71 deletions
| diff --git a/bugfixes.yaml b/bugfixes.yaml index ac884e4..29b7acd 100644 --- a/bugfixes.yaml +++ b/bugfixes.yaml @@ -78,6 +78,16 @@ hooks:      addr_pal: 0x807E16D0
      data: '88D2038F'
 +  - name: EN_BIGPILEFix
 +    type: patch
 +    addr_pal: 0x8001F93C
 +    data: '48000014'
 +
 +  - name: RockyWrenchFix
 +    type: patch
 +    addr_pal: 0x808A9448
 +    data: '60000000'
 +
  #  - name: HeapChangeAttempt
  #    type: branch_insn
  #    branch_type: bl
 diff --git a/kamek_pal.x b/kamek_pal.x index 21eef94..a023e7c 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -161,6 +161,7 @@ SECTIONS {  	RelatedToPlayingSoundsAlongsideAnims = 0x80105350;  	SoundRelatedClass = 0x8042A768; +	MapSoundPlayer = 0x801954C0;  	ConvertStagePositionToScreenPosition__FP7Point2dP7Point3d = 0x8006A4B0; diff --git a/src/koopatlas/core.h b/src/koopatlas/core.h index 54030ab..55baf95 100644 --- a/src/koopatlas/core.h +++ b/src/koopatlas/core.h @@ -8,13 +8,14 @@  #include <common.h>  #include <game.h>  #include <g3dhax.h> +#include <sfx.h>  #include "levelinfo.h"  #include "koopatlas/mapdata.h"  #include "koopatlas/pathmanager.h"  #define WM_DEBUGGING -//#define WM_SPAMMY_DEBUGGING +// #define WM_SPAMMY_DEBUGGING  #ifdef WM_DEBUGGING  #define MapReport OSReport diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp index 72f9d5a..587c2c0 100644 --- a/src/koopatlas/hud.cpp +++ b/src/koopatlas/hud.cpp @@ -5,7 +5,7 @@ void CharToWChar(const char *input, wchar_t *output, int length) { for (int i =  int getStarCoinCount() {  	SaveBlock *save = GetSaveFile()->GetBlock(-1); -	int coinsSpent = save->ambush_countdown[0]; +	int coinsSpent = 0;  	int coinsEarned = 0;  	for (int w = 0; w < 10; w++) { @@ -228,7 +228,7 @@ void dWMHud_c::setPointName() {  void dWMHud_c::checkPointStatus() {  	dKPNode_s *node = dScKoopatlas_c::instance->pathManager.currentNode; -	if (node->type == dKPNode_s::LEVEL) { +	if ((node->type == dKPNode_s::LEVEL) && ((node->levelNumber[1] < 30) || (node->levelNumber[1] > 37))) {  		SaveBlock *save = GetSaveFile()->GetBlock(-1);  		int world = node->levelNumber[0]; diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp index 632edfa..6cf0750 100644 --- a/src/koopatlas/pathmanager.cpp +++ b/src/koopatlas/pathmanager.cpp @@ -2,6 +2,7 @@  #include "koopatlas/core.h"  #include "koopatlas/hud.h"  #include "koopatlas/player.h" +#include <sfx.h>  void dWMPathManager_c::setup() {  	isMoving = false; @@ -125,9 +126,142 @@ void dWMPathManager_c::startMovementTo(dKPPath_s *path) {  	SpammyReport("f\n");  	daWMPlayer_c *player = daWMPlayer_c::instance;  	SpammyReport("g %p\n", player); -	player->startAnimation(2, 2.0, 10.0, 0.0); +	// path->speed + +	// wait = 0, +	// walk = 1, +	// run = 2, +	// b_dash2 = 4, + +	// jump = 5, +	// 2jmp_c_2 = 9, +	// 2jumped = 10, + +	// tree_climb = 45, + +	// swim_wait +	// swim_walk = 38, + +	// wall_walk_l = 60, +	// wall_walk_r = 61, + +	// hang_walk_l = 65, +	// hang_walk_r = 66, + +	// wait, door_walk  	SpammyReport("h\n");  	player->rot.y = direction; +	player->hasSound = false; +	player->hasEffect = false; + +	switch (path->animation) { + +		// Running +		case 0: +			player->startAnimation(run, 2.0, 10.0, 0.0); +			player->hasSound = true; +			player->soundName = SE_PLY_FOOTNOTE_DIRT; +			break; +		case 1: +			player->startAnimation(run, 2.0, 10.0, 0.0); +			player->hasSound = true; +			player->hasEffect = true; +			player->soundName = SE_PLY_FOOTNOTE_CS_SAND; +			player->effectName = "Wm_mr_foot_sand"; +			break; +		case 2: +			player->startAnimation(run, 2.0, 10.0, 0.0); +			player->hasSound = true; +			player->hasEffect = true; +			player->soundName = SE_PLY_FOOTNOTE_CS_SNOW; +			player->effectName = "Wm_mr_foot_snow"; +			break; +		case 3: +			player->startAnimation(run, 2.0, 10.0, 0.0); +			player->hasSound = true; +			player->hasEffect = true; +			player->soundName = SE_PLY_FOOTNOTE_CS_WATER; +			player->effectName = "Wm_mr_foot_water"; +			break; + +		// Jumping +		case 4: +			player->startAnimation(jump, 1.0, 1.0, 0.0); +			MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1); +			break; +		case 5: +			player->startAnimation(jump, 1.0, 10.0, 0.0); +			MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1); +			break; +		case 6: +			player->startAnimation(jump, 1.0, 10.0, 0.0); +			MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1); +			break; +		case 7: +			player->startAnimation(jump, 1.0, 10.0, 0.0); +			MapSoundPlayer(SoundRelatedClass, SE_PLY_JUMP, 1); +			SpawnEffect("Wm_mr_waterwave_out", 0, &player->pos, 0, &player->scale); +			break; + +		// Climbing +		case 8: +			player->startAnimation(pea_plant, 1.2, 10.0, 0.0); +			player->rot.y = 0x8000; +			player->hasSound = true; +			player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB; +			break; +		case 9: +			player->startAnimation(tree_climb, 1.2, 10.0, 0.0); +			player->rot.y = 0xC000; +			player->hasSound = true; +			player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB; +			break; +		case 10: +			player->startAnimation(tree_climb, 1.2, 10.0, 0.0); +			player->rot.y = 0x4000; +			player->hasSound = true; +			player->soundName = SE_PLY_FOOTNOTE_CS_ROCK_CLIMB; +			break; + +		// Others +		case 12: +			OSReport("Swimming"); +			player->startAnimation(swim_wait, 1.2, 10.0, 0.0); +			player->hasSound = true; +			player->hasEffect = true; +			player->soundName = SE_PLY_SWIM; +			player->effectName = "Wm_mr_waterswim"; +			break; +		case 13: +			OSReport("Falling"); +			player->startAnimation(Tjumped, 2.0, 0.0, 0.0); +			break; +		case 14: +			OSReport("Dashing"); +			player->startAnimation(b_dash2, 3.0, 10.0, 0.0); +			player->hasSound = true; +			player->soundName = SE_PLY_FOOTNOTE_DIRT; +			break; +		case 15: +			OSReport("Piping"); +			player->startAnimation(wait, 2.0, 10.0, 0.0); +			player->rot.y = 0x0000; +			MapSoundPlayer(SoundRelatedClass, SE_PLY_DOKAN_IN_OUT, 1); +			break; +		case 16: +			OSReport("Dooring"); +			player->startAnimation(wait, 2.0, 10.0, 0.0); +			player->rot.y = 0x8000;			 +			MapSoundPlayer(SoundRelatedClass, SE_OBJ_DOOR_OPEN, 1); +			break; +		default: +			OSReport("No animtaion?!"); +			player->startAnimation(run, 2.0, 10.0, 0.0); +			player->hasSound = true; +			player->soundName = SE_PLY_FOOTNOTE_DIRT; +			break; +	} +	  	SpammyReport("i\n");  } @@ -172,6 +306,8 @@ void dWMPathManager_c::moveThroughPath() {  		} else if (to->type != dKPNode_s::PASS_THROUGH) {  	   		// Stop here  	   		player->startAnimation(0, 1.2, 10.0, 0.0); +	   		player->hasEffect = false; +	   		player->hasSound = false;  	   		SpammyReport("stopping here\n"); @@ -191,10 +327,23 @@ void dWMPathManager_c::moveThroughPath() {  void dWMPathManager_c::activatePoint() {  	if (currentNode->type == dKPNode_s::LEVEL) { -		daWMPlayer_c::instance->startAnimation(170, 1.2, 10.0, 0.0); -  		int w = currentNode->levelNumber[0] - 1;  		int l = currentNode->levelNumber[1] - 1; + +		if ((l > 29) && (l < 38)) { +			SaveBlock *save = GetSaveFile()->GetBlock(-1); +			u32 conds = save->GetLevelCondition(w, l); + +			SpammyReport("Toad House Flags: %x", conds); +			if (conds & 0xFF0) {  + +				MapSoundPlayer(SoundRelatedClass, SE_SYS_INVALID, 1); +				return; } +		} + +		MapSoundPlayer(SoundRelatedClass, SE_SYS_GAME_START, 1); +		daWMPlayer_c::instance->startAnimation(170, 1.2, 10.0, 0.0); +  		dLevelInfo_c::entry_s *level = dScKoopatlas_c::instance->levelInfo.search(w, l);  		dScKoopatlas_c::instance->startLevel(level);  	} diff --git a/src/koopatlas/pathmanager.h b/src/koopatlas/pathmanager.h index c5a642c..a9a04ed 100644 --- a/src/koopatlas/pathmanager.h +++ b/src/koopatlas/pathmanager.h @@ -3,6 +3,10 @@  #include "koopatlas/mapdata.h" +extern "C" void *SoundRelatedClass; +extern "C" void *MapSoundPlayer(void *SoundClass, int soundID, int unk); +extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*); +  class dWMPathManager_c {  	public:  		void setup(); diff --git a/src/koopatlas/player.cpp b/src/koopatlas/player.cpp index f8e491a..c6820a0 100644 --- a/src/koopatlas/player.cpp +++ b/src/koopatlas/player.cpp @@ -17,6 +17,13 @@ int daWMPlayer_c::onCreate() {  	current_param = 0; +	hasEffect = false; +	hasSound = false; +	step = false; +	effectName = ""; +	soundName = 0; +	timer = 0; +  	return true;  } @@ -31,77 +38,94 @@ int daWMPlayer_c::onExecute() {  	this->modelHandler->update();  	this->modelHandler->setSRT(this->pos, this->rot, this->scale); -#ifdef MARIO_OPTIONS -	// Before we leave, do the debug movement stuff -	int heldButtons = Remocon_GetButtons(GetActiveRemocon()); -	int nowPressed = Remocon_GetPressed(GetActiveRemocon()); -	char buf[100]; -	bool updated = false; -	if (nowPressed & WPAD_LEFT) { -		current_param--; -		updated = true; -	} +	if (hasEffect) { effect.spawn(effectName, 0, &pos, &rot, &scale); } -	if (nowPressed & WPAD_RIGHT) { -		current_param++; -		updated = true; -	} +	if (hasSound) { +		timer++; -	if (current_param < 0) -		current_param = 8; - -	if (current_param > 8) -		current_param = 0; - -	float pos_mod = 0.0f; -	short rot_mod = 0.0f; -	float scale_mod = 0.0f; -	if (nowPressed & WPAD_ONE) { -		pos_mod -= 5.0f; -		rot_mod -= 0x1000; -		scale_mod -= 0.1f; -		updated = true; -	} else if (nowPressed & WPAD_TWO) { -		pos_mod += 5.0f; -		rot_mod += 0x1000; -		scale_mod += 0.1f; -		updated = true; -	} +		if (timer == 10) { +			if (step) { MapSoundPlayer(SoundRelatedClass, soundName, 1); step = false; } +			else { MapSoundPlayer(SoundRelatedClass, soundName+1, 1); step = true; } +			timer = 0; +		} -	if (!updated) return true; - -	if (current_param == 0) { -		pos.x += pos_mod; -		sprintf(buf, "X position: %f", pos.x); -	} else if (current_param == 1) { -		pos.y += pos_mod; -		sprintf(buf, "Y position: %f", pos.y); -	} else if (current_param == 2) { -		pos.z += pos_mod; -		sprintf(buf, "Z position: %f", pos.z); -	} else if (current_param == 3) { -		rot.x += rot_mod; -		sprintf(buf, "X rotation: 0x%04x", rot.x); -	} else if (current_param == 4) { -		rot.y += rot_mod; -		sprintf(buf, "Y rotation: 0x%04x", rot.y); -	} else if (current_param == 5) { -		rot.z += rot_mod; -		sprintf(buf, "Z rotation: 0x%04x", rot.z); -	} else if (current_param == 6) { -		scale.x += scale_mod; -		sprintf(buf, "X scale: %f", scale.x); -	} else if (current_param == 7) { -		scale.y += scale_mod; -		sprintf(buf, "Y scale: %f", scale.y); -	} else if (current_param == 8) { -		scale.z += scale_mod; -		sprintf(buf, "Z scale: %f", scale.z); +		if (timer > 10) { timer = 0; }  	} -	dScNewerWorldMap_c::instance->SetTitle(buf); -#endif + + +// #ifdef MARIO_OPTIONS +// 	// Before we leave, do the debug movement stuff +// 	int heldButtons = Remocon_GetButtons(GetActiveRemocon()); +// 	int nowPressed = Remocon_GetPressed(GetActiveRemocon()); +// 	char buf[100]; +// 	bool updated = false; + +// 	if (nowPressed & WPAD_LEFT) { +// 		current_param--; +// 		updated = true; +// 	} + +// 	if (nowPressed & WPAD_RIGHT) { +// 		current_param++; +// 		updated = true; +// 	} + +// 	if (current_param < 0) +// 		current_param = 8; + +// 	if (current_param > 8) +// 		current_param = 0; + +// 	float pos_mod = 0.0f; +// 	short rot_mod = 0.0f; +// 	float scale_mod = 0.0f; +// 	if (nowPressed & WPAD_ONE) { +// 		pos_mod -= 5.0f; +// 		rot_mod -= 0x1000; +// 		scale_mod -= 0.1f; +// 		updated = true; +// 	} else if (nowPressed & WPAD_TWO) { +// 		pos_mod += 5.0f; +// 		rot_mod += 0x1000; +// 		scale_mod += 0.1f; +// 		updated = true; +// 	} + +// 	if (!updated) return true; + +// 	if (current_param == 0) { +// 		pos.x += pos_mod; +// 		sprintf(buf, "X position: %f", pos.x); +// 	} else if (current_param == 1) { +// 		pos.y += pos_mod; +// 		sprintf(buf, "Y position: %f", pos.y); +// 	} else if (current_param == 2) { +// 		pos.z += pos_mod; +// 		sprintf(buf, "Z position: %f", pos.z); +// 	} else if (current_param == 3) { +// 		rot.x += rot_mod; +// 		sprintf(buf, "X rotation: 0x%04x", rot.x); +// 	} else if (current_param == 4) { +// 		rot.y += rot_mod; +// 		sprintf(buf, "Y rotation: 0x%04x", rot.y); +// 	} else if (current_param == 5) { +// 		rot.z += rot_mod; +// 		sprintf(buf, "Z rotation: 0x%04x", rot.z); +// 	} else if (current_param == 6) { +// 		scale.x += scale_mod; +// 		sprintf(buf, "X scale: %f", scale.x); +// 	} else if (current_param == 7) { +// 		scale.y += scale_mod; +// 		sprintf(buf, "Y scale: %f", scale.y); +// 	} else if (current_param == 8) { +// 		scale.z += scale_mod; +// 		sprintf(buf, "Z scale: %f", scale.z); +// 	} + +// 	dScNewerWorldMap_c::instance->SetTitle(buf); +// #endif  	return true;  } diff --git a/src/koopatlas/player.h b/src/koopatlas/player.h index 2b53119..33bd560 100644 --- a/src/koopatlas/player.h +++ b/src/koopatlas/player.h @@ -3,6 +3,187 @@  #include "koopatlas/core.h" +enum PlayerAnim {  +	wait = 0, +	walk = 1, +	run = 2, +	b_dash = 3, +	b_dash2 = 4, +	jump = 5, +	jump2 = 6, +	jumped = 7, +	Tjmp_c_1 = 8, +	Tjmp_c_2 = 9, +	Tjumped = 10, +	roll_jump = 11, +	Tjump2 = 12, +	mame_jump2 = 13, +	turn = 14, +	turned = 15, +	hipsr = 16, +	hipat = 17, +	hiped = 18, +	hip_to_stoop = 19, +	stoop = 20, +	stoop_start = 21, +	slip = 22, +	sliped = 23, +	slip_to_stoop = 24, +	carry_wait = 25, +	carry_walk = 26, +	carry_throw = 27, +	Rcarry_wait = 28, +	wsld = 29, +	fire_at = 30, +	swim_fire_at = 31, +	swim_fire_at2 = 32, +	star_roll = 33, +	P_swim = 34, +	swim = 35, +	swim_wait = 36, +	swim_throw = 37, +	swim_walk = 38, +	swim_standing = 39, +	paddle_1 = 40, +	paddle_2 = 41, +	paddle_carry = 42, +	tree_start = 43, +	tree_wait = 44, +	tree_climb = 45, +	tree_pose = 46, +	monkey_start = 47, +	monkey_wait_r = 48, +	monkey_wait_l = 49, +	monkey_r_to_l = 50, +	monkey_l_to_r = 51, +	net_wait = 52, +	net_walk1 = 53, +	net_walk2 = 54, +	net_attack = 55, +	pea_plant = 56, +	pea_plant_st = 57, +	pea_plant_wait = 58, +	wall_wait = 59, +	wall_walk_l = 60, +	wall_walk_r = 61, +	hang_start = 62, +	hang_up = 63, +	hang_wait = 64, +	hang_walk_l = 65, +	hang_walk_r = 66, +	w_jump1 = 67, +	w_jump2 = 68, +	RTjumped = 69, +	jump_hang = 70, +	spin_st = 71, +	spin_end = 72, +	spin_low_st = 73, +	spin_low_ed = 74, +	spin_jump2 = 75, +	spin_jump_end = 76, +	damF = 77, +	damB = 78, +	dowF = 79, +	dowB = 80, +	firejmp = 81, +	e_shock = 82, +	dead = 83, +	dead_pose = 84, +	Rtree_start = 85, +	Rtree_wait = 86, +	Rtree_pose = 87, +	goal_jump = 88, +	goal_jump_ed = 89, +	goal_puton_capA = 90, +	goal_puton_capB = 91, +	goal_puton_capC = 92, +	PL_Rgoal_puton_cap = 93, +	P_Rgoal_puton_cap = 94, +	goal_puton_capF = 95, +	waitB = 96, +	eat_out = 97, +	eat_success = 98, +	eat_fail = 99, +	eat_successB = 100, +	eat_successC = 101, +	Seat = 102, +	Seat_out = 103, +	Seat_success = 104, +	Seat_fail = 105, +	Seat_successB = 106, +	Seat_successC = 107, +	carryP_start = 108, +	carryP_wait = 109, +	carryP_walk = 110, +	carryP_throw = 111, +	carryP_waitR = 112, +	ride_on = 113, +	Fjump = 114, +	waitC = 115, +	set_to_wait = 116, +	star_rollB = 117, +	Sjump = 118, +	Sjump2 = 119, +	Sjumped = 120, +	get_down = 121, +	turnB = 122, +	turnedB = 123, +	ice_slipF = 124, +	ice_slipB = 125, +	rope_swing = 126, +	shoot = 127, +	shoot_slip = 128, +	shoot_slip_end = 129, +	low_walk_start = 130, +	low_walk = 131, +	swim_pipe = 132, +	door_walk = 133, +	PL_spin_jump = 134, +	waitL = 135, +	waitR = 136, +	fire_at2 = 137, +	blow_up = 138, +	P_slip = 139, +	P_slip_jump = 140, +	P_slip_jump2 = 141, +	FjumpB = 142, +	stamp = 143, +	waitRB = 144, +	waitLB = 145, +	waitR3 = 146, +	waitL3 = 147, +	boss_key_get = 148, +	balloon_wait = 149, +	slope_waitL = 150, +	slope_waitR = 151, +	slope_waitL2 = 152, +	slope_waitR2 = 153, +	carryP_waitLB = 154, +	carryP_waitRB = 155, +	carry_waitL = 156, +	carry_waitR = 157, +	spin_jump3 = 158, +	ride_wait = 159, +	P_paddle_1 = 160, +	P_paddle_2 = 161, +	poseL = 162, +	poseR = 163, +	gorl_wait = 164, +	dm_notice = 165, +	dm_noti_wait = 166, +	dm_surprise = 167, +	dm_surp_wait = 168, +	wait_select = 169, +	course_in = 170, +	waitD = 171, +	waitE = 172, +	dm_escort = 173, +	dm_glad = 174, +	ending_wait = 175, +	coin_comp = 176 +}; + +  class daWMPlayer_c : public dActor_c {  	public:  		dPlayerModelHandler_c *modelHandler; @@ -19,6 +200,16 @@ class daWMPlayer_c : public dActor_c {  		float currentUnk;  		float currentUpdateRate; +		bool hasEffect; +		const char *effectName; +		bool hasSound; +		bool step; +		int soundName; + +		int timer; + +		mEf::es2 effect; +  		void startAnimation(int id, float frame, float unk, float updateRate);  		static daWMPlayer_c *build(); | 
