diff options
| -rw-r--r-- | kamek_pal.x | 1 | ||||
| -rw-r--r-- | src/shyguy.cpp | 46 | 
2 files changed, 42 insertions, 5 deletions
diff --git a/kamek_pal.x b/kamek_pal.x index 55a94ce..94a9eb5 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -484,6 +484,7 @@ SECTIONS {  	s_80070760__14collisionMgr_cFv = 0x80070760;  	s_800707E0__14collisionMgr_cFv = 0x800707E0;  	getTileBehaviour1At__14collisionMgr_cFffUc = 0x80070BA0; +	getTileBehaviour2At__14collisionMgr_cFffUc = 0x80070BF0;  	/* freezeMgr_c */  	__ct_11freezeMgr_c = 0x800b8490; diff --git a/src/shyguy.cpp b/src/shyguy.cpp index ddd2923..21e285e 100644 --- a/src/shyguy.cpp +++ b/src/shyguy.cpp @@ -112,6 +112,8 @@ class daShyGuy : public dEn_c {  	void _vf14C();  	bool CreateIceActors(); +	bool willWalkOntoSuitableGround(); +  	USING_STATES(daShyGuy);  	DECLARE_STATE(Walk);  	DECLARE_STATE(Turn); @@ -655,7 +657,7 @@ int daShyGuy::onCreate() {  	_324 = 16.0f;  	// These structs tell stupid collider what to collide with - these are from koopa troopa -	static const lineSensor_s below(-0<<12, 0<<12, 0<<12); +	static const lineSensor_s below(-6<<12, 6<<12, 0<<12);  	static const pointSensor_s above(0<<12, 12<<12);  	static const lineSensor_s adjacent(6<<12, 9<<12, 6<<12); @@ -1190,6 +1192,29 @@ void daShyGuy::updateModelMatrices() {  ///////////////  // Real Walk State  /////////////// +bool daShyGuy::willWalkOntoSuitableGround() { +	static const float deltas[] = {2.5f, -2.5f}; +	VEC3 checkWhere = { +			pos.x + deltas[direction], +			4.0f + pos.y, +			pos.z}; + +	u32 props = collMgr.getTileBehaviour2At(checkWhere.x, checkWhere.y, currentLayerID); + +	//if (getSubType(props) == B_SUB_LEDGE) +	if (((props >> 16) & 0xFF) == 8) +		return false; + +	float someFloat = 0.0f; +	if (collMgr.sub_800757B0(&checkWhere, &someFloat, currentLayerID, 1, -1)) { +		if (someFloat < checkWhere.y && someFloat > (pos.y - 5.0f)) +			return true; +	} + +	return false; +} + +  	void daShyGuy::beginState_RealWalk() {  		//inline this piece of code  		this->max_speed.x = (this->direction) ? -this->XSpeed : this->XSpeed; @@ -1203,14 +1228,16 @@ void daShyGuy::updateModelMatrices() {  		chrAnimation.setUpdateRate(1.5f);  		if (distance) { +			// What the fuck. Somehow, having this code makes the shyguy not +			// fall through solid-on-top platforms...  			bool turn = collMgr.isOnTopOfTile();  			if (!turn) {  				if (!stillFalling) { -					stillFalling = 1; +					stillFalling = true;  					pos.x = direction ? pos.x + 1.5 : pos.x - 1.5; -					doStateChange(&StateID_RealTurn); } -			} -			else { stillFalling = 0; } +					doStateChange(&StateID_RealTurn); +				} +			} else stillFalling = false;  		}  		bool ret = calculateTileCollisions(); @@ -1218,6 +1245,15 @@ void daShyGuy::updateModelMatrices() {  			doStateChange(&StateID_RealTurn);  		} +		if (distance) { +			if (collMgr.isOnTopOfTile()) { +				if (!willWalkOntoSuitableGround()) { +					pos.x = direction ? pos.x + 1.5 : pos.x - 1.5; +					doStateChange(&StateID_RealTurn); +				} +			} +		} +  		if(this->chrAnimation.isAnimationDone()) {  			this->chrAnimation.setCurrentFrame(0.0);  		}  | 
