This commit is contained in:
parent
0d4d68d560
commit
abd4133a86
24 changed files with 429 additions and 164 deletions
|
@ -30,6 +30,7 @@ music/sb-title.vh
|
|||
sfx/ingame.pxm
|
||||
sfx/ingame.vb
|
||||
sfx/ingame.vh
|
||||
demo/demo____.dmo
|
||||
backdrop/credits.gfx
|
||||
backdrop/sky.gfx
|
||||
memcard/memhead.bin
|
||||
|
|
|
@ -141,7 +141,8 @@ pad_src := pads
|
|||
paul_src := paul \
|
||||
scenesel
|
||||
|
||||
player_src := panimsfx \
|
||||
player_src := demoplay \
|
||||
panimsfx \
|
||||
player \
|
||||
pmodes \
|
||||
psbutt \
|
||||
|
|
25
makefile.gfx
25
makefile.gfx
|
@ -464,6 +464,31 @@ GRAF_DIRS_TO_MAKE += $(SCRIPTS_OUT_DIR)
|
|||
GFX_DATA_OUT += $(SCRIPTS_OUT)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Demo mode data
|
||||
#----------------------------------------------------------------------------
|
||||
DEMO_IN_DIR := data/demo
|
||||
DEMO_OUT_DIR := $(DATA_OUT)/demo
|
||||
|
||||
DEMO_LIST := demo____
|
||||
|
||||
DEMO_ALL_IN := $(foreach DEMO,$(DEMO_LIST),$(DEMO_IN_DIR)/$(DEMO).dmo)
|
||||
DEMO_ALL_OUT := $(foreach DEMO,$(DEMO_LIST),$(DEMO_OUT_DIR)/$(DEMO).dmo)
|
||||
|
||||
demo: $(DEMO_ALL_OUT)
|
||||
|
||||
cleandemo:
|
||||
@$(RM) -f $(DEMO_ALL_OUT)
|
||||
@$(ECHO) Demo Cleaned
|
||||
|
||||
$(DEMO_ALL_OUT) : $(DEMO_ALL_IN)
|
||||
$(CP) $(DEMO_ALL_IN) $(DEMO_OUT_DIR)
|
||||
$(ATTRIB) -r $(DEMO_ALL_OUT)
|
||||
|
||||
GRAF_DIRS_TO_MAKE += $(DEMO_OUT_DIR)
|
||||
GFX_DATA_OUT += $(DEMO_ALL_OUT)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Dirs to Make
|
||||
#----------------------------------------------------------------------------
|
||||
|
|
|
@ -46,6 +46,10 @@
|
|||
#include "gfx\prim.h"
|
||||
#endif
|
||||
|
||||
#ifndef __PLAYER_DEMOPLAY_H__
|
||||
#include "player\demoplay.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Std Lib
|
||||
------- */
|
||||
|
@ -73,7 +77,25 @@
|
|||
/*----------------------------------------------------------------------
|
||||
Vars
|
||||
---- */
|
||||
static int count;
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CDemoGameScene::createPlayer()
|
||||
{
|
||||
m_player=new ("player") CDemoPlayer();
|
||||
((CDemoPlayer*)m_player)->loadControlData(DEMO_DEMO_____DMO); // Ooo
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
|
@ -87,6 +109,7 @@ void CFrontEndDemoMode::init()
|
|||
m_smallFont->initialise(&standardFont);
|
||||
m_smallFont->setJustification(FontBank::JUST_CENTRE);
|
||||
m_smallFont->setOt(500);
|
||||
m_smallFont->setWobble(true);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
@ -108,9 +131,9 @@ void CFrontEndDemoMode::shutdown()
|
|||
---------------------------------------------------------------------- */
|
||||
void CFrontEndDemoMode::select()
|
||||
{
|
||||
// LOAD UP DEMO AND DEMO LEVEL
|
||||
m_gameScene=new ("Demo Game Scene") CDemoGameScene();
|
||||
m_gameScene->init();
|
||||
m_shuttingDown=false;
|
||||
count=0;
|
||||
CFader::setFadingIn();
|
||||
}
|
||||
|
||||
|
@ -122,7 +145,7 @@ count=0;
|
|||
---------------------------------------------------------------------- */
|
||||
void CFrontEndDemoMode::unselect()
|
||||
{
|
||||
// DUMP DEMO AND LEVEL
|
||||
m_gameScene->shutdown(); delete m_gameScene;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
@ -135,6 +158,8 @@ void CFrontEndDemoMode::render()
|
|||
{
|
||||
sFrameHdr *fh;
|
||||
|
||||
m_gameScene->render();
|
||||
|
||||
// Game logo/title
|
||||
CFrontEndScene::renderLogo();
|
||||
|
||||
|
@ -143,20 +168,6 @@ void CFrontEndDemoMode::render()
|
|||
m_smallFont->setColour(PRESS_START_TEXT_R,PRESS_START_TEXT_G,PRESS_START_TEXT_B);
|
||||
m_smallFont->print(256,PRESS_START_TEXT_Y,STR__FRONTEND__PRESS_START);
|
||||
}
|
||||
|
||||
|
||||
m_smallFont->setColour(getRndRange(255),getRndRange(255),getRndRange(255));
|
||||
m_smallFont->print(getRndRange(512),getRndRange(256),">DEMO MODE<");
|
||||
|
||||
|
||||
POLY_G4 *g4;
|
||||
g4=GetPrimG4();
|
||||
setXYWH(g4,0,0,512,256);
|
||||
setRGB0(g4,99,50,50);
|
||||
setRGB1(g4,50,50,99);
|
||||
setRGB2(g4,50,99,50);
|
||||
setRGB3(g4,99,50,99);
|
||||
AddPrimToList(g4,MAX_OT-1);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
|
@ -167,10 +178,12 @@ void CFrontEndDemoMode::render()
|
|||
---------------------------------------------------------------------- */
|
||||
void CFrontEndDemoMode::think(int _frames)
|
||||
{
|
||||
m_gameScene->think(_frames);
|
||||
|
||||
if(!m_shuttingDown&&!CFader::isFading())
|
||||
{
|
||||
count+=_frames;
|
||||
if(PadGetDown(0)&PAD_START||count>60*20) // OR DEMO ENDED
|
||||
if(PadGetDown(0)&PAD_START||
|
||||
((CDemoPlayer*)m_gameScene->getPlayer())->getFramesLeft()<FADE_OUT_FRAMES)
|
||||
{
|
||||
m_shuttingDown=true;
|
||||
CFader::setFadingOut();
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
#include "frontend\frontend.h"
|
||||
#endif
|
||||
|
||||
#ifndef __GAME_GAME_H__
|
||||
#include "game\game.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Std Lib
|
||||
------- */
|
||||
|
@ -34,6 +38,13 @@
|
|||
Structure defintions
|
||||
-------------------- */
|
||||
|
||||
class CDemoGameScene : public CGameScene
|
||||
{
|
||||
public:
|
||||
void createPlayer();
|
||||
};
|
||||
|
||||
|
||||
class CFrontEndDemoMode : public CFrontEndMode
|
||||
{
|
||||
public:
|
||||
|
@ -51,21 +62,20 @@ public:
|
|||
private:
|
||||
enum
|
||||
{
|
||||
LOGO_CENTRE_Y=74,
|
||||
GAME_TITLE_TEXT_CENTRE_Y=100,
|
||||
GAME_TITLE_TEXT_R=128,
|
||||
GAME_TITLE_TEXT_G=128,
|
||||
GAME_TITLE_TEXT_B=128,
|
||||
|
||||
PRESS_START_TEXT_Y=180,
|
||||
PRESS_START_TEXT_R=150,
|
||||
PRESS_START_TEXT_G=100,
|
||||
PRESS_START_TEXT_B=100,
|
||||
|
||||
// Fade-out to titles this many frames before end of demo
|
||||
FADE_OUT_FRAMES=95,
|
||||
};
|
||||
|
||||
class FontBank *m_smallFont;
|
||||
|
||||
int m_shuttingDown;
|
||||
|
||||
CDemoGameScene *m_gameScene;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -175,7 +175,7 @@ void CFrontEndMainTitles::select()
|
|||
SetScreenImage(s_image);
|
||||
|
||||
CSoundMediator::setSong(CSoundMediator::SONG_TITLE);
|
||||
CSoundMediator::playSong();
|
||||
m_musicStarted=false;
|
||||
|
||||
CFader::setFadingIn();
|
||||
}
|
||||
|
@ -306,6 +306,13 @@ void CFrontEndMainTitles::think(int _frames)
|
|||
{
|
||||
sval=(sval+(seaspeed*_frames))&4095;
|
||||
|
||||
// Wait until fade in has finished before starting music
|
||||
if(!m_musicStarted&&!CFader::isFading())
|
||||
{
|
||||
CSoundMediator::playSong();
|
||||
m_musicStarted=true;
|
||||
}
|
||||
|
||||
switch(m_mode)
|
||||
{
|
||||
case MODE__PRESS_START:
|
||||
|
|
|
@ -100,6 +100,7 @@ private:
|
|||
int m_gotoCreditsFlag;
|
||||
|
||||
int m_demoTimeout;
|
||||
int m_musicStarted;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#ifndef __PLAYER_PLAYER_H__
|
||||
#include "player\player.h"
|
||||
#endif
|
||||
#include "player\demoplay.h"
|
||||
|
||||
#ifndef __ENEMY_2DENEMY_H__
|
||||
#include "enemy\2denemy.h"
|
||||
|
@ -34,9 +35,6 @@
|
|||
#include "gfx\fader.h"
|
||||
#endif
|
||||
|
||||
#include "level\level.h"
|
||||
#include "gfx\anim.h"
|
||||
|
||||
#ifndef __GFX_BUBICLES__
|
||||
#include "gfx\bubicles.h"
|
||||
#endif
|
||||
|
@ -45,6 +43,9 @@
|
|||
#include <ingamefx.h>
|
||||
#endif
|
||||
|
||||
#ifndef _ANIMTEX_HEADER_
|
||||
#include "gfx\animtex.h"
|
||||
#endif
|
||||
|
||||
|
||||
int GX=248;
|
||||
|
@ -83,19 +84,26 @@ void CGameScene::init()
|
|||
enemy->init();
|
||||
#endif
|
||||
|
||||
m_player=new ("player") CPlayer();
|
||||
createPlayer();
|
||||
m_player->init();
|
||||
m_player->setLayerCollision(Level.getCollisionLayer());
|
||||
|
||||
CAnimDB::LoadAnims();
|
||||
|
||||
CFader::setFadingIn();
|
||||
|
||||
SetGeomOffset( GX, GY );
|
||||
SetGeomScreen(GH);
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
// This is a seperate funtion ( and virtual ) so that we can overload it for
|
||||
// the demo mode (pkg)
|
||||
// NB: This function should *only* include the new function - Don't add anything else here!
|
||||
void CGameScene::createPlayer()
|
||||
{
|
||||
m_player=new ("player") CPlayer();
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
void CGameScene::shutdown()
|
||||
|
@ -121,12 +129,12 @@ void CGameScene::render()
|
|||
/*****************************************************************************/
|
||||
void CGameScene::think(int _frames)
|
||||
{
|
||||
#ifdef __USER_paul__
|
||||
if(!CConversation::isActive()&&PadGetDown(0)&PAD_START)
|
||||
{
|
||||
CConversation::trigger(SCRIPTS_SPEECHTEST_DAT);
|
||||
}
|
||||
#endif
|
||||
//#ifdef __USER_paul__
|
||||
// if(!CConversation::isActive()&&PadGetDown(0)&PAD_START)
|
||||
// {
|
||||
// CConversation::trigger(SCRIPTS_SPEECHTEST_DAT);
|
||||
// }
|
||||
//#endif
|
||||
|
||||
CConversation::think(_frames);
|
||||
if(!CConversation::isActive())
|
||||
|
|
|
@ -27,6 +27,7 @@ virtual ~CGameScene() {;}
|
|||
|
||||
|
||||
void init();
|
||||
virtual void createPlayer();
|
||||
void shutdown();
|
||||
void render();
|
||||
void think(int _frames);
|
||||
|
@ -37,7 +38,7 @@ virtual ~CGameScene() {;}
|
|||
class CPlayer *getPlayer();
|
||||
void sendEvent( GAME_EVENT evt, CThing *sourceThing );
|
||||
|
||||
private:
|
||||
protected:
|
||||
|
||||
CLevel Level;
|
||||
class CPlayer *m_player;
|
||||
|
|
|
@ -64,6 +64,8 @@ int Size=Width*Height;
|
|||
/*****************************************************************************/
|
||||
void CLayerTile3d::shutdown()
|
||||
{
|
||||
MemFree(RenderFlagTable);
|
||||
MemFree(PrimGrid);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -38,7 +38,11 @@ CLevel::~CLevel()
|
|||
{
|
||||
for (int i=0; i<CLayerTile::LAYER_TILE_TYPE_MAX; i++)
|
||||
{
|
||||
if (TileLayers[i]) delete TileLayers[i];
|
||||
if (TileLayers[i])
|
||||
{
|
||||
TileLayers[i]->shutdown();
|
||||
delete TileLayers[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,7 +51,7 @@ void CLevel::init()
|
|||
{
|
||||
TileBankHdr=(sTileBankHdr *)CFileIO::loadFile(LEVELS_CHAPTER02_LEVEL04_TBK,"Tile Bank Data");
|
||||
LevelHdr=(sLvlHdr *)CFileIO::loadFile(LEVELS_CHAPTER02_LEVEL0401_LVL,"Level Data");
|
||||
TPLoadTex(LEVELS_CHAPTER02_LEVEL04_TEX);
|
||||
m_levelTPage=TPLoadTex(LEVELS_CHAPTER02_LEVEL04_TEX);
|
||||
|
||||
initLayers();
|
||||
}
|
||||
|
@ -110,6 +114,9 @@ sTile *TileList=(sTile*)MakePtr(TileBankHdr,TileBankHdr->TileList);
|
|||
/*****************************************************************************/
|
||||
void CLevel::shutdown()
|
||||
{
|
||||
TPFree(m_levelTPage);
|
||||
CollisionLayer->shutdown(); MemFree(CollisionLayer);
|
||||
MemFree(TileBankHdr);
|
||||
MemFree(LevelHdr);
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,8 @@ private:
|
|||
sTileBankHdr *TileBankHdr;
|
||||
static DVECTOR MapPos;
|
||||
|
||||
TPAGE_DESC m_levelTPage;
|
||||
|
||||
|
||||
// Tile Layers
|
||||
CLayerTile *TileLayers[CLayerTile::LAYER_TILE_TYPE_MAX];
|
||||
|
|
|
@ -47,10 +47,79 @@
|
|||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
#include "utils\utils.h"
|
||||
void CDemoPlayer::loadControlData(FileEquate _fe)
|
||||
{
|
||||
int *hdr;
|
||||
|
||||
m_demoData=(char*)CFileIO::loadFile(_fe);
|
||||
hdr=(int*)m_demoData;
|
||||
|
||||
m_controlFrameCount=hdr[0];
|
||||
m_controlDataSize=hdr[1];
|
||||
m_controlData=(demoPlayerControl*)(m_demoData+(sizeof(int)*2));
|
||||
|
||||
m_currentControlFrame=0;
|
||||
m_frameCount=0;
|
||||
m_totalFrameCount=0;
|
||||
|
||||
PAUL_DBGMSG("Loaded demo data");
|
||||
PAUL_DBGMSG("%d actions, %d frames",m_controlDataSize,m_controlFrameCount);
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
int CDemoPlayer::getFramesLeft()
|
||||
{
|
||||
return m_controlFrameCount-m_totalFrameCount;
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
void CDemoPlayer::shutdown()
|
||||
{
|
||||
MemFree(m_demoData);
|
||||
CPlayer::shutdown();
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
Purpose:
|
||||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
PLAYERINPUT CDemoPlayer::readPadInput()
|
||||
{
|
||||
return PI_NONE;
|
||||
PLAYERINPUT input;
|
||||
if(m_currentControlFrame>=m_controlDataSize)
|
||||
{
|
||||
// End of control data reached
|
||||
input=PI_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
demoPlayerControl *crnt;
|
||||
crnt=&m_controlData[m_currentControlFrame];
|
||||
input=(PLAYERINPUT)crnt->m_inputValue;
|
||||
if(++m_frameCount==crnt->m_length)
|
||||
{
|
||||
m_currentControlFrame++;
|
||||
m_frameCount=0;
|
||||
}
|
||||
m_totalFrameCount++;
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
#include "player/player.h"
|
||||
#endif
|
||||
|
||||
#ifndef _FILEIO_HEADER_
|
||||
#include "fileio\fileio.h"
|
||||
#endif
|
||||
|
||||
|
||||
/* Std Lib
|
||||
------- */
|
||||
|
@ -43,9 +47,26 @@ public:
|
|||
u8 m_length;
|
||||
}demoPlayerControl;
|
||||
|
||||
void loadControlData(FileEquate _fe);
|
||||
int getFramesLeft();
|
||||
|
||||
virtual void shutdown();
|
||||
|
||||
|
||||
protected:
|
||||
virtual PLAYERINPUT readPadInput();
|
||||
|
||||
|
||||
private:
|
||||
char *m_demoData;
|
||||
|
||||
demoPlayerControl *m_controlData;
|
||||
int m_controlDataSize;
|
||||
int m_controlFrameCount;
|
||||
|
||||
int m_currentControlFrame;
|
||||
int m_frameCount;
|
||||
int m_totalFrameCount;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -56,6 +56,9 @@
|
|||
Tyepdefs && Defines
|
||||
------------------- */
|
||||
|
||||
//#define _RECORD_DEMO_MODE_
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Structure defintions
|
||||
-------------------- */
|
||||
|
@ -68,8 +71,42 @@
|
|||
Vars
|
||||
---- */
|
||||
|
||||
#ifdef _RECORD_DEMO_MODE_
|
||||
|
||||
#include "player\demoplay.h"
|
||||
|
||||
#define MAX_DEMO_SIZE 512 // So max size of a demo is 1k
|
||||
#define MAX_DEMO_TIME_IN_FRAMES 30*60 // Recorded demo will last 60 seconds
|
||||
|
||||
static CDemoPlayer::demoPlayerControl s_demoControls[MAX_DEMO_SIZE]={{PI_NONE,0}};
|
||||
static int s_demoSize=0;
|
||||
static int s_demoFrameCount=0;
|
||||
|
||||
static void writeDemoControls()
|
||||
{
|
||||
char filename[32];
|
||||
int fh;
|
||||
int fc=MAX_DEMO_TIME_IN_FRAMES;
|
||||
|
||||
sprintf(filename,"demo____.dmo");
|
||||
fh=PCcreat((char *)filename,0);
|
||||
ASSERT(fh!=-1);
|
||||
PCwrite(fh,(char*)&fc,sizeof(fc)); // frame count
|
||||
PCwrite(fh,(char*)&s_demoSize,sizeof(s_demoSize)); // demo size
|
||||
for(int i=0;i<s_demoSize;i++)
|
||||
PCwrite(fh,(char*)&s_demoControls[i],sizeof(CDemoPlayer::demoPlayerControl)); // control data
|
||||
PCclose(fh);
|
||||
|
||||
SYSTEM_DBGMSG("Written demo file %s with %d frames",filename,s_demoSize);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
int s_health;
|
||||
int s_screenPos;
|
||||
int m_cameraScrollPos=0;
|
||||
int m_cameraScrollDir=0;
|
||||
|
||||
|
||||
int MAP3D_CENTRE_X=170;
|
||||
|
@ -80,10 +117,6 @@ int MAP2D_CENTRE_X=-256;
|
|||
int MAP2D_CENTRE_Y=-136;
|
||||
int MAP2D_BLOCKSTEPSIZE=16;
|
||||
|
||||
|
||||
int m_cameraScrollPos=0;
|
||||
int m_cameraScrollDir=0;
|
||||
|
||||
int CAMERA_SCROLLLIMIT=8;
|
||||
int CAMERA_SCROLLTHRESHOLD=6;
|
||||
int CAMERA_SCROLLSPEED=60;
|
||||
|
@ -93,6 +126,9 @@ int CAMERA_STOPMOVETHRESHOLD=10;
|
|||
|
||||
int angg=900;
|
||||
|
||||
DVECTOR ppos={0,0};
|
||||
DVECTOR ofs={0,0};
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Function:
|
||||
|
@ -131,14 +167,12 @@ m_animFrame=0;
|
|||
Pos.vy=10;
|
||||
#endif
|
||||
|
||||
m_cameraOffsetTarget.vx=0;
|
||||
m_cameraOffsetTarget.vy=0;
|
||||
m_cameraOffset.vx=0;
|
||||
m_cameraOffset.vy=0;
|
||||
m_cameraLookYOffset=0;
|
||||
m_cameraLookTimer=0;
|
||||
|
||||
m_lastPadInput=m_padInput=0;
|
||||
m_lastPadInput=m_padInput=PI_NONE;
|
||||
|
||||
s_health=5;
|
||||
s_screenPos=128;
|
||||
|
@ -165,13 +199,7 @@ void CPlayer::shutdown()
|
|||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
#ifdef __USER_paul__
|
||||
// -90,-136
|
||||
// -256,-136
|
||||
// -432,-136
|
||||
DVECTOR ofs={-256,-136}; // nearly -256,-128 ;)
|
||||
int newmode=-1;
|
||||
#else
|
||||
DVECTOR ofs={0,0}; //temporary
|
||||
#endif
|
||||
|
||||
void CPlayer::think(int _frames)
|
||||
|
@ -221,6 +249,7 @@ if(newmode!=-1)
|
|||
// Horizontal movement
|
||||
if(m_layerCollision->Get((Pos.vx+(m_moveVel.vx>>VELOCITY_SHIFT))>>4,(Pos.vy-1)>>4))
|
||||
{
|
||||
// Will hit a wall this frame - Do collision
|
||||
// Move flush with the edge of the obstruction
|
||||
int dir,vx,cx,y,i;
|
||||
if(m_moveVel.vx<0)
|
||||
|
@ -245,7 +274,7 @@ if(newmode!=-1)
|
|||
}
|
||||
Pos.vx=cx-dir;
|
||||
|
||||
// If running then idle, otherwise leave in same state
|
||||
// If running then go to idle, otherwise leave in same state
|
||||
if(m_currentState==STATE_RUN)
|
||||
{
|
||||
setState(STATE_IDLE);
|
||||
|
@ -254,13 +283,9 @@ if(newmode!=-1)
|
|||
}
|
||||
else
|
||||
{
|
||||
// No obstruction this frame - Do the movement
|
||||
Pos.vx+=m_moveVel.vx>>VELOCITY_SHIFT;
|
||||
}
|
||||
if(m_currentState==STATE_IDLE&&isOnEdge())
|
||||
{
|
||||
setState(STATE_IDLETEETER);
|
||||
}
|
||||
|
||||
|
||||
// Vertical movement
|
||||
Pos.vy+=m_moveVel.vy>>VELOCITY_SHIFT;
|
||||
|
@ -318,6 +343,12 @@ Pos.vy=((Pos.vy-16)&0xfffffff0)+colHeight;
|
|||
m_invincibleFrameCount--;
|
||||
}
|
||||
|
||||
// Teeter if on an edge
|
||||
if(m_currentState==STATE_IDLE&&isOnEdge())
|
||||
{
|
||||
setState(STATE_IDLETEETER);
|
||||
}
|
||||
|
||||
// Look around
|
||||
int pad=getPadInputHeld();
|
||||
if(getPadInputDown()&PAD_CIRCLE)
|
||||
|
@ -326,11 +357,9 @@ if(getPadInputDown()&PAD_CIRCLE)
|
|||
}
|
||||
|
||||
|
||||
|
||||
// Map scroll..
|
||||
// Camera scroll..
|
||||
if(m_cameraScrollDir==-1)
|
||||
{
|
||||
//right
|
||||
if(m_cameraScrollPos>-CAMERA_SCROLLLIMIT<<8)
|
||||
{
|
||||
m_cameraScrollPos-=CAMERA_SCROLLSPEED;
|
||||
|
@ -343,7 +372,6 @@ if(getPadInputDown()&PAD_CIRCLE)
|
|||
}
|
||||
else if(m_cameraScrollDir==+1)
|
||||
{
|
||||
//left
|
||||
if(m_cameraScrollPos<(CAMERA_SCROLLLIMIT<<8))
|
||||
{
|
||||
m_cameraScrollPos+=CAMERA_SCROLLSPEED;
|
||||
|
@ -417,29 +445,15 @@ if(getPadInputDown()&PAD_CIRCLE)
|
|||
|
||||
#endif
|
||||
// Move the camera offset
|
||||
m_cameraOffsetTarget=ofs;
|
||||
ppos.vx=MAP3D_CENTRE_X+((MAP3D_BLOCKSTEPSIZE*m_cameraScrollPos)>>8);
|
||||
ppos.vy=MAP3D_CENTRE_Y;
|
||||
ofs.vx=MAP2D_CENTRE_X+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos))>>8);
|
||||
ofs.vy=MAP2D_CENTRE_Y;
|
||||
|
||||
|
||||
|
||||
m_cameraOffset=ofs;
|
||||
/*
|
||||
for(i=0;i<_frames;i++)
|
||||
{
|
||||
int moveDelta;
|
||||
moveDelta=(m_cameraOffset.vx-m_cameraOffsetTarget.vx);
|
||||
if(moveDelta)
|
||||
{
|
||||
if(moveDelta<0)
|
||||
{
|
||||
moveDelta>>=2;
|
||||
if(moveDelta==0)moveDelta=1;
|
||||
}
|
||||
else if(moveDelta>0)
|
||||
{
|
||||
moveDelta>>=2;
|
||||
if(moveDelta==0)moveDelta=-1;
|
||||
}
|
||||
m_cameraOffset.vx+=moveDelta;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if(Pos.vx<0)Pos.vx=0;
|
||||
if(Pos.vy<0)Pos.vy=0;
|
||||
}
|
||||
|
@ -451,11 +465,6 @@ m_cameraOffset=ofs;
|
|||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
int panim=-1;
|
||||
// -3912,500
|
||||
// 130,500
|
||||
// 4172,500
|
||||
DVECTOR ppos={130,500};
|
||||
//int moff=0;
|
||||
|
||||
#ifdef __USER_paul__
|
||||
int mouth=-1,eyes=-1;
|
||||
|
@ -480,12 +489,6 @@ if(eyes!=-1)
|
|||
}
|
||||
#endif
|
||||
|
||||
ppos.vx=MAP3D_CENTRE_X+((MAP3D_BLOCKSTEPSIZE*m_cameraScrollPos)>>8);
|
||||
ppos.vy=MAP3D_CENTRE_Y;
|
||||
ofs.vx=MAP2D_CENTRE_X+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos))>>8);
|
||||
ofs.vy=MAP2D_CENTRE_Y;
|
||||
|
||||
|
||||
//int xval=255-(MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos>>8));
|
||||
//DrawLine(xval-7,0,xval-7,255,0,128,255,0);
|
||||
//DrawLine(xval+7,0,xval+7,255,0,128,255,0);
|
||||
|
@ -513,7 +516,7 @@ DVECTOR CPlayer::getCameraPos()
|
|||
{
|
||||
DVECTOR cameraPos;
|
||||
cameraPos.vx=Pos.vx+m_cameraOffset.vx;
|
||||
cameraPos.vy=Pos.vy+m_cameraOffset.vy;//+m_cameraLookYOffset;
|
||||
cameraPos.vy=Pos.vy+m_cameraOffset.vy;
|
||||
return cameraPos;
|
||||
}
|
||||
|
||||
|
@ -678,11 +681,11 @@ DVECTOR CPlayer::getPlayerPos()
|
|||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
int CPlayer::getPadInputHeld()
|
||||
PLAYERINPUT CPlayer::getPadInputHeld()
|
||||
{
|
||||
return m_padInput;
|
||||
}
|
||||
int CPlayer::getPadInputDown()
|
||||
PLAYERINPUT CPlayer::getPadInputDown()
|
||||
{
|
||||
return m_padInputDown;
|
||||
}
|
||||
|
@ -905,7 +908,7 @@ void CPlayer::updatePadInput()
|
|||
{
|
||||
m_lastPadInput=m_padInput;
|
||||
m_padInput=readPadInput();
|
||||
m_padInputDown=m_padInput&(m_lastPadInput^-1);
|
||||
m_padInputDown=(PLAYERINPUT)(m_padInput&(m_lastPadInput^-1));
|
||||
}
|
||||
|
||||
|
||||
|
@ -915,9 +918,74 @@ void CPlayer::updatePadInput()
|
|||
Params:
|
||||
Returns:
|
||||
---------------------------------------------------------------------- */
|
||||
int CPlayer::readPadInput()
|
||||
PLAYERINPUT CPlayer::readPadInput()
|
||||
{
|
||||
return PadGetHeld(0);
|
||||
PLAYERINPUT input;
|
||||
int pad;
|
||||
|
||||
input=PI_NONE;
|
||||
pad=PadGetHeld(0);
|
||||
|
||||
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_UP))
|
||||
{
|
||||
input=(PLAYERINPUT)(input|PI_UP);
|
||||
}
|
||||
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN))
|
||||
{
|
||||
input=(PLAYERINPUT)(input|PI_DOWN);
|
||||
}
|
||||
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
{
|
||||
input=(PLAYERINPUT)(input|PI_LEFT);
|
||||
}
|
||||
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
{
|
||||
input=(PLAYERINPUT)(input|PI_RIGHT);
|
||||
}
|
||||
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_JUMP))
|
||||
{
|
||||
input=(PLAYERINPUT)(input|PI_JUMP);
|
||||
}
|
||||
if(pad&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION))
|
||||
{
|
||||
input=(PLAYERINPUT)(input|PI_ACTION);
|
||||
}
|
||||
|
||||
|
||||
#ifdef _RECORD_DEMO_MODE_
|
||||
CDemoPlayer::demoPlayerControl *crnt;
|
||||
PLAYERINPUT lastInput;
|
||||
crnt=&s_demoControls[s_demoSize];
|
||||
if(s_demoFrameCount==0)
|
||||
{
|
||||
crnt->m_inputValue=input;
|
||||
}
|
||||
lastInput=(PLAYERINPUT)crnt->m_inputValue;
|
||||
if(crnt->m_length==255)
|
||||
{
|
||||
lastInput=(PLAYERINPUT)(input-1);
|
||||
}
|
||||
if(lastInput==input)
|
||||
{
|
||||
crnt->m_length++;
|
||||
}
|
||||
else
|
||||
{
|
||||
s_demoSize++;
|
||||
ASSERT(s_demoSize<MAX_DEMO_SIZE);
|
||||
crnt++;
|
||||
crnt->m_inputValue=input;
|
||||
crnt->m_length=1;
|
||||
}
|
||||
s_demoFrameCount++;
|
||||
if(s_demoFrameCount==30*60)
|
||||
{
|
||||
writeDemoControls();
|
||||
ASSERT(!"DEMO ENDED");
|
||||
}
|
||||
#endif
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -106,6 +106,22 @@ typedef enum
|
|||
}DAMAGE_TYPE;
|
||||
|
||||
|
||||
// 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
|
||||
// two bytes ) for demo recording and means that the player state codes don't have
|
||||
// to keep using CPadConfig to remap the controls internally.
|
||||
typedef enum
|
||||
{
|
||||
PI_NONE =0,
|
||||
PI_UP =1<<0,
|
||||
PI_DOWN =1<<1,
|
||||
PI_LEFT =1<<2,
|
||||
PI_RIGHT =1<<3,
|
||||
PI_JUMP =1<<4,
|
||||
PI_ACTION =1<<5,
|
||||
}PLAYERINPUT;
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------
|
||||
Structure defintions
|
||||
-------------------- */
|
||||
|
@ -124,10 +140,10 @@ public:
|
|||
VELOCITY_SHIFT=2
|
||||
};
|
||||
|
||||
void init();
|
||||
void shutdown();
|
||||
void think(int _frames);
|
||||
void render();
|
||||
virtual void init();
|
||||
virtual void shutdown();
|
||||
virtual void think(int _frames);
|
||||
virtual void render();
|
||||
|
||||
DVECTOR getCameraPos();
|
||||
|
||||
|
@ -161,8 +177,8 @@ protected:
|
|||
DVECTOR getMoveVelocity();
|
||||
void setMoveVelocity(DVECTOR *_moveVel);
|
||||
DVECTOR getPlayerPos();
|
||||
int getPadInputHeld();
|
||||
int getPadInputDown();
|
||||
PLAYERINPUT getPadInputHeld();
|
||||
PLAYERINPUT getPadInputDown();
|
||||
|
||||
// Collision
|
||||
int isOnSolidGround();
|
||||
|
@ -231,16 +247,18 @@ private:
|
|||
|
||||
int m_lives;
|
||||
|
||||
DVECTOR m_cameraOffsetTarget;
|
||||
DVECTOR m_cameraOffset;
|
||||
int m_cameraLookYOffset;
|
||||
int m_cameraLookTimer;
|
||||
|
||||
void updatePadInput();
|
||||
virtual int readPadInput();
|
||||
int m_padInput; // Controls that are being held down
|
||||
int m_lastPadInput; // Last frames controls
|
||||
int m_padInputDown; // Controls that were pressed this frame
|
||||
protected:
|
||||
virtual PLAYERINPUT readPadInput();
|
||||
private:
|
||||
PLAYERINPUT m_padInput; // Controls that are being held down
|
||||
PLAYERINPUT m_lastPadInput; // Last frames controls
|
||||
PLAYERINPUT m_padInputDown; // Controls that were pressed this frame
|
||||
|
||||
|
||||
// Pointer to the collision layer for the current map
|
||||
class CLayerCollision *m_layerCollision;
|
||||
|
|
|
@ -93,11 +93,11 @@ void CPlayerStateRunChop::think(CPlayer *_player)
|
|||
int controlHeld;
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
if(controlHeld&PI_LEFT)
|
||||
{
|
||||
moveLeft(_player);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
moveRight(_player);
|
||||
}
|
||||
|
@ -131,11 +131,11 @@ void CPlayerStateAirChop::think(CPlayer *_player)
|
|||
int controlHeld;
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
if(controlHeld&PI_LEFT)
|
||||
{
|
||||
moveLeft(_player);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
moveRight(_player);
|
||||
}
|
||||
|
|
|
@ -114,7 +114,7 @@ void CPlayerStateSoakUp::think(CPlayer *_player)
|
|||
int controlHeld;
|
||||
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
if(!(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN)))
|
||||
if(!(controlHeld&PI_DOWN))
|
||||
{
|
||||
setState(_player,STATE_GETUP);
|
||||
}
|
||||
|
|
|
@ -83,11 +83,11 @@ void CPlayerStateFall::think(CPlayer *_player)
|
|||
metrics=getPlayerMetrics(_player);
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
if(controlHeld&PI_LEFT)
|
||||
{
|
||||
moveLeft(_player);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
moveRight(_player);
|
||||
}
|
||||
|
@ -98,11 +98,11 @@ void CPlayerStateFall::think(CPlayer *_player)
|
|||
|
||||
fall(_player);
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION))
|
||||
if(controlHeld&PI_ACTION)
|
||||
{
|
||||
setState(_player,STATE_AIRATTACK);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN))
|
||||
else if(controlHeld&PI_DOWN)
|
||||
{
|
||||
move.vx=0;
|
||||
move.vy=0;
|
||||
|
@ -138,11 +138,11 @@ void CPlayerStateFallFar::think(CPlayer *_player)
|
|||
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
if(controlHeld&PI_LEFT)
|
||||
{
|
||||
moveLeft(_player);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
moveRight(_player);
|
||||
}
|
||||
|
|
|
@ -71,25 +71,25 @@ void CPlayerStateBaseIdle::thinkControl(CPlayer *_player)
|
|||
controlDown=getPadInputDown(_player);
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
|
||||
if(controlDown&CPadConfig::getButton(CPadConfig::PAD_CFG_JUMP))
|
||||
if(controlDown&PI_JUMP)
|
||||
{
|
||||
setState(_player,STATE_JUMP);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
else if(controlHeld&PI_LEFT)
|
||||
{
|
||||
if(canMoveLeft(_player))
|
||||
setState(_player,STATE_RUN);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
if(canMoveRight(_player))
|
||||
setState(_player,STATE_RUN);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION))
|
||||
else if(controlHeld&PI_ACTION)
|
||||
{
|
||||
setState(_player,STATE_ATTACK);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN))
|
||||
else if(controlHeld&PI_DOWN)
|
||||
{
|
||||
setState(_player,STATE_DUCK);
|
||||
}
|
||||
|
|
|
@ -95,7 +95,7 @@ void CPlayerStateJump::think(CPlayer *_player)
|
|||
metrics=getPlayerMetrics(_player);
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
|
||||
if(m_jumpFrames<=metrics->m_metric[PM__MAX_JUMP_FRAMES]&&controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_JUMP))
|
||||
if(m_jumpFrames<=metrics->m_metric[PM__MAX_JUMP_FRAMES]&&PI_JUMP)
|
||||
{
|
||||
m_jumpFrames++;
|
||||
}
|
||||
|
@ -104,15 +104,15 @@ void CPlayerStateJump::think(CPlayer *_player)
|
|||
setState(_player,STATE_FALL);
|
||||
}
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION))
|
||||
if(controlHeld&PI_ACTION)
|
||||
{
|
||||
setState(_player,STATE_AIRATTACK);
|
||||
}
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
if(controlHeld&PI_LEFT)
|
||||
{
|
||||
moveLeft(_player);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
moveRight(_player);
|
||||
}
|
||||
|
|
|
@ -78,11 +78,11 @@ void CPlayerStateRun::enter(CPlayer *_player)
|
|||
setAnimNo(_player,ANIM_PLAYER_ANIM_RUNSTART);
|
||||
}
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
if(controlHeld&PI_LEFT)
|
||||
{
|
||||
setFacing(_player,FACING_LEFT);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
setFacing(_player,FACING_RIGHT);
|
||||
}
|
||||
|
@ -103,24 +103,24 @@ void CPlayerStateRun::think(CPlayer *_player)
|
|||
controlDown=getPadInputDown(_player);
|
||||
controlHeld=getPadInputHeld(_player);
|
||||
|
||||
if(controlDown&CPadConfig::getButton(CPadConfig::PAD_CFG_JUMP))
|
||||
if(controlDown&PI_JUMP)
|
||||
{
|
||||
setState(_player,STATE_JUMP);
|
||||
}
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_DOWN))
|
||||
if(controlHeld&PI_DOWN)
|
||||
{
|
||||
setState(_player,STATE_DUCK);
|
||||
}
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_ACTION))
|
||||
if(controlHeld&PI_ACTION)
|
||||
{
|
||||
setState(_player,STATE_RUNATTACK);
|
||||
}
|
||||
|
||||
if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_LEFT))
|
||||
if(controlHeld&PI_LEFT)
|
||||
{
|
||||
moveLeft(_player);
|
||||
}
|
||||
else if(controlHeld&CPadConfig::getButton(CPadConfig::PAD_CFG_RIGHT))
|
||||
else if(controlHeld&PI_RIGHT)
|
||||
{
|
||||
moveRight(_player);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "utils\utils.h"
|
||||
|
||||
#include "system\gp.h"
|
||||
#include "gfx\anim.h"
|
||||
|
||||
// scenes
|
||||
#include "game\game.h"
|
||||
|
@ -116,6 +117,8 @@ void InitSystem() // reordered to reduce black screen (hope all is well
|
|||
|
||||
CBubicleFactory::init();
|
||||
|
||||
CAnimDB::LoadAnims();
|
||||
|
||||
#if defined(__DEBUG_MEM__)
|
||||
DebugMemFontInit();
|
||||
#endif
|
||||
|
|
|
@ -669,6 +669,14 @@ SOURCE=..\..\..\source\paul\scenesel.h
|
|||
# PROP Default_Filter ""
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\source\player\demoplay.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\source\player\demoplay.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=..\..\..\source\player\panimsfx.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue