This commit is contained in:
Paul 2001-04-11 22:37:57 +00:00
parent a01fb776cd
commit 9f69c7daf2
2 changed files with 33 additions and 46 deletions

View file

@ -183,11 +183,6 @@ int s_screenPos;
DVECTOR m_cameraScrollPos={0,600}; DVECTOR m_cameraScrollPos={0,600};
int m_cameraLookOffset=0; int m_cameraLookOffset=0;
int SCREEN_GEOM_CENTRE_X=248;
int SCREEN_GEOM_CENTRE_Y=165;
int SCREEN_GEOM_PLAYER_OFS_X=9;
int SCREEN_GEOM_PLAYER_OFS_Y=-26;
int MAP2D_CENTRE_X=-256; int MAP2D_CENTRE_X=-256;
int MAP2D_CENTRE_Y=-136; int MAP2D_CENTRE_Y=-136;
int MAP2D_BLOCKSTEPSIZE=16; int MAP2D_BLOCKSTEPSIZE=16;
@ -256,9 +251,6 @@ m_animFrame=0;
m_lives=CGameSlotManager::getSlotData().m_lives; m_lives=CGameSlotManager::getSlotData().m_lives;
m_cameraOffset.vx=0;
m_cameraOffset.vy=0;
m_lastPadInput=m_padInput=PI_NONE; m_lastPadInput=m_padInput=PI_NONE;
s_screenPos=128; s_screenPos=128;
@ -291,10 +283,10 @@ void CPlayer::shutdown()
} }
int looktimeout=80; int looktimeout=50;
int lookmaxoffsetup=3*256; int lookmaxoffsetup=3*16;
int lookmaxoffsetdown=6*256; int lookmaxoffsetdown=6*16;
int lookspeed=40; int lookspeed=20;
int lookreturnspeed=80; int lookreturnspeed=80;
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
@ -304,6 +296,7 @@ int lookreturnspeed=80;
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int newmode=-1; int newmode=-1;
int cammove=2;
#ifdef _STATE_DEBUG_ #ifdef _STATE_DEBUG_
char posBuf[100]; char posBuf[100];
@ -360,16 +353,15 @@ else if(Pos.vy>m_mapEdge.vy-64)Pos.vy=m_mapEdge.vy-64;
// Look around // Look around
int pad=getPadInputHeld(); int pad=getPadInputHeld();
static int padLookAroundTimer=0;
if(pad&PI_UP) if(pad&PI_UP)
{ {
if(padLookAroundTimer>0) if(m_padLookAroundTimer>0)
{ {
padLookAroundTimer=0; m_padLookAroundTimer=0;
} }
else if(padLookAroundTimer>-looktimeout) else if(m_padLookAroundTimer>-looktimeout)
{ {
padLookAroundTimer--; m_padLookAroundTimer--;
} }
else if(m_cameraLookOffset>-lookmaxoffsetup) else if(m_cameraLookOffset>-lookmaxoffsetup)
{ {
@ -382,13 +374,13 @@ static int padLookAroundTimer=0;
} }
else if(pad&PI_DOWN) else if(pad&PI_DOWN)
{ {
if(padLookAroundTimer<0) if(m_padLookAroundTimer<0)
{ {
padLookAroundTimer=0; m_padLookAroundTimer=0;
} }
else if(padLookAroundTimer<looktimeout) else if(m_padLookAroundTimer<looktimeout)
{ {
padLookAroundTimer++; m_padLookAroundTimer++;
} }
else if(m_cameraLookOffset<lookmaxoffsetdown) else if(m_cameraLookOffset<lookmaxoffsetdown)
{ {
@ -401,11 +393,11 @@ static int padLookAroundTimer=0;
} }
else else
{ {
padLookAroundTimer=0; m_padLookAroundTimer=0;
} }
// Return to centre // Return to centre
if(padLookAroundTimer>=0&&m_cameraLookOffset<0) if(m_padLookAroundTimer>=0&&m_cameraLookOffset<0)
{ {
m_cameraLookOffset+=lookreturnspeed; m_cameraLookOffset+=lookreturnspeed;
if(m_cameraLookOffset>0) if(m_cameraLookOffset>0)
@ -413,7 +405,7 @@ static int padLookAroundTimer=0;
m_cameraLookOffset=0; m_cameraLookOffset=0;
} }
} }
if(padLookAroundTimer<=0&&m_cameraLookOffset>0) if(m_padLookAroundTimer<=0&&m_cameraLookOffset>0)
{ {
m_cameraLookOffset-=lookreturnspeed; m_cameraLookOffset-=lookreturnspeed;
if(m_cameraLookOffset<0) if(m_cameraLookOffset<0)
@ -423,38 +415,30 @@ static int padLookAroundTimer=0;
} }
} }
// New cam stuff
m_currentCamFocusPointTarget.vx=Pos.vx+MAP2D_CENTRE_X+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vx))>>8);
m_currentCamFocusPointTarget.vy=Pos.vy+MAP2D_CENTRE_Y+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vy))>>8)+m_cameraLookOffset;
m_currentCamFocusPoint.vx+=(m_currentCamFocusPointTarget.vx-m_currentCamFocusPoint.vx)>>cammove;
m_currentCamFocusPoint.vy+=(m_currentCamFocusPointTarget.vy-m_currentCamFocusPoint.vy)>>cammove;
m_cameraPos.vx=m_currentCamFocusPoint.vx;
// Move the camera offset m_cameraPos.vy=m_currentCamFocusPoint.vy;
m_playerScreenGeomPos.vx=SCREEN_GEOM_PLAYER_OFS_X+((MAP2D_BLOCKSTEPSIZE*m_cameraScrollPos.vx)>>8);
m_playerScreenGeomPos.vy=SCREEN_GEOM_PLAYER_OFS_Y+((MAP2D_BLOCKSTEPSIZE*(m_cameraScrollPos.vy-m_cameraLookOffset))>>8);
m_cameraOffset.vx=MAP2D_CENTRE_X+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vx))>>8);
m_cameraOffset.vy=MAP2D_CENTRE_Y+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vy+m_cameraLookOffset))>>8);
m_cameraPos.vx=Pos.vx+m_cameraOffset.vx;
m_cameraPos.vy=Pos.vy+m_cameraOffset.vy;
// Limit camera scroll to the edges of the map // Limit camera scroll to the edges of the map
if(m_cameraPos.vx<0) if(m_cameraPos.vx<0)
{ {
m_playerScreenGeomPos.vx+=m_cameraPos.vx;
m_cameraPos.vx=0; m_cameraPos.vx=0;
} }
else if(m_cameraPos.vx>m_mapCameraEdges.vx) else if(m_cameraPos.vx>m_mapCameraEdges.vx)
{ {
m_playerScreenGeomPos.vx-=m_mapCameraEdges.vx-m_cameraPos.vx;
m_cameraPos.vx=m_mapCameraEdges.vx; m_cameraPos.vx=m_mapCameraEdges.vx;
} }
if(m_cameraPos.vy<0) if(m_cameraPos.vy<0)
{ {
m_playerScreenGeomPos.vy+=m_cameraPos.vy;
m_cameraPos.vy=0; m_cameraPos.vy=0;
} }
else if(m_cameraPos.vy>m_mapCameraEdges.vy) else if(m_cameraPos.vy>m_mapCameraEdges.vy)
{ {
m_playerScreenGeomPos.vy-=m_mapCameraEdges.vy-m_cameraPos.vy;
m_cameraPos.vy=m_mapCameraEdges.vy; m_cameraPos.vy=m_mapCameraEdges.vy;
} }
@ -493,8 +477,8 @@ m_fontBank->print(40,40,posBuf);
{ {
DVECTOR sbPos= DVECTOR sbPos=
{ {
SCREEN_GEOM_CENTRE_X+m_playerScreenGeomPos.vx, Pos.vx-m_cameraPos.vx,
SCREEN_GEOM_CENTRE_Y+m_playerScreenGeomPos.vy Pos.vy-m_cameraPos.vy,
}; };
renderSb(&sbPos,m_animNo,m_animFrame>>sbanimspeed); renderSb(&sbPos,m_animNo,m_animFrame>>sbanimspeed);
m_currentPlayerModeClass->render(&sbPos); m_currentPlayerModeClass->render(&sbPos);
@ -763,6 +747,10 @@ void CPlayer::respawn()
m_healthReactFrames=0; m_healthReactFrames=0;
m_invincibleFrameCount=INVINCIBLE_FRAMES__START; m_invincibleFrameCount=INVINCIBLE_FRAMES__START;
Pos=m_respawnPos; Pos=m_respawnPos;
m_cameraLookOffset=0;
m_currentCamFocusPoint.vx=Pos.vx+MAP2D_CENTRE_X+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vx))>>8);
m_currentCamFocusPoint.vy=Pos.vy+MAP2D_CENTRE_Y+((MAP2D_BLOCKSTEPSIZE*(-m_cameraScrollPos.vy))>>8)+m_cameraLookOffset;
m_padLookAroundTimer=0;
m_glassesFlag=0; m_glassesFlag=0;
m_squeakyBootsTimer=0; m_squeakyBootsTimer=0;
@ -770,7 +758,6 @@ void CPlayer::respawn()
m_bubbleAmmo=0; m_bubbleAmmo=0;
m_jellyAmmo=0; m_jellyAmmo=0;
m_cameraLookOffset=0;
clearPlatform(); clearPlatform();
} }

View file

@ -193,10 +193,12 @@ private:
int m_animNo; int m_animNo;
CActorGfx *m_actorGfx; CActorGfx *m_actorGfx;
DVECTOR m_playerScreenGeomPos;
DVECTOR m_cameraPos; DVECTOR m_cameraPos;
DVECTOR m_currentCamFocusPointTarget;
DVECTOR m_currentCamFocusPoint;
int m_facing; int m_facing;
int m_padLookAroundTimer;
enum enum
{ {
@ -218,8 +220,6 @@ private:
int m_health; int m_health;
int m_healthReactFrames; int m_healthReactFrames;
DVECTOR m_cameraOffset;
void updatePadInput(); void updatePadInput();
protected: protected:
virtual PLAYERINPUT readPadInput(); virtual PLAYERINPUT readPadInput();