This commit is contained in:
Charles 2001-07-03 20:49:30 +00:00
parent afaccf62dd
commit d16d2ce244
9 changed files with 104 additions and 9 deletions

View file

@ -281,6 +281,7 @@ player_src := demoplay \
pmfly \ pmfly \
pmjelly \ pmjelly \
pmnet \ pmnet \
pmswal \
psbutt \ psbutt \
pscart \ pscart \
psdance \ psdance \
@ -293,7 +294,8 @@ player_src := demoplay \
psjump \ psjump \
pslook \ pslook \
psrun \ psrun \
psspring psspring \
psswal
save_src := save save_src := save

View file

@ -67,6 +67,7 @@ void CNpcSubSharkEnemy::postInit()
m_timerTimer = 0; m_timerTimer = 0;
m_salvoCount = 5; m_salvoCount = 5;
m_carryPlayer = false;
m_movementTimer = GameState::getOneSecondInFrames() * ( 1 + ( ( 7 * m_health ) / m_data[m_type].initHealth ) ); m_movementTimer = GameState::getOneSecondInFrames() * ( 1 + ( ( 7 * m_health ) / m_data[m_type].initHealth ) );
CNpcBossEnemy::postInit(); CNpcBossEnemy::postInit();
@ -240,7 +241,7 @@ void CNpcSubSharkEnemy::processMovement( int _frames )
if ( !m_animPlaying ) if ( !m_animPlaying )
{ {
m_animPlaying = true; m_animPlaying = true;
m_animNo = ANIM_SHARKSUB_SWIM; m_animNo = ANIM_SHARKSUB_SPRINTOPEN;
m_frame = 0; m_frame = 0;
} }
@ -276,11 +277,23 @@ void CNpcSubSharkEnemy::processMovement( int _frames )
case SUB_SHARK_CHARGE: case SUB_SHARK_CHARGE:
{ {
if ( !m_animPlaying ) if ( !m_carryPlayer && abs( playerXDist ) < 200 )
{ {
m_animPlaying = true; if ( m_animNo != ANIM_SHARKSUB_CHOMP || !m_animPlaying )
m_animNo = ANIM_SHARKSUB_SWIM; {
m_frame = 0; m_animPlaying = true;
m_animNo = ANIM_SHARKSUB_CHOMP;
m_frame = 0;
}
}
else
{
if ( !m_animPlaying )
{
m_animPlaying = true;
m_animNo = ANIM_SHARKSUB_SPRINTOPEN;
m_frame = 0;
}
} }
s32 distX, distY; s32 distX, distY;
@ -332,10 +345,33 @@ void CNpcSubSharkEnemy::processMovement( int _frames )
processGenericGotoTarget( _frames, distX, distY, m_speed ); processGenericGotoTarget( _frames, distX, distY, m_speed );
} }
if ( m_carryPlayer )
{
// spit out player
CPlayer *player = GameScene.getPlayer();
player->setMode( m_oldPlayerMode );
m_carryPlayer = false;
DVECTOR move;
move.vx = 16 * _frames;
move.vy = -16 * _frames;
player->shove( move );
player->setMoveVelocity( &move );
}
break; break;
} }
} }
if ( m_carryPlayer )
{
CPlayer *player = GameScene.getPlayer();
player->setPos( Pos );
}
/*if ( !m_animPlaying ) /*if ( !m_animPlaying )
{ {
@ -705,11 +741,19 @@ void CNpcSubSharkEnemy::collidedWith(CThing *_thisThing)
if(playerState==ATTACK_STATE__NONE) if(playerState==ATTACK_STATE__NONE)
{ {
if ( !player->isRecoveringFromHit() ) CPlayer *player = GameScene.getPlayer();
if ( !player->isRecoveringFromHit() && !m_carryPlayer )
{ {
CPlayer *player = GameScene.getPlayer();
player->takeDamage( m_data[m_type].damageToUserType,REACT__GET_DIRECTION_FROM_THING,(CThing*)this ); player->takeDamage( m_data[m_type].damageToUserType,REACT__GET_DIRECTION_FROM_THING,(CThing*)this );
} }
if ( m_state == SUB_SHARK_CHARGE && player->getMode() != PLAYER_MODE_SWALLOW )
{
m_carryPlayer = true;
m_oldPlayerMode = player->getMode();
player->setMode( PLAYER_MODE_SWALLOW );
}
} }
else if ( m_invulnerableTimer <= 0 ) else if ( m_invulnerableTimer <= 0 )
{ {

View file

@ -18,6 +18,10 @@
#include "enemy\nboss.h" #include "enemy\nboss.h"
#endif #endif
#ifndef __PLAYER_PLAYER_H__
#include "player\player.h"
#endif
class CNpcSubSharkEnemy : public CNpcBossEnemy class CNpcSubSharkEnemy : public CNpcBossEnemy
{ {
@ -53,6 +57,8 @@ protected:
u8 m_salvoCount; u8 m_salvoCount;
s32 m_invulnerableTimer; s32 m_invulnerableTimer;
DVECTOR m_targetPos; DVECTOR m_targetPos;
u8 m_carryPlayer;
PLAYER_MODE m_oldPlayerMode;
}; };
#endif #endif

View file

@ -74,6 +74,10 @@
#include "player\pmcart.h" #include "player\pmcart.h"
#endif #endif
#ifndef __PLAYER_PMSWAL_H__
#include "player\pmswal.h"
#endif
#ifndef __GFX_FONT_H__ #ifndef __GFX_FONT_H__
#include "gfx\font.h" #include "gfx\font.h"
#endif #endif
@ -205,6 +209,7 @@ static const char *s_modeText[NUM_PLAYERMODES]=
"DEAD", "DEAD",
"FLY", "FLY",
"CART", "CART",
"SWALLOW",
}; };
#endif #endif
@ -226,6 +231,7 @@ CPlayerModeJellyLauncher PLAYERMODEJELLYLAUNCHER;
CPlayerModeDead PLAYERMODEDEAD; CPlayerModeDead PLAYERMODEDEAD;
CPlayerModeFly PLAYERMODEFLY; CPlayerModeFly PLAYERMODEFLY;
CPlayerModeCart PLAYERMODECART; CPlayerModeCart PLAYERMODECART;
CPlayerModeSwallow PLAYERMODESWALLOW;
CPlayerMode *CPlayer::s_playerModes[NUM_PLAYERMODES]= CPlayerMode *CPlayer::s_playerModes[NUM_PLAYERMODES]=
{ {
@ -239,6 +245,7 @@ CPlayerMode *CPlayer::s_playerModes[NUM_PLAYERMODES]=
&PLAYERMODEDEAD, // PLAYER_MODE_DEAD &PLAYERMODEDEAD, // PLAYER_MODE_DEAD
&PLAYERMODEFLY, // PLAYER_MODE_FLY &PLAYERMODEFLY, // PLAYER_MODE_FLY
&PLAYERMODECART, // PLAYER_MODE_CART &PLAYERMODECART, // PLAYER_MODE_CART
&PLAYERMODESWALLOW, // PLAYER_MODE_SWALLOW
}; };
@ -301,6 +308,7 @@ PLAYER_ADDONS s_addonNumbers[NUM_PLAYERMODES]=
NO_ADDON, // PLAYER_MODE_DEAD NO_ADDON, // PLAYER_MODE_DEAD
NO_ADDON, // PLAYER_MODE_FLY NO_ADDON, // PLAYER_MODE_FLY
NO_ADDON, // PLAYER_MODE_CART NO_ADDON, // PLAYER_MODE_CART
NO_ADDON, // PLAYER_MODE_SWALLOW
}; };
s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
@ -2008,7 +2016,8 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection,CTh
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
m_currentPlayerModeClass->getState()!=STATE_SOAKUP&& // Or soaking up m_currentPlayerModeClass->getState()!=STATE_SOAKUP&& // Or soaking up
m_currentMode!=PLAYER_MODE_DEAD) // Or already dead! :) m_currentMode!=PLAYER_MODE_DEAD &&
m_currentMode!=PLAYER_MODE_SWALLOW) // Or already dead! :)
{ {
int ouchThatHurt=true; int ouchThatHurt=true;
int ouchThatHurtSoMuchThatImJustGoingToDieNow=false; int ouchThatHurtSoMuchThatImJustGoingToDieNow=false;

View file

@ -60,6 +60,7 @@ typedef enum
PLAYER_MODE_FLY, PLAYER_MODE_FLY,
PLAYER_MODE_CART, PLAYER_MODE_CART,
PLAYER_MODE_SWALLOW,
NUM_PLAYERMODES, NUM_PLAYERMODES,
}PLAYER_MODE; }PLAYER_MODE;
@ -88,6 +89,7 @@ typedef enum
STATE_CART, STATE_CART,
STATE_FLOAT, STATE_FLOAT,
STATE_CELEBRATE, STATE_CELEBRATE,
STATE_SWALLOW,
NUM_STATES, NUM_STATES,
}PLAYER_STATE; }PLAYER_STATE;
@ -258,6 +260,7 @@ public:
public: public:
void setMode(PLAYER_MODE _mode); void setMode(PLAYER_MODE _mode);
PLAYER_MODE getMode() {return m_currentMode;}
int getFacing(); int getFacing();
void setFacing(int _facing); void setFacing(int _facing);
int getAnimFrame(); int getAnimFrame();

View file

@ -82,6 +82,10 @@
#include "player\psdance.h" #include "player\psdance.h"
#endif #endif
#ifndef __PLAYER_PSSWAL_H__
#include "player\psswal.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -138,6 +142,7 @@ static CPlayerState *s_stateTable[]=
&s_stateCart, // STATE_CART &s_stateCart, // STATE_CART
&s_stateFloat, // STATE_FLOAT &s_stateFloat, // STATE_FLOAT
&s_stateDance, // STATE_CELEBRATE &s_stateDance, // STATE_CELEBRATE
&s_stateSwallow, // STATE_SWALLOW
}; };

View file

@ -94,6 +94,10 @@
#include "player\psdance.h" #include "player\psdance.h"
#endif #endif
#ifndef __PLAYER_PSSWAL_H__
#include "player\psswal.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -150,6 +154,7 @@ static CPlayerState *s_stateTable[]=
&s_stateCart, // STATE_CART &s_stateCart, // STATE_CART
&s_stateFloat, // STATE_FLOAT &s_stateFloat, // STATE_FLOAT
&s_stateDance, // STATE_CELEBRATE &s_stateDance, // STATE_CELEBRATE
&s_stateSwallow, // STATE_SWALLOW
}; };

View file

@ -74,6 +74,10 @@
#include "player\pscart.h" #include "player\pscart.h"
#endif #endif
#ifndef __PLAYER_PSSWAL_H__
#include "player\psswal.h"
#endif
#ifndef __PLAYER_PSFLOAT_H__ #ifndef __PLAYER_PSFLOAT_H__
#include "player\psfloat.h" #include "player\psfloat.h"
#endif #endif
@ -142,6 +146,7 @@ static CPlayerState *s_stateTable[]=
&s_stateCart, // STATE_CART &s_stateCart, // STATE_CART
&s_stateFloat, // STATE_FLOAT &s_stateFloat, // STATE_FLOAT
&s_stateDance, // STATE_CELEBRATE &s_stateDance, // STATE_CELEBRATE
&s_stateSwallow, // STATE_SWALLOW
}; };
static PlayerMetrics s_playerMetrics= static PlayerMetrics s_playerMetrics=

View file

@ -1858,6 +1858,14 @@ SOURCE=..\..\..\source\player\pmodes.cpp
SOURCE=..\..\..\source\player\pmodes.h SOURCE=..\..\..\source\player\pmodes.h
# End Source File # End Source File
# Begin Source File
SOURCE=..\..\..\source\player\pmswal.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\player\pmswal.h
# End Source File
# End Group # End Group
# Begin Group "states" # Begin Group "states"
@ -1968,6 +1976,14 @@ SOURCE=..\..\..\source\player\psspring.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\..\..\source\player\psswal.cpp
# End Source File
# Begin Source File
SOURCE=..\..\..\source\player\psswal.h
# End Source File
# Begin Source File
SOURCE=..\..\..\source\player\pstates.h SOURCE=..\..\..\source\player\pstates.h
# End Source File # End Source File
# End Group # End Group