summaryrefslogtreecommitdiff
path: root/src/shyguy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shyguy.cpp')
-rw-r--r--src/shyguy.cpp40
1 files changed, 37 insertions, 3 deletions
diff --git a/src/shyguy.cpp b/src/shyguy.cpp
index 192ac7d..354f2f6 100644
--- a/src/shyguy.cpp
+++ b/src/shyguy.cpp
@@ -89,6 +89,7 @@ class daShyGuy : public dEn_c {
void bindAnimChr_and_setUpdateRate(const char* name, int unk, float unk2, float rate);
void updateModelMatrices();
bool calculateTileCollisions();
+ bool willWalkOntoSuitableGround();
// void spriteCollision(ActivePhysics *apThis, ActivePhysics *apOther);
void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther);
@@ -154,6 +155,9 @@ daShyGuy *daShyGuy::build() {
extern "C" int SmoothRotation(short* rot, u16 amt, int unk2);
// extern "C" void addToList(StandOnTopCollider *self);
+ extern "C" bool HandlesEdgeTurns(dEn_c* actor);
+
+
CREATE_STATE(daShyGuy, Walk);
CREATE_STATE(daShyGuy, Turn);
CREATE_STATE(daShyGuy, RealWalk);
@@ -630,7 +634,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(12<<12, 4<<12, 0<<12);
+ static const lineSensor_s below(-12<<12, 12<<12, 0<<12);
static const pointSensor_s above(0<<12, 12<<12);
static const lineSensor_s adjacent(6<<12, 9<<12, 6<<12);
@@ -1195,6 +1199,29 @@ void daShyGuy::updateModelMatrices() {
///////////////
// Real Walk State
///////////////
+bool daShyGuy::willWalkOntoSuitableGround() {
+ static const float deltas[] = {2.5f, -2.5f};
+ VEC3 checkWhere = {
+ pos.x + deltas[direction],
+ 2.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 - 2.0f))
+ return true;
+ }
+
+ return false;
+}
+
+
void daShyGuy::beginState_RealWalk() {
//inline this piece of code
this->max_speed.x = (this->direction) ? -this->XSpeed : this->XSpeed;
@@ -1206,6 +1233,13 @@ void daShyGuy::updateModelMatrices() {
}
void daShyGuy::executeState_RealWalk() {
+ bool turne = this->willWalkOntoSuitableGround();
+ // bool turne = collMgr.isOnTopOfTile();
+ if (!turne) {
+ // pos.x = direction ? pos.x + 1.5 : pos.x - 1.5;
+ doStateChange(&StateID_RealTurn);
+ }
+
bool ret = calculateTileCollisions();
if (ret) {
doStateChange(&StateID_RealTurn);
@@ -1253,8 +1287,8 @@ void daShyGuy::updateModelMatrices() {
this->speed.x = 0;
this->x_speed_inc = 0;
- this->max_speed.y = -2.0;
- this->speed.y = -2.0;
+ this->max_speed.y = -4.0;
+ this->speed.y = -4.0;
this->y_speed_inc = -0.1875;
this->timer = 0;