diff options
| author | Stephen Simpson <megazig@gmail.com> | 2011-10-13 21:23:12 -0500 | 
|---|---|---|
| committer | Stephen Simpson <megazig@gmail.com> | 2011-10-13 21:23:12 -0500 | 
| commit | 9098cb8b28c089d8abe1b2ff7d9010ab5c6d8766 (patch) | |
| tree | 04921be487c55c1e995aedff1a7059b0a68342b1 /src | |
| parent | 7a4ee17ea46742a5aff331ad195eb5be098c01b2 (diff) | |
| download | kamek-9098cb8b28c089d8abe1b2ff7d9010ab5c6d8766.tar.gz kamek-9098cb8b28c089d8abe1b2ff7d9010ab5c6d8766.zip  | |
Started work on animations
Diffstat (limited to 'src')
| -rw-r--r-- | src/bossMegaGoomba.cpp | 103 | ||||
| -rw-r--r-- | src/effects.cpp | 9 | ||||
| -rw-r--r-- | src/effects.h | 8 | 
3 files changed, 101 insertions, 19 deletions
diff --git a/src/bossMegaGoomba.cpp b/src/bossMegaGoomba.cpp index 9817a02..8d4d19a 100644 --- a/src/bossMegaGoomba.cpp +++ b/src/bossMegaGoomba.cpp @@ -11,7 +11,14 @@ class daMegaGoomba_c : public dEn_c {  	int onDraw();  	mHeapAllocator_c allocator; +	nw4r::g3d::ResFile resFile;  	m3d::mdl_c bodyModel; +	m3d::anmChr_c animationChr; +	nw4r::g3d::ResAnmTexPat resTexPat; +	m3d::anmTexPat_c animationPat; +	//mAllocator_c allocator2; +	//FIXME add this back in ? +	//EGG::Effect effect;  	float timer;  	float dying; @@ -59,6 +66,7 @@ class daMegaGoomba_c : public dEn_c {  	void dieFall_Execute();  	static daMegaGoomba_c *build(); +	void setupBodyModel();  	void updateModelMatrices();  //	bool preSpriteCollision(ActivePhysics *apThis, ActivePhysics *apOther); @@ -92,9 +100,7 @@ class daMegaGoomba_c : public dEn_c {  	DECLARE_STATE(Launch);  }; -extern "C" void *PlaySound(dStageActor_c *, int soundID); -extern void * HandleXSpeed(daMegaGoomba_c*); -//extern void * HandleYSpeed(daMegaGoomba_c*); +//extern "C" void *PlaySound(dStageActor_c *, int soundID);  daMegaGoomba_c *daMegaGoomba_c::build() {  	void *buffer = AllocFromGameHeap1(sizeof(daMegaGoomba_c)); @@ -102,6 +108,7 @@ daMegaGoomba_c *daMegaGoomba_c::build() {  } +//FIXME makes these dEn_c::HandleXSpeed();  extern "C" void *HandleXSpeed(daMegaGoomba_c *);  extern "C" void *HandleYSpeed(daMegaGoomba_c *);  extern "C" void *UpdateObjectPosBasedOnSpeedValues_real(daMegaGoomba_c *); @@ -189,27 +196,77 @@ void daMegaGoomba_c::dieFall_Execute() {  	this->dEn_c::dieFall_Execute();  } -int daMegaGoomba_c::onCreate() { +void HexDump(char* address, u32 length) { +	length = (length + 0x1f) & ~0x1f; +	char line[0x11] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +	for(u32 ii=0; ii < length; ii += 0x10) { +		for(u32 jj=0; jj < 0x10; jj++) { +			line[jj] = address[ii+jj]; +		} +		OSReport("%08x: %04x %04x %04x %04x  %04x %04x %04x %04x |%s|\n", +				(u32)(address+ii), +				*(u16*)(address+ii+0x00), +				*(u16*)(address+ii+0x02), +				*(u16*)(address+ii+0x04), +				*(u16*)(address+ii+0x06), +				*(u16*)(address+ii+0x08), +				*(u16*)(address+ii+0x0a), +				*(u16*)(address+ii+0x0c), +				*(u16*)(address+ii+0x0e), +				line); +		for(u32 jj=0; jj<0x10; jj++) line[jj] = 0; +	} +} -	OSReport("Creating the MegaGoomba Model\n"); +void daMegaGoomba_c::setupBodyModel() { +	OSReport("Here 0\n");  	allocator.link(-1, GameHeaps[0], 0, 0x20); -	nw4r::g3d::ResFile rf(getResource("kuribo", "g3d/t02.brres")); -	bodyModel.setup(rf.GetResMdl("kuribo"), &allocator, 0x224, 1, 0); +	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); + + +	OSReport("Here 8\n");  	allocator.unlink(); +} -	OSReport("Creating MegaGoomba's Physics Struct\n"); +int daMegaGoomba_c::onCreate() { -	// Keeping naming +	OSReport("Creating MG's body model\n"); +	setupBodyModel(); + +	OSReport("Creating MegaGoomba's Physics Struct\n"); +	//TODO find data for a fun, yet challenging, battle  	ActivePhysics::Info HitMeBaby;  	HitMeBaby.xDistToCenter = 0.0;  	HitMeBaby.yDistToCenter = 18.0;  	HitMeBaby.xDistToEdge   = 24.0;  	HitMeBaby.yDistToEdge   = 24.0; - -	//TODO find data for a fun, yet challenging, battle  	HitMeBaby.category1 = 0x3;  	HitMeBaby.category2 = 0x0;  	HitMeBaby.bitfield1 = 0x4f; @@ -217,11 +274,12 @@ int daMegaGoomba_c::onCreate() {  	HitMeBaby.unkShort1C = 0;  	HitMeBaby.callback = &dEn_c::collisionCallback; - -	OSReport("Making the Physics Class and adding to the list\n");  	this->aPhysics.initWithStruct(this, &HitMeBaby);  	this->aPhysics.addToList(); +	//sub_80034060(); + +	//FIXME move this stuff elsewhere  	pos.y -= 16.0;  	pos.z = 3000.0;  	rot.x = rot.y = rot.z = speed.x = dying = 0.0; @@ -486,12 +544,21 @@ 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  + +	// DO SOMETHING COOL // +	OSReport("Here11\n"); +	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");  }  void daMegaGoomba_c::executeState_Walk() {  -	//HandleAcceleration(); -	HandleXSpeed(); -	UpdateObjectPosBasedOnSpeedValues_real(); +	//HandleAcceleration(this); +	HandleXSpeed(this); +	UpdateObjectPosBasedOnSpeedValues_real(this);  	//DoGravityMaybe();  	int Choice; @@ -514,9 +581,9 @@ void daMegaGoomba_c::executeState_Walk() {  				break;  			//FIXME test case for sound effects  			case 3: -				OSReport("PlaySound(this, %d)\n", this->toPlay); +				//OSReport("PlaySound(this, %d)\n", this->toPlay);  				if(this->timeToPlay) { -					PlaySound(this, this->toPlay); +					//PlaySound(this, this->toPlay);  					this->timeToPlay = false;  					this->toPlay++;  					if(this->toPlay > 1977) diff --git a/src/effects.cpp b/src/effects.cpp index 40f08a2..3b2d5c7 100644 --- a/src/effects.cpp +++ b/src/effects.cpp @@ -1041,6 +1041,15 @@ bool CreateEffect(const char* name, Vec* pos) {  	return SpawnEffect(name, 0, pos, 0, 0);  } +bool CreateEffect(int effect_num, Vec* pos, S16Vec* rot, Vec* scale) { +	if (effect_num > 1000) +		return false; +	if (effect_num < 0) +		return false; +	const char* effect_name = effects_name_list[effect_num]; +	return SpawnEffect(effect_name, 0, pos, rot, scale); +} +  /*  void* CustomEffectSpawn(const char* name) {  	// FILL ME IN diff --git a/src/effects.h b/src/effects.h index ea4ba2a..ceda53f 100644 --- a/src/effects.h +++ b/src/effects.h @@ -4,9 +4,15 @@  #include <common.h>  #include <game.h> +/* +S16Vec* tRot = &(S16Vec){ 0, 0, 0}; +Vec* tScale = &(Vec){0.0, 0.0, 0.0}; +*/ +  bool CreateEffect(dEn_c* enemy, int effect_num);  bool CreateEffect(Vec* pos, S16Vec* rot, Vec* scale, int effect_num); -bool CreateEffect(const char* name, Vec* pos); +bool CreateEffect(Vec* pos, S16Vec* rot, Vec* scale, int effect_num); +bool CreateEffect(int effect_num, Vec* pos, S16Vec* rot = 0, Vec* scale = 0);  // Actually will return an EGG::Effect instance  //void* CustomEffectSpawn(const char* name);  | 
