diff --git a/source/player/player.cpp b/source/player/player.cpp index a76b563f2..1bfdb234a 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -1688,6 +1688,18 @@ void CPlayer::setPlayerCollisionSize(int _x,int _y,int _w,int _h) setCollisionSize(_w,_h); setCollisionCentreOffset(_x,_y); } +void CPlayer::getPlayerCollisionSize(int *_x,int *_y,int *_w,int *_h) +{ + DVECTOR offset,size; + + offset=getCollisionCentreOffset(); + size=getCollisionSize(); + + *_x=offset.vx; + *_y=offset.vy; + *_w=size.vx; + *_h=size.vy; +} /*=========================================================================== end */ diff --git a/source/player/player.h b/source/player/player.h index 93821f249..1218f8c5b 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -337,6 +337,7 @@ public: }; void resetPlayerCollisionSizeToBase(); void setPlayerCollisionSize(int _x,int _y,int _w,int _h); + void getPlayerCollisionSize(int *_x,int *_y,int *_w,int *_h); diff --git a/source/player/pmchop.cpp b/source/player/pmchop.cpp index f5bc127a9..60405fb72 100644 --- a/source/player/pmchop.cpp +++ b/source/player/pmchop.cpp @@ -62,6 +62,10 @@ void CPlayerModeChop::enter() Params: Returns: ---------------------------------------------------------------------- */ +int chopcsx=0; +int chopcsy=-30; +int chopcsw=80; +int chopcsh=60; void CPlayerModeChop::think() { // If we're chopping then restore the 'real' anim number/frame before @@ -78,6 +82,8 @@ void CPlayerModeChop::think() if(!m_chopping&&getPadInputDown()&PI_ACTION&&canAttackFromThisState()) { m_chopFrame=0; + getPlayerCollisionSize(&m_savedCSX,&m_savedCSY,&m_savedCSW,&m_savedCSH); + setPlayerCollisionSize(chopcsx,chopcsy,chopcsw,chopcsh); m_chopping=true; } @@ -92,6 +98,7 @@ void CPlayerModeChop::think() m_player->setAnimNo(m_savedAnimNo); m_player->setAnimFrame(m_savedAnimFrame); m_chopping=false; + setPlayerCollisionSize(m_savedCSX,m_savedCSY,m_savedCSW,m_savedCSH); } } } @@ -132,6 +139,28 @@ ATTACK_STATE CPlayerModeChop::getAttackState() } } + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayerModeChop::setPlayerCollisionSize(int _x,int _y,int _w,int _h) +{ + if(m_chopping) + { + m_savedCSX=_x; + m_savedCSY=_y; + m_savedCSW=_w; + m_savedCSY=_h; + } + else + { + CPlayerModeBase::setPlayerCollisionSize(_x,_y,_w,_h); + } +} + /*---------------------------------------------------------------------- Function: Purpose: diff --git a/source/player/pmchop.h b/source/player/pmchop.h index 953f1dcf3..afd368ee9 100644 --- a/source/player/pmchop.h +++ b/source/player/pmchop.h @@ -45,6 +45,8 @@ public: virtual ATTACK_STATE getAttackState(); + virtual void setPlayerCollisionSize(int _x,int _y,int _w,int _h); + private: int canAttackFromThisState(); @@ -52,6 +54,8 @@ private: int m_chopFrame; int m_chopping; + int m_savedCSX,m_savedCSY,m_savedCSW,m_savedCSH; + }; diff --git a/source/player/pmodes.cpp b/source/player/pmodes.cpp index b5777e5ea..e42e8b54b 100644 --- a/source/player/pmodes.cpp +++ b/source/player/pmodes.cpp @@ -480,6 +480,11 @@ void CPlayerModeBase::setPlayerCollisionSize(int _x,int _y,int _w,int _h) { m_player->setPlayerCollisionSize(_x,_y,_w,_h); } +void CPlayerModeBase::getPlayerCollisionSize(int *_x,int *_y,int *_w,int *_h) +{ + m_player->getPlayerCollisionSize(_x,_y,_w,_h); +} + /*---------------------------------------------------------------------- Function: diff --git a/source/player/pmodes.h b/source/player/pmodes.h index 8a4f44d8c..d36c08da3 100644 --- a/source/player/pmodes.h +++ b/source/player/pmodes.h @@ -146,7 +146,8 @@ public: int isOnEdge(); int canMoveLeft(); int canMoveRight(); - void setPlayerCollisionSize(int _x,int _y,int _w,int _h); + virtual void setPlayerCollisionSize(int _x,int _y,int _w,int _h); + virtual void getPlayerCollisionSize(int *_x,int *_y,int *_w,int *_h); void moveLeft(); void moveRight(); diff --git a/source/thing/thing.h b/source/thing/thing.h index 5a63721e6..4f8eed8d7 100644 --- a/source/thing/thing.h +++ b/source/thing/thing.h @@ -141,6 +141,7 @@ public: // -- Collision -- public: DVECTOR getCollisionCentre() {return m_collisionCentre;} + DVECTOR getCollisionCentreOffset() {return m_collisionCentreOffset;} int getCollisionRadius() {return m_collisionRadius;} CRECT getCollisionArea() {return m_collisionArea;} s16 getCollisionAngle() {return m_collisionAngle;} // pkg - move to CNpcPlatform?