diff --git a/source/player/pmcoral.cpp b/source/player/pmcoral.cpp new file mode 100644 index 000000000..457efda65 --- /dev/null +++ b/source/player/pmcoral.cpp @@ -0,0 +1,188 @@ +/*========================================================================= + + pmcoral.cpp + + Author: PKG + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2001 Climax Development Ltd + +===========================================================================*/ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +#include "player\pmcoral.h" + + +/* Std Lib + ------- */ + +/* Data + ---- */ + +#ifndef __ANIM_SPONGEBOB_HEADER__ +#include +#endif + + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +/*---------------------------------------------------------------------- + Function Prototypes + ------------------- */ + +/*---------------------------------------------------------------------- + Vars + ---- */ + +static PlayerMetrics s_playerMetrics= +{ { + DEFAULT_PLAYER_JUMP_VELOCITY/2, // PM__JUMP_VELOCITY + DEFAULT_PLAYER_MAX_JUMP_FRAMES/2, // PM__MAX_JUMP_FRAMES + DEFAULT_PLAYER_MAX_SAFE_FALL_FRAMES, // PM__MAX_SAFE_FALL_FRAMES + DEFAULT_PLAYER_MAX_RUN_VELOCITY/3, // PM__MAX_RUN_VELOCITY + DEFAULT_PLAYER_RUN_SPEEDUP/2, // PM__RUN_SPEEDUP + DEFAULT_PLAYER_RUN_REVERSESLOWDOWN, // PM__RUN_REVERSESLOWDOWN + DEFAULT_PLAYER_RUN_SLOWDOWN, // PM__RUN_SLOWDOWN + DEFAULT_PLAYER_PLAYER_GRAVITY, // PM__GRAVITY + DEFAULT_PLAYER_TERMINAL_VELOCITY, // PM__TERMINAL_VELOCITY +} }; + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayerModeCoralBlower::enter() +{ + m_chopping=false; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayerModeCoralBlower::think() +{ + // If we're chopping then restore the 'real' anim number/frame before + // doing the think so that the rest of the code doesn't know what + // is going on ;) + if(m_chopping) + { + setAnimNo(m_savedAnimNo); + setAnimFrame(m_savedAnimFrame); + } + CPlayerModeBase::think(); + + // Start to chop? + if(!m_chopping&&getPadInputDown()&PI_ACTION&&canAttackFromThisState()) + { + m_chopFrame=0; + m_chopping=true; + } + + // Chopping? + if(m_chopping) + { + m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); + m_player->setAnimFrame(m_chopFrame); + m_chopFrame++; + if(m_chopFrame>=m_player->getAnimFrameCount()) + { +PAUL_DBGMSG("restore %d,%d",m_savedAnimNo,m_savedAnimFrame); + m_player->setAnimNo(m_savedAnimNo); + m_player->setAnimFrame(m_savedAnimFrame); + m_chopping=false; + } + } +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +const struct PlayerMetrics *CPlayerModeCoralBlower::getPlayerMetrics() +{ + return &s_playerMetrics; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayerModeCoralBlower::setAnimNo(int _animNo) +{ + CPlayerModeBase::setAnimNo(_animNo); + m_savedAnimNo=_animNo; +} + +void CPlayerModeCoralBlower::setAnimFrame(int _animFrame) +{ + CPlayerModeBase::setAnimFrame(_animFrame); + m_savedAnimFrame=_animFrame; +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int CPlayerModeCoralBlower::isInAttackState() +{ + return m_chopping||CPlayerModeBase::isInAttackState(); +} + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +int CPlayerModeCoralBlower::canAttackFromThisState() +{ + int ret=false; + + switch(getState()) + { + case STATE_IDLE: + case STATE_IDLETEETER: + case STATE_JUMP: + case STATE_RUN: + case STATE_FALL: + ret=true; + break; + + case STATE_FALLFAR: + case STATE_BUTTBOUNCE: + case STATE_BUTTFALL: + case STATE_BUTTLAND: + case STATE_DUCK: + case STATE_SOAKUP: + case STATE_GETUP: + break; + } + + return ret; +} + +/*=========================================================================== +end */ diff --git a/source/player/pmcoral.h b/source/player/pmcoral.h new file mode 100644 index 000000000..4f438de0a --- /dev/null +++ b/source/player/pmcoral.h @@ -0,0 +1,76 @@ +/*========================================================================= + + pmcoral.h + + Author: PKG + Created: + Project: Spongebob + Purpose: + + Copyright (c) 2001 Climax Development Ltd + +===========================================================================*/ + +#ifndef __PLAYER_PMCORAL_H__ +#define __PLAYER_PMCORAL_H__ + +/*---------------------------------------------------------------------- + Includes + -------- */ + +#ifndef __PLAYER_PMODES_H__ +#include "player\pmodes.h" +#endif + + +/* Std Lib + ------- */ + +/*---------------------------------------------------------------------- + Tyepdefs && Defines + ------------------- */ + +/*---------------------------------------------------------------------- + Structure defintions + -------------------- */ + +class CPlayerModeCoralBlower : public CPlayerModeBase +{ +public: + virtual void enter(); + virtual void think(); + + virtual const struct PlayerMetrics *getPlayerMetrics(); + + virtual void setAnimNo(int _animNo); + virtual void setAnimFrame(int _animFrame); + + virtual int isInAttackState(); + +private: + int canAttackFromThisState(); + + int m_savedAnimNo,m_savedAnimFrame; + int m_chopFrame; + int m_chopping; + +}; + + +/*---------------------------------------------------------------------- + Globals + ------- */ + +/*---------------------------------------------------------------------- + Functions + --------- */ + +/*---------------------------------------------------------------------- */ + +#endif /* __PLAYER_PMCORAL_H__ */ + +/*=========================================================================== + end */ + + +