diff options
| -rwxr-xr-x | include/game.h | 4 | ||||
| -rw-r--r-- | kamek_pal.x | 1 | ||||
| -rw-r--r-- | src/apDebug.cpp | 95 | 
3 files changed, 66 insertions, 34 deletions
| diff --git a/include/game.h b/include/game.h index fe7dee7..4d9def6 100755 --- a/include/game.h +++ b/include/game.h @@ -1892,7 +1892,7 @@ class BasicCollider {  		dStageActor_c *owner;
 -		BasicCollider *prev, *next;
 +		BasicCollider *next, *prev;
  		/* dRSomething */ void *ptrToRSomething;
  		float rightX, rightY, leftX, leftY;
 @@ -1907,6 +1907,8 @@ class BasicCollider {  		u8 _43;
  		u8 isInList;
  		u8 _45, _46, _47, _48, _49, _4A;
 +
 +		static BasicCollider *globalListHead;
  };
  class StandOnTopCollider : public BasicCollider {
 diff --git a/kamek_pal.x b/kamek_pal.x index 83da2f5..ba30889 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -166,6 +166,7 @@ SECTIONS {  	__dt__13BasicColliderFv = 0x800DAEF0; +	globalListHead__13BasicCollider = 0x8042A2FC;  	addToList__13BasicColliderFv = 0x800DAF70; diff --git a/src/apDebug.cpp b/src/apDebug.cpp index bcaf33f..01669bf 100644 --- a/src/apDebug.cpp +++ b/src/apDebug.cpp @@ -32,7 +32,7 @@ class APDebugDrawer : public m3d::proc_c {  static APDebugDrawer defaultInstance; -static bool enableDebugMode = false; +static bool enableDebugMode = true;  int APDebugDraw() {  	if (enableDebugMode) @@ -60,6 +60,7 @@ void APDebugDrawer::drawMe() {  }  void APDebugDrawer::drawOpa() { +	drawXlu();  }  void APDebugDrawer::drawXlu() {  	GXClearVtxDesc(); @@ -94,8 +95,8 @@ void APDebugDrawer::drawXlu() {  	GXSetZCompLoc(GX_FALSE);  	GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); -	GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE); -	GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0); +	GXSetZMode(GX_TRUE, GX_ALWAYS, GX_FALSE); +	GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_OR, GX_ALWAYS, 0);  	GXSetFog(GX_FOG_NONE, 0, 0, 0, 0, (GXColor){0,0,0,0});  	GXSetFogRangeAdj(GX_FALSE, 0, 0); @@ -108,6 +109,12 @@ void APDebugDrawer::drawXlu() {  	GXSetTevColor(GX_TEVREG0, (GXColor){255,255,255,255});  	GXSetTevColor(GX_TEVREG1, (GXColor){0,0,0,255}); +	nw4r::g3d::Camera cam(GetCameraByID(GetCurrentCameraID())); +	Mtx matrix; +	cam.GetCameraMtx(&matrix); +	GXLoadPosMtxImm(matrix, 0); +	GXSetCurrentMtx(0); +  	ActivePhysics *ap = ActivePhysics::globalListHead;  	while (ap) { @@ -153,33 +160,33 @@ void APDebugDrawer::drawXlu() {  		}  		// Top -		GXPosition3f32(tlX, tlY, 8000.0f); +		GXPosition3f32(tlX, tlY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(trX, trY, 8000.0f); +		GXPosition3f32(trX, trY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Left -		GXPosition3f32(tlX, tlY, 8000.0f); +		GXPosition3f32(tlX, tlY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(blX, blY, 8000.0f); +		GXPosition3f32(blX, blY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Right -		GXPosition3f32(trX, trY, 8000.0f); +		GXPosition3f32(trX, trY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(brX, brY, 8000.0f); +		GXPosition3f32(brX, brY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Bottom -		GXPosition3f32(blX, blY, 8000.0f); +		GXPosition3f32(blX, blY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(brX, brY, 8000.0f); +		GXPosition3f32(brX, brY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Diagonal -		GXPosition3f32(trX, trY, 8000.0f); +		GXPosition3f32(trX, trY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(blX, blY, 8000.0f); +		GXPosition3f32(blX, blY, 9000.0f);  		GXColor4u8(r,g,b,a);  		GXEnd(); @@ -198,45 +205,43 @@ void APDebugDrawer::drawXlu() {  		GXBegin(GX_LINES, GX_VTXFMT0, 10); -		float centreX = p->owner->pos.x; -		float centreY = p->owner->pos.y; -		float edgeDistX = p->_88; -		float edgeDistY = p->_8C; - -		float tlX = centreX + p->x, tlY = centreY + p->y; -		float trX = centreX + p->_88, trY = centreY + p->y; - -		float blX = centreX + p->x, blY = centreY + p->_8C; -		float brX = centreX + p->_88, brY = centreY + p->_8C; +		float tlX = p->unkArray[0].x; +		float tlY = p->unkArray[0].y; +		float trX = p->unkArray[3].x; +		float trY = p->unkArray[3].y; +		float blX = p->unkArray[1].x; +		float blY = p->unkArray[1].y; +		float brX = p->unkArray[2].x; +		float brY = p->unkArray[2].y;  		// Top -		GXPosition3f32(tlX, tlY, 8000.0f); +		GXPosition3f32(tlX, tlY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(trX, trY, 8000.0f); +		GXPosition3f32(trX, trY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Left -		GXPosition3f32(tlX, tlY, 8000.0f); +		GXPosition3f32(tlX, tlY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(blX, blY, 8000.0f); +		GXPosition3f32(blX, blY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Right -		GXPosition3f32(trX, trY, 8000.0f); +		GXPosition3f32(trX, trY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(brX, brY, 8000.0f); +		GXPosition3f32(brX, brY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Bottom -		GXPosition3f32(blX, blY, 8000.0f); +		GXPosition3f32(blX, blY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(brX, brY, 8000.0f); +		GXPosition3f32(brX, brY, 9000.0f);  		GXColor4u8(r,g,b,a);  		// Diagonal -		GXPosition3f32(trX, trY, 8000.0f); +		GXPosition3f32(trX, trY, 9000.0f);  		GXColor4u8(r,g,b,a); -		GXPosition3f32(blX, blY, 8000.0f); +		GXPosition3f32(blX, blY, 9000.0f);  		GXColor4u8(r,g,b,a);  		GXEnd(); @@ -245,6 +250,30 @@ void APDebugDrawer::drawXlu() {  	} +	// Basic Colliders +	BasicCollider *bc = BasicCollider::globalListHead; +	while (bc) { +		u32 uptr = (u32)bc; +		u8 r = (uptr>>16)&0xFF; +		u8 g = (uptr>>8)&0xFF; +		u8 b = uptr&0xFF; +		u8 a = 0xFF; + +		switch (bc->type) { +			case 0: case 2: +				GXBegin(GX_LINES, GX_VTXFMT0, 2); +				GXPosition3f32(bc->leftX, bc->leftY, 9000.0f); +				GXColor4u8(r,g,b,a); +				GXPosition3f32(bc->rightX, bc->rightY, 9000.0f); +				GXColor4u8(r,g,b,a); +				GXEnd(); +				break; +		} + +		bc = bc->next; +	} + +  	// Now, the hardest one.. CollisionMgr_c!  	fBase_c *fb = 0;  	while ((fb = fBase_c::searchByBaseType(2, fb))) { | 
