From 0e76fa991baf6d705ba20877f450fef5347da748 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 22 Jan 2001 21:02:59 +0000 Subject: [PATCH] --- makefile.gaz | 3 + source/player/player.cpp | 145 +++++++++++++++++++++----------------- source/player/player.h | 67 +++++++++--------- source/player/pschop.cpp | 43 ++++++++++- source/player/pschop.h | 8 +++ source/player/psfall.cpp | 73 +++++++++++++------ source/player/psfall.h | 4 ++ source/player/psjump.cpp | 19 +++-- source/player/psrun.cpp | 18 +++-- source/player/pstates.cpp | 16 ++++- source/player/pstates.h | 1 + 11 files changed, 263 insertions(+), 134 deletions(-) diff --git a/makefile.gaz b/makefile.gaz index 4736a0d91..54793ca68 100644 --- a/makefile.gaz +++ b/makefile.gaz @@ -127,6 +127,9 @@ paul_src := paul \ scenesel player_src := player \ + psbutt \ + pschop \ + psduck \ psfall \ psjump \ psrun \ diff --git a/source/player/player.cpp b/source/player/player.cpp index 3e797bfd4..83381e72e 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -52,19 +52,6 @@ Vars ---- */ -int JUMP_VELOCITY=8; -int MAX_JUMP_FRAMES=10; -int MAX_SAFE_FALL_FRAMES=20; -int GRAVITY_VALUE=4; -int TERMINAL_VELOCITY=8; -int MAX_RUN_VELOCITY=8; -int RUN_SPEEDUP=4; -int RUN_REVERSESLOWDOWN=2; -int RUN_SLOWDOWN=1; -int PSHIFT=2; - - - /*---------------------------------------------------------------------- Function: Purpose: @@ -75,11 +62,23 @@ int PSHIFT=2; #include "player\psjump.h" #include "player\psrun.h" #include "player\psfall.h" -CPlayerStateIdle testStateIdle; -CPlayerStateJump testStateJump; -CPlayerStateRun testStateRun; -CPlayerStateFall testStateFall; -CPlayerStateFallFar testStateFallFar; +#include "player\psbutt.h" +#include "player\pschop.h" +#include "player\psduck.h" +CPlayerStateIdle stateIdle; +CPlayerStateJump stateJump; +CPlayerStateRun stateRun; +CPlayerStateFall stateFall; +CPlayerStateFallFar stateFallFar; +CPlayerStateButtBounce stateButtBounce; +CPlayerStateButtBounceFall stateButtBounceFall; +CPlayerStateButtBounceLand stateButtBounceLand; +CPlayerStateChop stateChop; +CPlayerStateRunChop stateRunChop; +CPlayerStateDuck stateDuck; +CPlayerStateSoakUp stateSoackUp; +CPlayerStateGetUp stateGetup; + void CPlayer::init() { @@ -97,8 +96,13 @@ m_animFrame=0; m_moveVel.vy=0; setFacing(FACING_RIGHT); +#ifdef __USER_paul__ Pos.vx=50; - Pos.vy=400; + Pos.vy=200; +#else + Pos.vx=10; + Pos.vy=10; +#endif } /*---------------------------------------------------------------------- @@ -136,13 +140,21 @@ void CPlayer::think(int _frames) { // Think m_currentState->think(this); - Pos.vx+=m_moveVel.vx>>PSHIFT; - Pos.vy+=m_moveVel.vy>>PSHIFT; + Pos.vx+=m_moveVel.vx>>VELOCITY_SHIFT; + Pos.vy+=m_moveVel.vy>>VELOCITY_SHIFT; - // Ground collision + // Ground collision if(m_moveVel.vy&&isOnSolidGround()) { - if(m_moveVel.vx) + if(m_state==STATE_BUTTFALL) + { + setState(STATE_BUTTLAND); + } + else if(m_state==STATE_FALLFAR) + { + setState(STATE_IDLE); + } + else if(m_moveVel.vx) { setState(STATE_RUN); } @@ -190,30 +202,29 @@ void CPlayer::render() Params: Returns: ---------------------------------------------------------------------- */ -int metrics[CPlayer::NUM_PLAYER_METRICS]= +PlayerMetrics s_normalPlayerMetrics= { - 8, // PM__JUMP_VELOCITY - 10, // PM__MAX_JUMP_FRAMES - 20, // PM__MAX_SAFE_FALL_FRAMES - 4, // PM__GRAVITY_VALUE - 8, // PM__TERMINAL_VELOCITY - 8, // PM__MAX_RUN_VELOCITY - 4, // PM__RUN_SPEEDUP - 2, // PM__RUN_REVERSESLOWDOWN - 1, // PM__RUN_SLOWDOWN - 2, // PM__PSHIFT + { + 8, // PM__JUMP_VELOCITY + 10, // PM__MAX_JUMP_FRAMES + 20, // PM__MAX_SAFE_FALL_FRAMES + 4, // PM__GRAVITY_VALUE + 8, // PM__TERMINAL_VELOCITY + 8, // PM__MAX_RUN_VELOCITY + 4, // PM__RUN_SPEEDUP + 2, // PM__RUN_REVERSESLOWDOWN + 1, // PM__RUN_SLOWDOWN + } }; -int CPlayer::getPlayerMetric(PLAYER_METRIC _metric) +PlayerMetrics *CPlayer::getPlayerMetrics() { - return metrics[_metric]; + return &s_normalPlayerMetrics; } - - /*---------------------------------------------------------------------- Function: Purpose: @@ -222,16 +233,23 @@ int CPlayer::getPlayerMetric(PLAYER_METRIC _metric) ---------------------------------------------------------------------- */ CPlayerState *CPlayer::s_states[NUM_STATES]= { - &testStateIdle, // STATE_IDLE - &testStateJump, // STATE_JUMP - &testStateRun, // STATE_RUN - &testStateFall, // STATE_FALL - &testStateFallFar, // STATE_FALLFAR + &stateIdle, // STATE_IDLE + &stateJump, // STATE_JUMP + &stateRun, // STATE_RUN + &stateFall, // STATE_FALL + &stateFallFar, // STATE_FALLFAR + &stateButtBounce, // STATE_BUTTBOUNCE + &stateButtBounceFall, // STATE_BUTTFALL + &stateButtBounceLand, // STATE_BUTTLAND + &stateChop, // STATE_CHOP + &stateRunChop, // STATE_RUNCHOP + &stateDuck, // STATE_DUCK + &stateSoackUp, // STATE_SOAKUP + &stateGetup, // STATE_GETUP }; void CPlayer::setState(PLAYER_STATE _state) { - PAUL_DBGMSG("set state %d",_state); m_currentState=s_states[_state]; m_currentState->enter(this); m_state=_state; @@ -327,56 +345,55 @@ int CPlayer::isOnSolidGround() void CPlayer::moveLeft() { + PlayerMetrics *metrics; + metrics=getPlayerMetrics(); + setFacing(FACING_LEFT); if(m_moveVel.vx<=0) { - m_moveVel.vx-=RUN_SPEEDUP; - if(m_moveVel.vx<-MAX_RUN_VELOCITY<m_metric[PM__RUN_SPEEDUP]; + if(m_moveVel.vx<-metrics->m_metric[PM__MAX_RUN_VELOCITY]<m_metric[PM__MAX_RUN_VELOCITY]<m_metric[PM__RUN_REVERSESLOWDOWN]; } } void CPlayer::moveRight() { + PlayerMetrics *metrics; + metrics=getPlayerMetrics(); + setFacing(FACING_RIGHT); if(m_moveVel.vx>=0) { - m_moveVel.vx+=RUN_SPEEDUP; - if(m_moveVel.vx>MAX_RUN_VELOCITY<m_metric[PM__RUN_SPEEDUP]; + if(m_moveVel.vx>metrics->m_metric[PM__MAX_RUN_VELOCITY]<m_metric[PM__MAX_RUN_VELOCITY]<=0) -// { -// setFacing(FACING_RIGHT); -// } + m_moveVel.vx+=metrics->m_metric[PM__RUN_REVERSESLOWDOWN]; } } void CPlayer::slowdown() { + PlayerMetrics *metrics; + metrics=getPlayerMetrics(); + if(m_moveVel.vx<0) { - m_moveVel.vx+=RUN_SLOWDOWN; + m_moveVel.vx+=metrics->m_metric[PM__RUN_SLOWDOWN]; if(m_moveVel.vx>0)m_moveVel.vx=0; } else if(m_moveVel.vx>0) { - m_moveVel.vx-=RUN_SLOWDOWN; + m_moveVel.vx-=metrics->m_metric[PM__RUN_SLOWDOWN]; if(m_moveVel.vx<0)m_moveVel.vx=0; } } diff --git a/source/player/player.h b/source/player/player.h index 5d34568e3..b0ce3f652 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -42,13 +42,6 @@ Tyepdefs && Defines ------------------- */ -#define ANIM_IDLE_SHORT 0 -#define ANIM_IDLE_LONG 1 -#define ANIM_JUMP 0 -#define ANIM_RUNSTART 2 -#define ANIM_RUN 3 -#define ANIM_RUNSTOP 4 - typedef enum { STATE_IDLE, @@ -56,6 +49,14 @@ typedef enum STATE_RUN, STATE_FALL, STATE_FALLFAR, + STATE_BUTTBOUNCE, + STATE_BUTTFALL, + STATE_BUTTLAND, + STATE_CHOP, + STATE_RUNCHOP, + STATE_DUCK, + STATE_SOAKUP, + STATE_GETUP, NUM_STATES, }PLAYER_STATE; @@ -66,51 +67,47 @@ enum FACING_RIGHT=-1, }; - -extern int JUMP_VELOCITY; -extern int MAX_JUMP_FRAMES; -extern int MAX_SAFE_FALL_FRAMES; -extern int GRAVITY_VALUE; -extern int TERMINAL_VELOCITY; -extern int MAX_RUN_VELOCITY; -extern int RUN_SPEEDUP; -extern int RUN_REVERSESLOWDOWN; -extern int RUN_SLOWDOWN; -extern int PSHIFT; +typedef enum +{ + PM__JUMP_VELOCITY, + PM__MAX_JUMP_FRAMES, + PM__MAX_SAFE_FALL_FRAMES, + PM__GRAVITY_VALUE, + PM__TERMINAL_VELOCITY, + PM__MAX_RUN_VELOCITY, + PM__RUN_SPEEDUP, + PM__RUN_REVERSESLOWDOWN, + PM__RUN_SLOWDOWN, + + NUM_PLAYER_METRICS +}PLAYER_METRIC; /*---------------------------------------------------------------------- Structure defintions -------------------- */ +struct PlayerMetrics +{ + s16 m_metric[NUM_PLAYER_METRICS]; +}; + + class CPlayer : public CThing { public: - typedef enum + enum { - PM__JUMP_VELOCITY, - PM__MAX_JUMP_FRAMES, - PM__MAX_SAFE_FALL_FRAMES, - PM__GRAVITY_VALUE, - PM__TERMINAL_VELOCITY, - PM__MAX_RUN_VELOCITY, - PM__RUN_SPEEDUP, - PM__RUN_REVERSESLOWDOWN, - PM__RUN_SLOWDOWN, - PM__PSHIFT, - - NUM_PLAYER_METRICS - }PLAYER_METRIC; - + VELOCITY_SHIFT=2 + }; void init(); void shutdown(); void think(int _frames); void render(); - protected: - int getPlayerMetric(PLAYER_METRIC _metric); + PlayerMetrics *getPlayerMetrics(); void setState(PLAYER_STATE _state); int getFacing(); diff --git a/source/player/pschop.cpp b/source/player/pschop.cpp index 5a6adedb8..72955081f 100644 --- a/source/player/pschop.cpp +++ b/source/player/pschop.cpp @@ -28,8 +28,6 @@ #endif - - /* Std Lib ------- */ @@ -84,5 +82,46 @@ void CPlayerStateChop::think(CPlayer *_player) } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayerStateRunChop::think(CPlayer *_player) +{ + int control; + control=getPadInput(_player); + + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT)) + { + moveLeft(_player); + } + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT)) + { + moveRight(_player); + } + else + { + DVECTOR move; + move=getMoveVelocity(_player); + if(move.vx==0) + { + setState(_player,STATE_IDLE); + setAnimNo(_player,ANIM_PLAYER_ANIM_RUNSTOP); + } + else + { + slowdown(_player); + } + } + + if(advanceAnimFrameAndCheckForEndOfAnim(_player)) + { + setState(_player,STATE_RUN); + } +} + + /*=========================================================================== end */ diff --git a/source/player/pschop.h b/source/player/pschop.h index f4802f030..a784fdc58 100644 --- a/source/player/pschop.h +++ b/source/player/pschop.h @@ -41,6 +41,14 @@ public: }; +class CPlayerStateRunChop : public CPlayerStateChop +{ +public: + void think(class CPlayer *_player); + +}; + + /*---------------------------------------------------------------------- Globals ------- */ diff --git a/source/player/psfall.cpp b/source/player/psfall.cpp index f674697e3..7e63b5d71 100644 --- a/source/player/psfall.cpp +++ b/source/player/psfall.cpp @@ -78,29 +78,31 @@ void CPlayerStateFall::enter(CPlayer *_player) ---------------------------------------------------------------------- */ void CPlayerStateFall::think(CPlayer *_player) { - int control; - DVECTOR move; + PlayerMetrics *metrics; + int control; + DVECTOR move; + metrics=getPlayerMetrics(_player); control=getPadInput(_player); move=getMoveVelocity(_player); - move.vy+=GRAVITY_VALUE; - if(move.vy>=TERMINAL_VELOCITY<m_metric[PM__GRAVITY_VALUE]; + if(move.vy>=metrics->m_metric[PM__TERMINAL_VELOCITY]<m_metric[PM__TERMINAL_VELOCITY]<MAX_SAFE_FALL_FRAMES) + if(m_fallFrames>metrics->m_metric[PM__MAX_SAFE_FALL_FRAMES]) { setState(_player,STATE_FALLFAR); } } setMoveVelocity(_player,&move); - if(control&PAD_LEFT) + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT)) { moveLeft(_player); } - else if(control&PAD_RIGHT) + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT)) { moveRight(_player); } @@ -109,22 +111,53 @@ void CPlayerStateFall::think(CPlayer *_player) slowdown(_player); } -/* - if(isOnSolidGround(_player)) + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION)&&control&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN)) { - move=getMoveVelocity(_player); -// if(move.vx) -// { -// setState(_player,STATE_RUN); -// } -// else - { - setState(_player,STATE_IDLE); - } + move.vx=0; move.vy=0; setMoveVelocity(_player,&move); + setState(_player,STATE_BUTTBOUNCE); + } +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayerStateFallFar::enter(CPlayer *_player) +{ + setAnimNo(_player,ANIM_PLAYER_ANIM_FALL); +} + + +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayerStateFallFar::think(CPlayer *_player) +{ + int control; + DVECTOR move; + + control=getPadInput(_player); + + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT)) + { + moveLeft(_player); + } + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT)) + { + moveRight(_player); + } + else + { + slowdown(_player); } -*/ } diff --git a/source/player/psfall.h b/source/player/psfall.h index ca54a6ea6..eaf0bf432 100644 --- a/source/player/psfall.h +++ b/source/player/psfall.h @@ -46,6 +46,10 @@ private: class CPlayerStateFallFar : public CPlayerStateFall { +private: + void enter(class CPlayer *_player); + void think(class CPlayer *_player); + }; diff --git a/source/player/psjump.cpp b/source/player/psjump.cpp index 2819979c1..5305528bc 100644 --- a/source/player/psjump.cpp +++ b/source/player/psjump.cpp @@ -63,10 +63,14 @@ ---------------------------------------------------------------------- */ void CPlayerStateJump::enter(CPlayer *_player) { + PlayerMetrics *metrics; + + metrics=getPlayerMetrics(_player); + setAnimNo(_player,ANIM_PLAYER_ANIM_JUMPSTART); m_jumpFrames=0; DVECTOR move=getMoveVelocity(_player); - move.vy=-JUMP_VELOCITY<m_metric[PM__JUMP_VELOCITY]<m_metric[PM__MAX_JUMP_FRAMES]&&control&CPadConfig::getButton(CPadConfig::PAD_CFG_JUMP)) { m_jumpFrames++; } @@ -96,16 +103,16 @@ void CPlayerStateJump::think(CPlayer *_player) } else { - move.vy+=GRAVITY_VALUE; + move.vy+=metrics->m_metric[PM__GRAVITY_VALUE]; } setMoveVelocity(_player,&move); } - if(control&PAD_LEFT) + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT)) { moveLeft(_player); } - else if(control&PAD_RIGHT) + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT)) { moveRight(_player); } diff --git a/source/player/psrun.cpp b/source/player/psrun.cpp index e09bb0376..6e200422e 100644 --- a/source/player/psrun.cpp +++ b/source/player/psrun.cpp @@ -78,11 +78,11 @@ void CPlayerStateRun::enter(CPlayer *_player) setAnimNo(_player,ANIM_PLAYER_ANIM_RUNSTART); } - if(control&PAD_LEFT) + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT)) { setFacing(_player,FACING_LEFT); } - else if(control&PAD_RIGHT) + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT)) { setFacing(_player,FACING_RIGHT); } @@ -100,15 +100,23 @@ void CPlayerStateRun::think(CPlayer *_player) int control; control=getPadInput(_player); - if(control&PAD_CROSS) + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_JUMP)) { setState(_player,STATE_JUMP); } - if(control&PAD_LEFT) + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN)) + { + setState(_player,STATE_DUCK); + } + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION)) + { + setState(_player,STATE_RUNCHOP); + } + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT)) { moveLeft(_player); } - else if(control&PAD_RIGHT) + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT)) { moveRight(_player); } diff --git a/source/player/pstates.cpp b/source/player/pstates.cpp index 3bdf2090e..9848d69ad 100644 --- a/source/player/pstates.cpp +++ b/source/player/pstates.cpp @@ -24,6 +24,10 @@ /*----------------------------------------------------------------------*/ +PlayerMetrics *CPlayerState::getPlayerMetrics(CPlayer *_player) +{ + return _player->getPlayerMetrics(); +} void CPlayerState::setState(CPlayer *_player,int _state) { _player->setState((PLAYER_STATE)_state); @@ -117,14 +121,22 @@ void CPlayerStateIdle::think(CPlayer *_player) int control; control=getPadInput(_player); - if(control&PAD_CROSS) + if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_JUMP)) { setState(_player,STATE_JUMP); } - else if(control&(PAD_LEFT|PAD_RIGHT)) + else if(control&(CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT)|CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))) { setState(_player,STATE_RUN); } + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION)) + { + setState(_player,STATE_CHOP); + } + else if(control&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN)) + { + setState(_player,STATE_DUCK); + } else if(advanceAnimFrameAndCheckForEndOfAnim(_player)) { if(getRndRange(100)<95) diff --git a/source/player/pstates.h b/source/player/pstates.h index 2d1a38e40..9acfd8382 100644 --- a/source/player/pstates.h +++ b/source/player/pstates.h @@ -42,6 +42,7 @@ public: protected: + struct PlayerMetrics *getPlayerMetrics(class CPlayer *_player); void setState(class CPlayer *_player,int _state); int getFacing(class CPlayer *_player); void setFacing(class CPlayer *_player,int _facing);