This commit is contained in:
parent
854dd569d8
commit
89cd3b1fcc
8 changed files with 127 additions and 24 deletions
|
@ -146,6 +146,7 @@ player_src := panimsfx \
|
||||||
pmodes \
|
pmodes \
|
||||||
psbutt \
|
psbutt \
|
||||||
pschop \
|
pschop \
|
||||||
|
psdead \
|
||||||
psduck \
|
psduck \
|
||||||
psfall \
|
psfall \
|
||||||
psidle \
|
psidle \
|
||||||
|
|
|
@ -68,6 +68,8 @@
|
||||||
Vars
|
Vars
|
||||||
---- */
|
---- */
|
||||||
|
|
||||||
|
int s_health;
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose:
|
Purpose:
|
||||||
|
@ -113,6 +115,8 @@ m_animFrame=0;
|
||||||
m_cameraLookTimer=0;
|
m_cameraLookTimer=0;
|
||||||
|
|
||||||
m_lastPadInput=m_padInput=0;
|
m_lastPadInput=m_padInput=0;
|
||||||
|
|
||||||
|
s_health=5;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
|
@ -239,49 +243,38 @@ Pos.vy=((Pos.vy-16)&0xfffffff0)+colHeight;
|
||||||
// Was falling.. so we've just hit the ground
|
// Was falling.. so we've just hit the ground
|
||||||
if(m_currentState==STATE_BUTTFALL)
|
if(m_currentState==STATE_BUTTFALL)
|
||||||
{
|
{
|
||||||
|
// landed from a btt bounce
|
||||||
setState(STATE_BUTTLAND);
|
setState(STATE_BUTTLAND);
|
||||||
}
|
}
|
||||||
else if(m_currentState==STATE_FALLFAR)
|
else if(m_currentState==STATE_FALLFAR)
|
||||||
{
|
{
|
||||||
|
// Landed from a painful long fall
|
||||||
setState(STATE_IDLE);
|
setState(STATE_IDLE);
|
||||||
|
takeDamage(DAMAGE__FALL);
|
||||||
m_moveVel.vx=0;
|
m_moveVel.vx=0;
|
||||||
|
CSoundMediator::playSfx(CSoundMediator::SFX_SPONGEBOB_LAND_AFTER_FALL);
|
||||||
}
|
}
|
||||||
else if(m_moveVel.vx)
|
else if(m_moveVel.vx)
|
||||||
{
|
{
|
||||||
|
// Landed from a jump with x movement
|
||||||
setState(STATE_RUN);
|
setState(STATE_RUN);
|
||||||
// setAnimNo(ANIM_PLAYER_ANIM_RUNJUMPEND);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Landed from a standing jump
|
||||||
setState(STATE_IDLE);
|
setState(STATE_IDLE);
|
||||||
setAnimNo(ANIM_PLAYER_ANIM_JUMPEND);
|
setAnimNo(ANIM_PLAYER_ANIM_JUMPEND);
|
||||||
}
|
}
|
||||||
// m_moveVel.vy=0;
|
m_moveVel.vy=0;
|
||||||
m_fallFrames=0;
|
m_fallFrames=0;
|
||||||
}
|
}
|
||||||
m_moveVel.vy=0;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(m_currentState!=STATE_JUMP&&m_currentState!=STATE_BUTTBOUNCE)
|
if(m_currentState!=STATE_FALL&&m_currentState!=STATE_BUTTFALL&&
|
||||||
|
m_currentState!=STATE_JUMP&&m_currentState!=STATE_BUTTBOUNCE)
|
||||||
{
|
{
|
||||||
// Fall
|
setState(STATE_FALL);
|
||||||
if(m_currentState!=STATE_FALL&&m_currentState!=STATE_BUTTFALL)
|
|
||||||
{
|
|
||||||
setState(STATE_FALL);
|
|
||||||
}
|
|
||||||
const PlayerMetrics *metrics;
|
|
||||||
metrics=getPlayerMetrics();
|
|
||||||
m_moveVel.vy+=PLAYER_GRAVITY;
|
|
||||||
if(m_moveVel.vy>=PLAYER_TERMINAL_VELOCITY<<VELOCITY_SHIFT)
|
|
||||||
{
|
|
||||||
m_moveVel.vy=PLAYER_TERMINAL_VELOCITY<<VELOCITY_SHIFT;
|
|
||||||
m_fallFrames++;
|
|
||||||
if(m_fallFrames>metrics->m_metric[PM__MAX_SAFE_FALL_FRAMES])
|
|
||||||
{
|
|
||||||
setState(STATE_FALLFAR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,6 +290,7 @@ if(getPadInputDown()&PAD_CIRCLE)
|
||||||
{
|
{
|
||||||
m_skel.blink();
|
m_skel.blink();
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_UP))
|
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_UP))
|
||||||
{
|
{
|
||||||
if(m_cameraLookTimer<=-LOOKAROUND_DELAY)
|
if(m_cameraLookTimer<=-LOOKAROUND_DELAY)
|
||||||
|
@ -347,6 +341,7 @@ if(getPadInputDown()&PAD_CIRCLE)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -722,6 +717,69 @@ void CPlayer::jump()
|
||||||
}
|
}
|
||||||
void CPlayer::fall()
|
void CPlayer::fall()
|
||||||
{
|
{
|
||||||
|
const PlayerMetrics *metrics;
|
||||||
|
metrics=getPlayerMetrics();
|
||||||
|
m_moveVel.vy+=PLAYER_GRAVITY;
|
||||||
|
if(m_moveVel.vy>=PLAYER_TERMINAL_VELOCITY<<VELOCITY_SHIFT)
|
||||||
|
{
|
||||||
|
m_moveVel.vy=PLAYER_TERMINAL_VELOCITY<<VELOCITY_SHIFT;
|
||||||
|
m_fallFrames++;
|
||||||
|
if(m_currentState!=STATE_BUTTFALL)
|
||||||
|
{
|
||||||
|
if(m_fallFrames>metrics->m_metric[PM__MAX_SAFE_FALL_FRAMES])
|
||||||
|
{
|
||||||
|
setState(STATE_FALLFAR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
#ifdef __VERSION_DEBUG__
|
||||||
|
int invincibleSponge=false; // NB: This is for debugging purposes only
|
||||||
|
#endif
|
||||||
|
void CPlayer::takeDamage(DAMAGE_TYPE _damage)
|
||||||
|
{
|
||||||
|
// Don't take damage if still recovering from the last hit
|
||||||
|
if(!m_invincibleFrameCount)
|
||||||
|
{
|
||||||
|
int ouchThatHurt=true;
|
||||||
|
|
||||||
|
// Check if we are currently immune to this damage type
|
||||||
|
switch(_damage)
|
||||||
|
{
|
||||||
|
case DAMAGE__FALL:
|
||||||
|
case DAMAGE__LAVA:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DAMAGE__ELECTROCUTION:
|
||||||
|
// if squeaky boots then ouchThatHurt=false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ouchThatHurt)
|
||||||
|
{
|
||||||
|
#ifdef __VERSION_DEBUG__
|
||||||
|
if(invincibleSponge){m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;return;}
|
||||||
|
#endif
|
||||||
|
if(s_health)
|
||||||
|
{
|
||||||
|
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
||||||
|
s_health--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CSoundMediator::playSfx(CSoundMediator::SFX_SPONGEBOB_DEFEATED_JINGLE);
|
||||||
|
setState(STATE_DEAD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,9 @@ typedef enum
|
||||||
STATE_DUCK,
|
STATE_DUCK,
|
||||||
STATE_SOAKUP,
|
STATE_SOAKUP,
|
||||||
STATE_GETUP,
|
STATE_GETUP,
|
||||||
|
|
||||||
|
STATE_DEAD,
|
||||||
|
|
||||||
NUM_STATES,
|
NUM_STATES,
|
||||||
}PLAYER_STATE;
|
}PLAYER_STATE;
|
||||||
|
|
||||||
|
@ -95,6 +97,13 @@ typedef enum
|
||||||
NUM_PLAYER_METRICS
|
NUM_PLAYER_METRICS
|
||||||
}PLAYER_METRIC;
|
}PLAYER_METRIC;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
DAMAGE__FALL,
|
||||||
|
DAMAGE__ELECTROCUTION,
|
||||||
|
DAMAGE__LAVA,
|
||||||
|
}DAMAGE_TYPE;
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Structure defintions
|
Structure defintions
|
||||||
|
@ -167,6 +176,8 @@ protected:
|
||||||
void jump();
|
void jump();
|
||||||
void fall();
|
void fall();
|
||||||
|
|
||||||
|
void takeDamage(DAMAGE_TYPE _damage);
|
||||||
|
|
||||||
friend class CPlayerState;
|
friend class CPlayerState;
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,7 +214,7 @@ private:
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
INVIBCIBLE_FRAMES__START=120, // Invincible for this many frames at start of life
|
INVIBCIBLE_FRAMES__START=120, // Invincible for this many frames at start of life
|
||||||
INVINCIBLE_FRAMES__HIT=25, // Invincible for this many frames after taking damage
|
INVINCIBLE_FRAMES__HIT=50, // Invincible for this many frames after taking damage
|
||||||
|
|
||||||
LOOKAROUND_DELAY=90, // Frames before look around starts
|
LOOKAROUND_DELAY=90, // Frames before look around starts
|
||||||
LOOKAROUND_SCROLLSPEED=2, // Speed to scroll at
|
LOOKAROUND_SCROLLSPEED=2, // Speed to scroll at
|
||||||
|
@ -230,7 +241,7 @@ private:
|
||||||
int m_lastPadInput; // Last frames controls
|
int m_lastPadInput; // Last frames controls
|
||||||
int m_padInputDown; // Controls that were pressed this frame
|
int m_padInputDown; // Controls that were pressed this frame
|
||||||
|
|
||||||
// Pointer to the collision layer for the current layer
|
// Pointer to the collision layer for the current map
|
||||||
class CLayerCollision *m_layerCollision;
|
class CLayerCollision *m_layerCollision;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,10 @@
|
||||||
#include "player\psduck.h"
|
#include "player\psduck.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PLAYER__PSDEAD_H__
|
||||||
|
#include "player\psdead.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Std Lib
|
/* Std Lib
|
||||||
------- */
|
------- */
|
||||||
|
@ -84,6 +88,7 @@ CPlayerStateAirChop stateAirChop;
|
||||||
CPlayerStateDuck stateDuck;
|
CPlayerStateDuck stateDuck;
|
||||||
CPlayerStateSoakUp stateSoackUp;
|
CPlayerStateSoakUp stateSoackUp;
|
||||||
CPlayerStateGetUp stateGetup;
|
CPlayerStateGetUp stateGetup;
|
||||||
|
CPlayerStateDead stateDead;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -124,6 +129,7 @@ CPlayer::PlayerMode CPlayer::s_modes[NUM_PLAYERMODES]=
|
||||||
&stateDuck, // STATE_DUCK
|
&stateDuck, // STATE_DUCK
|
||||||
&stateSoackUp, // STATE_SOAKUP
|
&stateSoackUp, // STATE_SOAKUP
|
||||||
&stateGetup, // STATE_GETUP
|
&stateGetup, // STATE_GETUP
|
||||||
|
&stateDead, // STATE_DEAD
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -156,6 +162,7 @@ CPlayer::PlayerMode CPlayer::s_modes[NUM_PLAYERMODES]=
|
||||||
&stateDuck, // STATE_DUCK
|
&stateDuck, // STATE_DUCK
|
||||||
&stateSoackUp, // STATE_SOAKUP
|
&stateSoackUp, // STATE_SOAKUP
|
||||||
&stateGetup, // STATE_GETUP
|
&stateGetup, // STATE_GETUP
|
||||||
|
&stateDead, // STATE_DEAD
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -188,6 +195,7 @@ CPlayer::PlayerMode CPlayer::s_modes[NUM_PLAYERMODES]=
|
||||||
NULL, // STATE_DUCK
|
NULL, // STATE_DUCK
|
||||||
NULL, // STATE_SOAKUP
|
NULL, // STATE_SOAKUP
|
||||||
NULL, // STATE_GETUP
|
NULL, // STATE_GETUP
|
||||||
|
&stateDead, // STATE_DEAD
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -98,6 +98,18 @@ void CPlayerStateButtBounceFall::enter(CPlayer *_player)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void CPlayerStateButtBounceFall::think(CPlayer *_player)
|
||||||
|
{
|
||||||
|
fall(_player);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose:
|
Purpose:
|
||||||
|
|
|
@ -44,6 +44,7 @@ class CPlayerStateButtBounceFall : public CPlayerState
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void enter(class CPlayer *_player);
|
virtual void enter(class CPlayer *_player);
|
||||||
|
virtual void think(class CPlayer *_player);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,8 @@ void CPlayerStateFall::think(CPlayer *_player)
|
||||||
slowdown(_player);
|
slowdown(_player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fall(_player);
|
||||||
|
|
||||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION))
|
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION))
|
||||||
{
|
{
|
||||||
setState(_player,STATE_AIRATTACK);
|
setState(_player,STATE_AIRATTACK);
|
||||||
|
@ -148,6 +150,8 @@ void CPlayerStateFallFar::think(CPlayer *_player)
|
||||||
{
|
{
|
||||||
slowdown(_player);
|
slowdown(_player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fall(_player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -701,6 +701,14 @@ SOURCE=..\..\..\source\player\pschop.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\player\psdead.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\player\psdead.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\..\source\player\psduck.cpp
|
SOURCE=..\..\..\source\player\psduck.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue