diff options
| -rw-r--r-- | kamek_pal.x | 8 | ||||
| -rw-r--r-- | src/bossMegaGoomba.cpp | 134 | 
2 files changed, 51 insertions, 91 deletions
| diff --git a/kamek_pal.x b/kamek_pal.x index 702f857..8030c51 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -1025,12 +1025,12 @@ SECTIONS {  	process__Q23m3d11anmTexPat_cFv = 0x80166f10;  	processOneEntry__Q23m3d11anmTexPat_cFv = 0x80166fc0;  	getFrameForEntry__Q23m3d11anmTexPat_cFv = 0x80167020; -	setFrameForEntry__Q23m3d11anmTexPat_cFv = 0x80167020; -	getUpdateForEntry__Q23m3d11anmTexPat_cFv = 0x80167040; -	setUpdateForEntry__Q23m3d11anmTexPat_cFv = 0x80167050; +	setFrameForEntry__Q23m3d11anmTexPat_cFfi = 0x80167020; +	getUpdateRateForEntry__Q23m3d11anmTexPat_cFv = 0x80167040; +	setUpdateRateForEntry__Q23m3d11anmTexPat_cFfi = 0x80167050;  	isEntryAnimationDone__Q23m3d11anmTexPat_cFv = 0x80167060;  	queryEntrySomething__Q23m3d11anmTexPat_cFv = 0x80167070; -	setEntryByte34__Q23m3d11anmTexPat_cFv = 0x80167080; +	setEntryByte34__Q23m3d11anmTexPat_cFUci = 0x80167080;  	getEntryField28__Q23m3d11anmTexPat_cFv = 0x801670a0;  	vf0C__Q23m3d11anmTexPat_cFv = 0x801670c0; diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp index 8d4d19a..e836afb 100644 --- a/src/bossMegaGoomba.cpp +++ b/src/bossMegaGoomba.cpp @@ -1,6 +1,7 @@  #include <common.h>  #include <game.h>  #include <g3dhax.h> +#include <sfx.h>  #include "player.h" @@ -27,8 +28,6 @@ class daMegaGoomba_c : public dEn_c {  	unsigned int Xkey_count;  	HermiteKey keysY[0x10];  	unsigned int Ykey_count; -//	HermiteKey keysZ[0x10]; -//	unsigned int Zkey_count;  	char life; @@ -39,27 +38,10 @@ class daMegaGoomba_c : public dEn_c {  	u32 marker2_start;  	int pickedChoice;  	u32 marker2_end; -	u32 marker3_start;  	float XSpeed; -	u32 marker3_end; -	u32 marker4_start;  	float JumpHeight; -	u32 marker4_end; -	u32 marker5_start;  	float JumpDist; -	u32 marker5_end; -	u32 marker6_start;  	float JumpTime; -	u32 marker6_end; -	u32 marker7_start; -	int playIt; -	u32 marker7_end; -	u32 marker8_start; -	int toPlay; -	u32 marker8_end; -	u32 marker9_start; -	bool timeToPlay; -	u32 marker9_end;  	bool takeHit(char count); @@ -100,14 +82,14 @@ class daMegaGoomba_c : public dEn_c {  	DECLARE_STATE(Launch);  }; -//extern "C" void *PlaySound(dStageActor_c *, int soundID); -  daMegaGoomba_c *daMegaGoomba_c::build() {  	void *buffer = AllocFromGameHeap1(sizeof(daMegaGoomba_c));  	return new(buffer) daMegaGoomba_c;  } +extern "C" void *PlaySound(daMegaGoomba_c *, int soundID); +  //FIXME makes these dEn_c::HandleXSpeed();  extern "C" void *HandleXSpeed(daMegaGoomba_c *);  extern "C" void *HandleYSpeed(daMegaGoomba_c *); @@ -133,6 +115,10 @@ bool daMegaGoomba_c::takeHit(char count) {  		c = 127 - l;  	}  	this->life -= c; +	this->XSpeed += 0.25; +	this->JumpHeight += 12.0; +	this->JumpDist += 12.0; +	this->JumpTime += 5.0;  	doStateChange(&StateID_Shrink);  	setNewActivePhysicsRect(this, &this->scale);  	return (life <= 0) ? true : false; @@ -219,39 +205,25 @@ void HexDump(char* address, u32 length) {  }  void daMegaGoomba_c::setupBodyModel() { -	OSReport("Here 0\n");  	allocator.link(-1, GameHeaps[0], 0, 0x20); -	OSReport("Here 1\n");  	this->resFile.data = getResource("kuribo", "g3d/t02.brres");  	nw4r::g3d::ResMdl mdl = this->resFile.GetResMdl("kuribo"); -	HexDump((char*)&mdl, 0x10);  	bodyModel.setup(mdl, &allocator, 0x224, 1, 0);  	SetupTextures_Enemy(&bodyModel, 0);  	bool ret; -	OSReport("Here 2\n");  	nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("walk"); -	HexDump((char*)&anmChr, 0x10); - -	OSReport("Here 3\n");  	ret = this->animationChr.setup(mdl, anmChr, &this->allocator, 0); -	OSReport("Here 4\n");  	nw4r::g3d::ResAnmTexPat anmPat = this->resFile.GetResAnmTexPat("walk"); -	HexDump((char*)&anmPat, 0x10); - -	OSReport("Here 5\n");  	this->resTexPat = anmPat; - -	OSReport("Here 6\n");  	ret = this->animationPat.setup(mdl, anmPat, &this->allocator, 0, 1); - -	OSReport("Here 7\n");  	this->animationPat.bindEntry(&this->bodyModel, &anmPat, 0, 0); +	this->bodyModel.bindAnim(&this->animationPat, 1.0); +	this->animationPat.setFrameForEntry(1.0, 0); -	OSReport("Here 8\n");  	allocator.unlink();  } @@ -282,7 +254,9 @@ int daMegaGoomba_c::onCreate() {  	//FIXME move this stuff elsewhere  	pos.y -= 16.0;  	pos.z = 3000.0; -	rot.x = rot.y = rot.z = speed.x = dying = 0.0; +	speed.x = dying = 0.0; +	rot.x = rot.z = 0; +	rot.y = 0x2000;	// 0x2000 is left. 0xe000 is for right.  	direction = 0;  	life = 3;  	//TODO 1) allow setting bounding rect with settings @@ -297,28 +271,13 @@ int daMegaGoomba_c::onCreate() {  	this->marker1_end = 0xaabbff11;  	this->marker2_start = 0xaabbcc12;  	this->marker2_end = 0xaabbff12; -	this->marker3_start = 0xaabbcc13; -	this->marker3_end = 0xaabbff13; -	this->marker4_start = 0xaabbcc14; -	this->marker4_end = 0xaabbff14; -	this->marker5_start = 0xaabbcc15; -	this->marker5_end = 0xaabbff15; -	this->marker6_start = 0xaabbcc16; -	this->marker6_end = 0xaabbff16; -	this->marker7_start = 0xaabbcc17; -	this->marker7_end = 0xaabbff17; -	this->marker8_start = 0xaabbcc18; -	this->marker8_end = 0xaabbff18; -	this->marker9_start = 0xaabbcc19; -	this->marker9_end = 0xaabbff19; +  	this->pickedChoice = -1; -	this->XSpeed = 2.0;		// GOOD FOR FINAL SPEED? +	// 2.0 is good final speed +	this->XSpeed = 1.5;  	this->JumpHeight = 48.0;  	this->JumpDist = 64.0;  	this->JumpTime = 50.0; -	this->playIt = 0; -	this->toPlay = 0; -	this->timeToPlay = false;  	OSReport("Setting MegaGoomba's State\n");  	doStateChange(&StateID_Grow); @@ -350,6 +309,8 @@ int daMegaGoomba_c::onExecute() {  int daMegaGoomba_c::onDraw() {  	bodyModel.scheduleForDrawing(); +	animationChr.process(); +	animationPat.process();  	return true;  } @@ -360,10 +321,12 @@ void daMegaGoomba_c::updateModelMatrices() {  	if(this->life > 0) {  		if(this->pos.x < this->Bounding.left) {  			this->direction = !this->direction; +			rot.y = (this->direction) ? 0xe000 : 0x2000;  			this->speed.x = -this->speed.x;  			this->pos.x = this->Bounding.left;  		} else if (this->pos.x > this->Bounding.right) {  			this->direction = !this->direction; +			rot.y = (this->direction) ? 0xe000 : 0x2000;  			this->speed.x = -this->speed.x;  			this->pos.x = this->Bounding.right;  		} @@ -416,9 +379,8 @@ void daMegaGoomba_c::executeState_Grow() {  		setNewActivePhysicsRect(this, &this->scale);  	} -	//TODO grow sound -	//if(this->timer == 60.0) -	//	PlaySound(this, SE_GROW); +	if(this->timer == 60.0) +		PlaySound(this, SE_EMY_KURI_CHANGE_BIG);  	if (this->timer > 170.0) { doStateChange(&StateID_Walk); } @@ -442,9 +404,8 @@ void daMegaGoomba_c::executeState_Shrink() {  	this->scale = (Vec){modifier, modifier, modifier};  	setNewActivePhysicsRect(this, &this->scale); -	//TODO shrink sound -	//if(this->timer == 2.0) -	//	PlaySound(this, SE_SHRINK); +	if(this->timer == 2.0) +		PlaySound(this, SE_EMY_KURIBO_L_DAMAGE_02);  	if (this->timer > 60.0) { doStateChange(&StateID_Walk); }  } @@ -496,7 +457,7 @@ void daMegaGoomba_c::executeState_Launch() {  	this->timer = this->timer + 1.0;  }  void daMegaGoomba_c::endState_Launch() {  -	this->rot.y = 0; +	rot.y = (this->direction) ? 0xe000 : 0x2000;  }  // Jump State @@ -543,23 +504,36 @@ void daMegaGoomba_c::endState_Jump() { }  void daMegaGoomba_c::beginState_Walk() {  	this->timer = 1.0;  	this->direction = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); -	//TODO add rot.changing on switching directions until animations added  +	rot.y = (this->direction) ? 0xe000 : 0x2000; -	// DO SOMETHING COOL // -	OSReport("Here11\n"); +	//SETUP WALK ANIMATION//  	nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("walk"); -	OSReport("Here12\n");  	this->animationChr.bind(&this->bodyModel, anmChr, 0); -	OSReport("Here13\n"); -	this->bodyModel.bindAnim(&this->animationChr, 1.0); -	OSReport("Here14\n"); +	this->bodyModel.bindAnim(&this->animationChr, 2.0); +	/*this->animationChr._setUpdateRate(2.0); FIXME*/ +	this->bodyModel.bindAnim(&this->animationPat, 0.0); +	this->animationPat.setUpdateRateForEntry(1.0, 0); +	this->animationPat.setEntryByte34(0, 0); +	float num = (float)GenerateRandomNumber(0xB4); +	this->animationPat.setFrameForEntry(num, 0);  }  void daMegaGoomba_c::executeState_Walk() {  +	/* +	   nw4r::g3d::ResMdl mdl* = this->bodyModel.GetResMdl(); +	   ResNode resNode = mdl->GetResNode("leg_left"); +	   resNode._C; +	   mMtx mtx; +	   this->bodyModel.GetSomeMatrix(resNode._C, &mtx); +	   Vec vctr; +	   ConvertMatrixToTranslationVector(&mtx, &vctr); +	*/  	//HandleAcceleration(this); -	HandleXSpeed(this); -	UpdateObjectPosBasedOnSpeedValues_real(this); +	//HandleXSpeed(this); +	//UpdateObjectPosBasedOnSpeedValues_real(this);  	//DoGravityMaybe(); +	float delta = (this->direction) ? -this->XSpeed : this->XSpeed; +	this->pos.x += delta;  	int Choice;  	float TimerMax = 150.0; @@ -577,23 +551,9 @@ void daMegaGoomba_c::executeState_Walk() {  			case 1:  				doStateChange(&StateID_Launch);  				break; -			case 2: -				break; -			//FIXME test case for sound effects -			case 3: -				//OSReport("PlaySound(this, %d)\n", this->toPlay); -				if(this->timeToPlay) { -					//PlaySound(this, this->toPlay); -					this->timeToPlay = false; -					this->toPlay++; -					if(this->toPlay > 1977) -						this->toPlay = 0; -				} else {  -					this->timeToPlay = true; -				} -				break;  			default:  				this->direction = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, pos); +				rot.y = (this->direction) ? 0xe000 : 0x2000;  				this->timer = 0;  				break;  		}; | 
