This commit is contained in:
parent
eb9fbc0473
commit
ef5c8d8b28
15 changed files with 152 additions and 54 deletions
|
@ -238,6 +238,7 @@ player_src := demoplay \
|
||||||
psfall \
|
psfall \
|
||||||
pshitgnd \
|
pshitgnd \
|
||||||
psidle \
|
psidle \
|
||||||
|
psjmpbck \
|
||||||
psjump \
|
psjump \
|
||||||
psrun \
|
psrun \
|
||||||
psspring
|
psspring
|
||||||
|
|
|
@ -1287,7 +1287,7 @@ void CNpcEnemy::processCollision()
|
||||||
{
|
{
|
||||||
CPlayer *player = GameScene.getPlayer();
|
CPlayer *player = GameScene.getPlayer();
|
||||||
|
|
||||||
player->takeDamage( m_data[m_type].damageToUserType );
|
player->takeDamage( m_data[m_type].damageToUserType,REACT__GET_DIRECTION_FROM_THING,(CThing*)this );
|
||||||
processUserCollision( (CThing *) player );
|
processUserCollision( (CThing *) player );
|
||||||
|
|
||||||
m_controlFunc = m_oldControlFunc;
|
m_controlFunc = m_oldControlFunc;
|
||||||
|
|
|
@ -333,6 +333,7 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
|
||||||
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
||||||
-1, // ANIM_SPONGEBOB_WALK,
|
-1, // ANIM_SPONGEBOB_WALK,
|
||||||
-1, // ANIM_SPONGEBOB_KARATE,
|
-1, // ANIM_SPONGEBOB_KARATE,
|
||||||
|
ANIM_SPONGEBOB_NET_GETHIT, // ANIM_SPONGEBOB_GETHIT
|
||||||
},
|
},
|
||||||
|
|
||||||
// PLAYER_ADDON_CORALBLOWER,
|
// PLAYER_ADDON_CORALBLOWER,
|
||||||
|
@ -361,6 +362,7 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
|
||||||
ANIM_SPONGEBOB_CORALBLOWER_IDLEWEAPON, // ANIM_SPONGEBOB_IDLEWEAPON,
|
ANIM_SPONGEBOB_CORALBLOWER_IDLEWEAPON, // ANIM_SPONGEBOB_IDLEWEAPON,
|
||||||
ANIM_SPONGEBOB_CORALBLOWER_WALK, // ANIM_SPONGEBOB_WALK,
|
ANIM_SPONGEBOB_CORALBLOWER_WALK, // ANIM_SPONGEBOB_WALK,
|
||||||
-1, // ANIM_SPONGEBOB_KARATE,
|
-1, // ANIM_SPONGEBOB_KARATE,
|
||||||
|
ANIM_SPONGEBOB_CORALBLOWER_GETHIT, // ANIM_SPONGEBOB_GETHIT
|
||||||
},
|
},
|
||||||
|
|
||||||
// PLAYER_ADDON_JELLYLAUNCHER,
|
// PLAYER_ADDON_JELLYLAUNCHER,
|
||||||
|
@ -389,6 +391,7 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
|
||||||
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
||||||
-1, // ANIM_SPONGEBOB_WALK,
|
-1, // ANIM_SPONGEBOB_WALK,
|
||||||
-1, // ANIM_SPONGEBOB_KARATE,
|
-1, // ANIM_SPONGEBOB_KARATE,
|
||||||
|
ANIM_SPONGEBOB_JELLYLAUNCHER_GETHIT, // ANIM_SPONGEBOB_GETHIT
|
||||||
},
|
},
|
||||||
|
|
||||||
// PLAYER_ADDON_GLASSES,
|
// PLAYER_ADDON_GLASSES,
|
||||||
|
@ -417,6 +420,7 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
|
||||||
ANIM_SPONGEBOB_GLASSES_IDLEWEAPON, // ANIM_SPONGEBOB_IDLEWEAPON,
|
ANIM_SPONGEBOB_GLASSES_IDLEWEAPON, // ANIM_SPONGEBOB_IDLEWEAPON,
|
||||||
ANIM_SPONGEBOB_GLASSES_WALK, // ANIM_SPONGEBOB_WALK,
|
ANIM_SPONGEBOB_GLASSES_WALK, // ANIM_SPONGEBOB_WALK,
|
||||||
ANIM_SPONGEBOB_GLASSES_KARATE, // ANIM_SPONGEBOB_KARATE,
|
ANIM_SPONGEBOB_GLASSES_KARATE, // ANIM_SPONGEBOB_KARATE,
|
||||||
|
ANIM_SPONGEBOB_GLASSES_GETHIT, // ANIM_SPONGEBOB_GETHIT
|
||||||
},
|
},
|
||||||
|
|
||||||
// PLAYER_ADDON_BUBBLEWAND,
|
// PLAYER_ADDON_BUBBLEWAND,
|
||||||
|
@ -445,6 +449,7 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
|
||||||
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
||||||
-1, // ANIM_SPONGEBOB_WALK,
|
-1, // ANIM_SPONGEBOB_WALK,
|
||||||
-1, // ANIM_SPONGEBOB_KARATE,
|
-1, // ANIM_SPONGEBOB_KARATE,
|
||||||
|
-1, // ANIM_SPONGEBOB_GETHIT
|
||||||
},
|
},
|
||||||
|
|
||||||
// PLAYER_ADDON_JELLYFISHINNET
|
// PLAYER_ADDON_JELLYFISHINNET
|
||||||
|
@ -473,6 +478,7 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
|
||||||
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
||||||
-1, // ANIM_SPONGEBOB_WALK,
|
-1, // ANIM_SPONGEBOB_WALK,
|
||||||
-1, // ANIM_SPONGEBOB_KARATE,
|
-1, // ANIM_SPONGEBOB_KARATE,
|
||||||
|
ANIM_SPONGEBOB_JELLYFISH_GETHIT, // ANIM_SPONGEBOB_GETHIT
|
||||||
},
|
},
|
||||||
|
|
||||||
// PLAYER_ADDON_GLOVE
|
// PLAYER_ADDON_GLOVE
|
||||||
|
@ -501,6 +507,7 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
|
||||||
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
-1, // ANIM_SPONGEBOB_IDLEWEAPON,
|
||||||
-1, // ANIM_SPONGEBOB_WALK,
|
-1, // ANIM_SPONGEBOB_WALK,
|
||||||
ANIM_SPONGEBOB_GLOVE_KARATE, // ANIM_SPONGEBOB_KARATE,
|
ANIM_SPONGEBOB_GLOVE_KARATE, // ANIM_SPONGEBOB_KARATE,
|
||||||
|
-1, // ANIM_SPONGEBOB_GETHIT
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1561,7 +1568,8 @@ void CPlayer::inSoakUpState()
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose:
|
Purpose:
|
||||||
Params:
|
Params: When _reactDirection is REACT__GET_DIRECTION_FROM_THING then
|
||||||
|
_thing must point to the thing that caused the damage
|
||||||
Returns:
|
Returns:
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
#if defined(__USER_daveo__)
|
#if defined(__USER_daveo__)
|
||||||
|
@ -1569,7 +1577,7 @@ int invincibleSponge=true; // NB: This is for debugging purposes only so don't
|
||||||
#else
|
#else
|
||||||
int invincibleSponge=false; // NB: This is for debugging purposes only so don't try and use it for a permenant cheat mode..
|
int invincibleSponge=false; // NB: This is for debugging purposes only so don't try and use it for a permenant cheat mode..
|
||||||
#endif
|
#endif
|
||||||
void CPlayer::takeDamage(DAMAGE_TYPE _damage)
|
void CPlayer::takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection,CThing *_thing)
|
||||||
{
|
{
|
||||||
if(m_invincibleFrameCount==0&& // Don't take damage if still recovering from the last hit
|
if(m_invincibleFrameCount==0&& // Don't take damage if still recovering from the last hit
|
||||||
m_invincibilityRingTimer==0&& // Or if we have the invincibility ring on
|
m_invincibilityRingTimer==0&& // Or if we have the invincibility ring on
|
||||||
|
@ -1613,35 +1621,41 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage)
|
||||||
if(ouchThatHurt)
|
if(ouchThatHurt)
|
||||||
{
|
{
|
||||||
int died=false;
|
int died=false;
|
||||||
if(invincibleSponge){m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;return;}
|
if(invincibleSponge)
|
||||||
if(!isWearingDivingHelmet())
|
|
||||||
{
|
{
|
||||||
if(!ouchThatHurtSoMuchThatImJustGoingToDieNow)
|
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
||||||
{
|
|
||||||
m_health--;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_health=-1;
|
|
||||||
}
|
|
||||||
if(m_health<0)
|
|
||||||
{
|
|
||||||
died=true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!ouchThatHurtSoMuchThatImJustGoingToDieNow)
|
if(!isWearingDivingHelmet())
|
||||||
{
|
{
|
||||||
m_healthWaterLevel-=WATERHEALTHPART;
|
if(!ouchThatHurtSoMuchThatImJustGoingToDieNow)
|
||||||
|
{
|
||||||
|
m_health--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_health=-1;
|
||||||
|
}
|
||||||
|
if(m_health<0)
|
||||||
|
{
|
||||||
|
died=true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_health=-1;
|
if(!ouchThatHurtSoMuchThatImJustGoingToDieNow)
|
||||||
}
|
{
|
||||||
if(m_healthWaterLevel<0)
|
m_healthWaterLevel-=WATERHEALTHPART;
|
||||||
{
|
}
|
||||||
died=true;
|
else
|
||||||
|
{
|
||||||
|
m_health=-1;
|
||||||
|
}
|
||||||
|
if(m_healthWaterLevel<0)
|
||||||
|
{
|
||||||
|
died=true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1651,6 +1665,37 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if(_reactDirection!=REACT__NO_REACTION)
|
||||||
|
{
|
||||||
|
if(_reactDirection==REACT__GET_DIRECTION_FROM_THING)
|
||||||
|
{
|
||||||
|
ASSERT(_thing);
|
||||||
|
if(Pos.vx<_thing->getPos().vx)
|
||||||
|
{
|
||||||
|
_reactDirection=REACT__LEFT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_reactDirection=REACT__RIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_moveVelocity.vx=((int)_reactDirection);
|
||||||
|
switch(_reactDirection)
|
||||||
|
{
|
||||||
|
case REACT__LEFT:
|
||||||
|
setFacing(FACING_RIGHT);
|
||||||
|
break;
|
||||||
|
case REACT__RIGHT:
|
||||||
|
setFacing(FACING_LEFT);
|
||||||
|
break;
|
||||||
|
case REACT__UP:
|
||||||
|
case REACT__GET_DIRECTION_FROM_THING:
|
||||||
|
case REACT__NO_REACTION:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
m_currentPlayerModeClass->setState(STATE_JUMPBACK);
|
||||||
|
}
|
||||||
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
m_invincibleFrameCount=INVINCIBLE_FRAMES__HIT;
|
||||||
m_healthReactFrames=25;
|
m_healthReactFrames=25;
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,7 @@ typedef enum
|
||||||
STATE_DUCK,
|
STATE_DUCK,
|
||||||
STATE_SOAKUP,
|
STATE_SOAKUP,
|
||||||
STATE_GETUP,
|
STATE_GETUP,
|
||||||
|
STATE_JUMPBACK,
|
||||||
|
|
||||||
NUM_STATES,
|
NUM_STATES,
|
||||||
}PLAYER_STATE;
|
}PLAYER_STATE;
|
||||||
|
@ -120,6 +121,15 @@ typedef enum
|
||||||
DAMAGE__KILL_OUTRIGHT,
|
DAMAGE__KILL_OUTRIGHT,
|
||||||
}DAMAGE_TYPE;
|
}DAMAGE_TYPE;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
REACT__LEFT=-1,
|
||||||
|
REACT__UP=0,
|
||||||
|
REACT__RIGHT=+1,
|
||||||
|
REACT__GET_DIRECTION_FROM_THING=123,
|
||||||
|
REACT__NO_REACTION=234,
|
||||||
|
}REACT_DIRECTION;
|
||||||
|
|
||||||
|
|
||||||
// The input from the control pad is remapped to this rather than keeping it in the
|
// The input from the control pad is remapped to this rather than keeping it in the
|
||||||
// normal pad format. This allows us to store all input in one byte ( as opposed to
|
// normal pad format. This allows us to store all input in one byte ( as opposed to
|
||||||
|
@ -236,7 +246,7 @@ public:
|
||||||
class CLayerCollision *getLayerCollision() {return m_layerCollision;}
|
class CLayerCollision *getLayerCollision() {return m_layerCollision;}
|
||||||
|
|
||||||
void inSoakUpState();
|
void inSoakUpState();
|
||||||
void takeDamage(DAMAGE_TYPE _damage);
|
void takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection=REACT__UP,CThing *_thing=NULL);
|
||||||
|
|
||||||
void respawn();
|
void respawn();
|
||||||
|
|
||||||
|
@ -282,7 +292,7 @@ private:
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
INVINCIBLE_FRAMES__START=200, // Invincible for this many frames at start of life
|
INVINCIBLE_FRAMES__START=200, // Invincible for this many frames at start of life
|
||||||
INVINCIBLE_FRAMES__HIT=100, // Invincible for this many frames after taking damage
|
INVINCIBLE_FRAMES__HIT=30, // Invincible for this many frames after taking damage
|
||||||
};
|
};
|
||||||
int m_invincibleFrameCount; // Initial invincibility and also invincibility after taking damage
|
int m_invincibleFrameCount; // Initial invincibility and also invincibility after taking damage
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,9 @@ static PlayerMetrics s_playerMetrics=
|
||||||
DEFAULT_PLAYER_PLAYER_GRAVITY/3, // PM__GRAVITY
|
DEFAULT_PLAYER_PLAYER_GRAVITY/3, // PM__GRAVITY
|
||||||
DEFAULT_PLAYER_TERMINAL_VELOCITY/3, // PM__TERMINAL_VELOCITY
|
DEFAULT_PLAYER_TERMINAL_VELOCITY/3, // PM__TERMINAL_VELOCITY
|
||||||
DEFAULT_BUTT_FALL_VELOCITY, // PM__BUTT_FALL_VELOCITY
|
DEFAULT_BUTT_FALL_VELOCITY, // PM__BUTT_FALL_VELOCITY
|
||||||
|
DEFAULT_HITREACT_XVELOCITY, // PM__HITREACT_XVELOCITY
|
||||||
|
DEFAULT_HITREACT_YVELOCITY, // PM__HITREACT_YVELOCITY
|
||||||
|
DEFAULT_HITREACT_FRAMES, // PM__HITREACT_FRAMES
|
||||||
} };
|
} };
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -207,6 +207,7 @@ int CPlayerModeBubbleMixture::canBlowBubbleFromThisState()
|
||||||
case STATE_DUCK:
|
case STATE_DUCK:
|
||||||
case STATE_SOAKUP:
|
case STATE_SOAKUP:
|
||||||
case STATE_GETUP:
|
case STATE_GETUP:
|
||||||
|
case STATE_JUMPBACK:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -189,6 +189,7 @@ int CPlayerModeChop::canAttackFromThisState()
|
||||||
case STATE_DUCK:
|
case STATE_DUCK:
|
||||||
case STATE_SOAKUP:
|
case STATE_SOAKUP:
|
||||||
case STATE_GETUP:
|
case STATE_GETUP:
|
||||||
|
case STATE_JUMPBACK:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,10 @@
|
||||||
#include "player\psjump.h"
|
#include "player\psjump.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PLAYER__PSJMPBCK_H__
|
||||||
|
#include "player\psjmpbck.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __PLAYER__PSRUN_H__
|
#ifndef __PLAYER__PSRUN_H__
|
||||||
#include "player\psrun.h"
|
#include "player\psrun.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -114,6 +118,7 @@ static CPlayerState *s_stateTable[]=
|
||||||
NULL, // STATE_DUCK
|
NULL, // STATE_DUCK
|
||||||
NULL, // STATE_SOAKUP
|
NULL, // STATE_SOAKUP
|
||||||
&s_stateGetUp, // STATE_GETUP
|
&s_stateGetUp, // STATE_GETUP
|
||||||
|
&s_stateJumpBack, // STATE_JUMPBACK
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,6 +135,9 @@ static PlayerMetrics s_playerMetrics=
|
||||||
DEFAULT_PLAYER_PLAYER_GRAVITY, // PM__GRAVITY
|
DEFAULT_PLAYER_PLAYER_GRAVITY, // PM__GRAVITY
|
||||||
DEFAULT_PLAYER_TERMINAL_VELOCITY, // PM__TERMINAL_VELOCITY
|
DEFAULT_PLAYER_TERMINAL_VELOCITY, // PM__TERMINAL_VELOCITY
|
||||||
DEFAULT_BUTT_FALL_VELOCITY, // PM__BUTT_FALL_VELOCITY
|
DEFAULT_BUTT_FALL_VELOCITY, // PM__BUTT_FALL_VELOCITY
|
||||||
|
DEFAULT_HITREACT_XVELOCITY, // PM__HITREACT_XVELOCITY
|
||||||
|
DEFAULT_HITREACT_YVELOCITY, // PM__HITREACT_YVELOCITY
|
||||||
|
DEFAULT_HITREACT_FRAMES, // PM__HITREACT_FRAMES
|
||||||
} };
|
} };
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -195,6 +195,7 @@ int CPlayerModeJellyLauncher::setState(int _state)
|
||||||
switch(_state)
|
switch(_state)
|
||||||
{
|
{
|
||||||
case STATE_FALL:
|
case STATE_FALL:
|
||||||
|
case STATE_JUMPBACK:
|
||||||
// Break out of firing state!
|
// Break out of firing state!
|
||||||
m_firingState=FIRING_STATE__NONE;
|
m_firingState=FIRING_STATE__NONE;
|
||||||
break;
|
break;
|
||||||
|
@ -254,6 +255,7 @@ int CPlayerModeJellyLauncher::canFireFromThisState()
|
||||||
case STATE_DUCK:
|
case STATE_DUCK:
|
||||||
case STATE_SOAKUP:
|
case STATE_SOAKUP:
|
||||||
case STATE_GETUP:
|
case STATE_GETUP:
|
||||||
|
case STATE_JUMPBACK:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -324,6 +324,7 @@ int CPlayerModeNet::canSwingNetFromThisState()
|
||||||
case STATE_DUCK:
|
case STATE_DUCK:
|
||||||
case STATE_SOAKUP:
|
case STATE_SOAKUP:
|
||||||
case STATE_GETUP:
|
case STATE_GETUP:
|
||||||
|
case STATE_JUMPBACK:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,10 @@
|
||||||
#include "player\psjump.h"
|
#include "player\psjump.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PLAYER__PSJMPBCK_H__
|
||||||
|
#include "player\psjmpbck.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __PLAYER__PSRUN_H__
|
#ifndef __PLAYER__PSRUN_H__
|
||||||
#include "player\psrun.h"
|
#include "player\psrun.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,6 +110,7 @@ static CPlayerState *s_stateTable[]=
|
||||||
&s_stateDuck, // STATE_DUCK
|
&s_stateDuck, // STATE_DUCK
|
||||||
&s_stateSoakUp, // STATE_SOAKUP
|
&s_stateSoakUp, // STATE_SOAKUP
|
||||||
&s_stateGetUp, // STATE_GETUP
|
&s_stateGetUp, // STATE_GETUP
|
||||||
|
&s_stateJumpBack, // STATE_JUMPBACK
|
||||||
};
|
};
|
||||||
|
|
||||||
static PlayerMetrics s_playerMetrics=
|
static PlayerMetrics s_playerMetrics=
|
||||||
|
@ -120,6 +125,9 @@ static PlayerMetrics s_playerMetrics=
|
||||||
DEFAULT_PLAYER_PLAYER_GRAVITY, // PM__GRAVITY
|
DEFAULT_PLAYER_PLAYER_GRAVITY, // PM__GRAVITY
|
||||||
DEFAULT_PLAYER_TERMINAL_VELOCITY, // PM__TERMINAL_VELOCITY
|
DEFAULT_PLAYER_TERMINAL_VELOCITY, // PM__TERMINAL_VELOCITY
|
||||||
DEFAULT_BUTT_FALL_VELOCITY, // PM__BUTT_FALL_VELOCITY
|
DEFAULT_BUTT_FALL_VELOCITY, // PM__BUTT_FALL_VELOCITY
|
||||||
|
DEFAULT_HITREACT_XVELOCITY, // PM__HITREACT_XVELOCITY
|
||||||
|
DEFAULT_HITREACT_YVELOCITY, // PM__HITREACT_YVELOCITY
|
||||||
|
DEFAULT_HITREACT_FRAMES, // PM__HITREACT_FRAMES
|
||||||
} };
|
} };
|
||||||
|
|
||||||
|
|
||||||
|
@ -221,6 +229,7 @@ int CPlayerModeBase::canDoLookAround()
|
||||||
case STATE_BUTTLAND:
|
case STATE_BUTTLAND:
|
||||||
case STATE_DUCK:
|
case STATE_DUCK:
|
||||||
case STATE_GETUP:
|
case STATE_GETUP:
|
||||||
|
case STATE_JUMPBACK:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,6 +264,7 @@ ATTACK_STATE CPlayerModeBase::getAttackState()
|
||||||
case STATE_DUCK:
|
case STATE_DUCK:
|
||||||
case STATE_SOAKUP:
|
case STATE_SOAKUP:
|
||||||
case STATE_GETUP:
|
case STATE_GETUP:
|
||||||
|
case STATE_JUMPBACK:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,7 +285,8 @@ void CPlayerModeBase::thinkVerticalMovement()
|
||||||
}
|
}
|
||||||
else if(m_currentState!=STATE_FALL&&m_currentState!=STATE_FALLFAR&&
|
else if(m_currentState!=STATE_FALL&&m_currentState!=STATE_FALLFAR&&
|
||||||
m_currentState!=STATE_BUTTFALL&&m_currentState!=STATE_BUTTBOUNCE&&
|
m_currentState!=STATE_BUTTFALL&&m_currentState!=STATE_BUTTBOUNCE&&
|
||||||
m_currentState!=STATE_JUMP&&m_currentState!=STATE_SPRINGUP)
|
m_currentState!=STATE_JUMP&&m_currentState!=STATE_SPRINGUP&&
|
||||||
|
m_currentState!=STATE_JUMPBACK)
|
||||||
{
|
{
|
||||||
DVECTOR pos;
|
DVECTOR pos;
|
||||||
pos=m_player->getPlayerPos();
|
pos=m_player->getPlayerPos();
|
||||||
|
@ -332,7 +343,7 @@ void CPlayerModeBase::playerHasHitGround()
|
||||||
{
|
{
|
||||||
// Landed from a painfully long fall
|
// Landed from a painfully long fall
|
||||||
setState(STATE_HITGROUND);
|
setState(STATE_HITGROUND);
|
||||||
m_player->takeDamage(DAMAGE__FALL);
|
m_player->takeDamage(DAMAGE__FALL,REACT__NO_REACTION);
|
||||||
moveVel.vx=0;
|
moveVel.vx=0;
|
||||||
}
|
}
|
||||||
else if(moveVel.vx)
|
else if(moveVel.vx)
|
||||||
|
@ -590,6 +601,24 @@ void CPlayerModeBase::jump()
|
||||||
moveVel.vy=-getPlayerMetrics()->m_metric[PM__JUMP_VELOCITY]<<VELOCITY_SHIFT;
|
moveVel.vy=-getPlayerMetrics()->m_metric[PM__JUMP_VELOCITY]<<VELOCITY_SHIFT;
|
||||||
setMoveVelocity(&moveVel);
|
setMoveVelocity(&moveVel);
|
||||||
}
|
}
|
||||||
|
int barg=5;
|
||||||
|
void CPlayerModeBase::jumpback()
|
||||||
|
{
|
||||||
|
DVECTOR moveVel;
|
||||||
|
int xvel;
|
||||||
|
moveVel=*m_player->getMoveVelocity();
|
||||||
|
moveVel.vy=-getPlayerMetrics()->m_metric[PM__HITREACT_YVELOCITY]<<VELOCITY_SHIFT;
|
||||||
|
xvel=getPlayerMetrics()->m_metric[PM__HITREACT_XVELOCITY]<<VELOCITY_SHIFT;
|
||||||
|
if(moveVel.vx<0)
|
||||||
|
{
|
||||||
|
moveVel.vx=-xvel;
|
||||||
|
}
|
||||||
|
else if(moveVel.vx>0)
|
||||||
|
{
|
||||||
|
moveVel.vx=xvel;
|
||||||
|
}
|
||||||
|
setMoveVelocity(&moveVel);
|
||||||
|
}
|
||||||
void CPlayerModeBase::fall()
|
void CPlayerModeBase::fall()
|
||||||
{
|
{
|
||||||
const PlayerMetrics *metrics;
|
const PlayerMetrics *metrics;
|
||||||
|
|
|
@ -50,6 +50,9 @@ typedef enum
|
||||||
PM__GRAVITY,
|
PM__GRAVITY,
|
||||||
PM__TERMINAL_VELOCITY,
|
PM__TERMINAL_VELOCITY,
|
||||||
PM__BUTT_FALL_VELOCITY,
|
PM__BUTT_FALL_VELOCITY,
|
||||||
|
PM__HITREACT_XVELOCITY,
|
||||||
|
PM__HITREACT_YVELOCITY,
|
||||||
|
PM__HITREACT_FRAMES,
|
||||||
|
|
||||||
NUM_PLAYER_METRICS
|
NUM_PLAYER_METRICS
|
||||||
}PLAYER_METRIC;
|
}PLAYER_METRIC;
|
||||||
|
@ -71,6 +74,9 @@ enum
|
||||||
DEFAULT_PLAYER_PLAYER_GRAVITY=2<<2,
|
DEFAULT_PLAYER_PLAYER_GRAVITY=2<<2,
|
||||||
DEFAULT_PLAYER_TERMINAL_VELOCITY=8,
|
DEFAULT_PLAYER_TERMINAL_VELOCITY=8,
|
||||||
DEFAULT_BUTT_FALL_VELOCITY=14,
|
DEFAULT_BUTT_FALL_VELOCITY=14,
|
||||||
|
DEFAULT_HITREACT_XVELOCITY=5,
|
||||||
|
DEFAULT_HITREACT_YVELOCITY=3,
|
||||||
|
DEFAULT_HITREACT_FRAMES=15,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,6 +95,7 @@ public:
|
||||||
void inSoakUpState();
|
void inSoakUpState();
|
||||||
virtual int isJellyfishNetFull() {ASSERT(0);return false;} // Fugly..
|
virtual int isJellyfishNetFull() {ASSERT(0);return false;} // Fugly..
|
||||||
|
|
||||||
|
virtual int setState(int _state) {return 0;}
|
||||||
|
|
||||||
int getPadInputHeld();
|
int getPadInputHeld();
|
||||||
int getPadInputDown();
|
int getPadInputDown();
|
||||||
|
@ -155,6 +162,7 @@ public:
|
||||||
void moveRight();
|
void moveRight();
|
||||||
int slowdown();
|
int slowdown();
|
||||||
void jump();
|
void jump();
|
||||||
|
void jumpback();
|
||||||
void fall();
|
void fall();
|
||||||
void buttFall();
|
void buttFall();
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@
|
||||||
CPlayerStateJumpBack s_stateJumpBack;
|
CPlayerStateJumpBack s_stateJumpBack;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
Function:
|
Function:
|
||||||
Purpose:
|
Purpose:
|
||||||
|
@ -69,10 +70,10 @@ CPlayerStateJumpBack s_stateJumpBack;
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
void CPlayerStateJumpBack::enter(CPlayerModeBase *_playerMode)
|
void CPlayerStateJumpBack::enter(CPlayerModeBase *_playerMode)
|
||||||
{
|
{
|
||||||
_playerMode->setAnimNo(ANIM_SPONGEBOB_JUMP);
|
_playerMode->setAnimNo(ANIM_SPONGEBOB_GETHIT);
|
||||||
m_reactFrames=0;
|
m_reactFrames=0;
|
||||||
|
|
||||||
_playerMode->jump();
|
_playerMode->jumpback();
|
||||||
|
|
||||||
CSoundMediator::playSfx(CSoundMediator::SFX_SPONGEBOB_JUMP);
|
CSoundMediator::playSfx(CSoundMediator::SFX_SPONGEBOB_JUMP);
|
||||||
}
|
}
|
||||||
|
@ -87,15 +88,13 @@ void CPlayerStateJumpBack::enter(CPlayerModeBase *_playerMode)
|
||||||
void CPlayerStateJumpBack::think(CPlayerModeBase *_playerMode)
|
void CPlayerStateJumpBack::think(CPlayerModeBase *_playerMode)
|
||||||
{
|
{
|
||||||
const PlayerMetrics *metrics;
|
const PlayerMetrics *metrics;
|
||||||
int controlHeld,controlDown;
|
int xvel;
|
||||||
|
|
||||||
metrics=_playerMode->getPlayerMetrics();
|
metrics=_playerMode->getPlayerMetrics();
|
||||||
controlHeld=_playerMode->getPadInputHeld();
|
|
||||||
controlDown=_playerMode->getPadInputDown();
|
|
||||||
|
|
||||||
_playerMode->advanceAnimFrameAndCheckForEndOfAnim();
|
_playerMode->advanceAnimFrameAndCheckForEndOfAnim();
|
||||||
|
|
||||||
if(m_reactFrames<=metrics->m_metric[PM__MAX_JUMP_FRAMES]&&controlHeld&PI_JUMP)
|
if(m_reactFrames<=metrics->m_metric[PM__HITREACT_FRAMES])
|
||||||
{
|
{
|
||||||
m_reactFrames++;
|
m_reactFrames++;
|
||||||
}
|
}
|
||||||
|
@ -103,24 +102,6 @@ void CPlayerStateJumpBack::think(CPlayerModeBase *_playerMode)
|
||||||
{
|
{
|
||||||
_playerMode->setState(STATE_FALL);
|
_playerMode->setState(STATE_FALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(controlHeld&PI_LEFT)
|
|
||||||
{
|
|
||||||
_playerMode->moveLeft();
|
|
||||||
}
|
|
||||||
else if(controlHeld&PI_RIGHT)
|
|
||||||
{
|
|
||||||
_playerMode->moveRight();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_playerMode->slowdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
if(controlDown&PI_DOWN)
|
|
||||||
{
|
|
||||||
_playerMode->setState(STATE_BUTTBOUNCE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ private:
|
||||||
Globals
|
Globals
|
||||||
------- */
|
------- */
|
||||||
|
|
||||||
extern CPlayerStateJumpBack s_stateJump;
|
extern CPlayerStateJumpBack s_stateJumpBack;
|
||||||
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------
|
/*----------------------------------------------------------------------
|
||||||
|
|
|
@ -1435,6 +1435,14 @@ SOURCE=..\..\..\source\player\psidle.h
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\player\psjmpbck.cpp
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
|
SOURCE=..\..\..\source\player\psjmpbck.h
|
||||||
|
# End Source File
|
||||||
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=..\..\..\source\player\psjump.cpp
|
SOURCE=..\..\..\source\player\psjump.cpp
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue