diff --git a/source/player/player.cpp b/source/player/player.cpp index 82b2f09b5..9cd338a58 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -514,6 +514,16 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= // ------------------------------------------------------------------------------- +int m_cameraXScrollDir; +int m_cameraXScrollPos; +int CAMERA_SCROLLLIMIT=8; // SB is this many tiles off centre at most +//int CAMERA_SCROLLTHRESHOLD=6; // If SB moves when more than this many tiles off-centre, the camera will *always* scroll +int CAMERA_STARTMOVETHRESHOLD=20; // If SB moves faster than this then the camera starts scrolling +int CAMERA_STOPMOVETHRESHOLD=10; // If SB moves slower than this then the camera stops scrolling +int CAMERA_SCROLLSPEED=1000; // Speed of the scroll +int CAMERA_ACCURACYSHIFT=8; +const int CAMERA_TILESIZE=16; + /*---------------------------------------------------------------------- @@ -712,6 +722,32 @@ if(newmode!=-1) m_invincibleFrameCount--; } + // Camera scroll.. + if(m_cameraXScrollDir==-1) + { + if(m_cameraXScrollPos>-(CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<(CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<m_playerPosLimitBox.x2) Pos.vx=m_playerPosLimitBox.x2; @@ -845,12 +881,6 @@ if(newmode!=-1) m_lastLedgeLookAhead=m_ledgeLookAhead; m_ledgeLookAhead=0; - // Left/right scroll as SB moves left/right - int max=scmax*scspeed; - m_leftRightScrollPosition+=m_moveVelocity.vx; - if(m_leftRightScrollPosition<-max)m_leftRightScrollPosition=-max; - else if(m_leftRightScrollPosition>max)m_leftRightScrollPosition=max; - // Camera focus point stuff calcCameraFocusPointTarget(); for(i=0;i<_frames;i++) @@ -1042,13 +1072,14 @@ for(int i=0;iprintFT4(fh,x-2,y-2,0,0,0); itemX+=COLLECTEDITEM_GAP; } +/* if(isWearingDivingHelmet()) { sFrameHdr *fh=m_spriteBank->getFrameHeader(FRM__HELMET); m_spriteBank->printFT4(fh,itemX-(fh->W/2),COLLECTEDITEM_BASEY-(fh->H/2),0,0,0); itemX+=COLLECTEDITEM_GAP; } - +*/ } @@ -1290,7 +1321,6 @@ void CPlayer::teleportTo(int _x,int _y) setPos(pos); setRespawnPos(pos); - m_leftRightScrollPosition=0; calcCameraFocusPointTarget(); m_currentCamFocusPoint=m_currentCamFocusPointTarget; } @@ -1367,7 +1397,7 @@ void CPlayer::playAnimFrameSfx(int _animNo,int _animFrame) ---------------------------------------------------------------------- */ void CPlayer::calcCameraFocusPointTarget() { - m_currentCamFocusPointTarget.vx=Pos.vx+MAP2D_CENTRE_X+(m_leftRightScrollPosition/scspeed); + m_currentCamFocusPointTarget.vx=Pos.vx+MAP2D_CENTRE_X-(m_cameraXScrollPos>>CAMERA_ACCURACYSHIFT); m_currentCamFocusPointTarget.vy=Pos.vy+MAP2D_CENTRE_Y; } @@ -1400,7 +1430,8 @@ void CPlayer::respawn() m_cameraLookOffset=0; m_lockCamera=false; - m_leftRightScrollPosition=0; + m_cameraXScrollDir=0; + m_cameraXScrollPos=0; calcCameraFocusPointTarget(); m_currentCamFocusPoint=m_currentCamFocusPointTarget; m_cameraPos.vx=m_currentCamFocusPoint.vx; @@ -1909,6 +1940,42 @@ void CPlayer::shove( DVECTOR move ) } } +/*---------------------------------------------------------------------- + Function: + Purpose: + Params: + Returns: + ---------------------------------------------------------------------- */ +void CPlayer::moveLeft() +{ + if(m_moveVelocity.vx<-CAMERA_STARTMOVETHRESHOLD)//||m_cameraXScrollPos<-(CAMERA_SCROLLTHRESHOLD*CAMERA_TILESIZE)<-CAMERA_STOPMOVETHRESHOLD) + { + m_cameraXScrollDir=0; + } +} +void CPlayer::moveRight() +{ + if(m_moveVelocity.vx>CAMERA_STARTMOVETHRESHOLD)//||m_cameraXScrollPos>(CAMERA_SCROLLTHRESHOLD*CAMERA_TILESIZE)<giveJellyAmmo(); } diff --git a/source/player/pmnet.cpp b/source/player/pmnet.cpp index 4fd4f08d2..32663b518 100644 --- a/source/player/pmnet.cpp +++ b/source/player/pmnet.cpp @@ -86,6 +86,7 @@ int npsize=40; ---------------------------------------------------------------------- */ void CPlayerModeNet::enter() { + CPlayerModeBase::enter(); m_netState=NET_STATE__INERT; m_jellyfishHeld=0; } diff --git a/source/player/pmodes.cpp b/source/player/pmodes.cpp index 20871de2b..970a8528d 100644 --- a/source/player/pmodes.cpp +++ b/source/player/pmodes.cpp @@ -537,6 +537,7 @@ void CPlayerModeBase::moveLeft() moveVel.vx-=metrics->m_metric[PM__RUN_REVERSESLOWDOWN]; } setMoveVelocity(&moveVel); + m_player->moveLeft(); } void CPlayerModeBase::moveRight() @@ -560,6 +561,7 @@ void CPlayerModeBase::moveRight() moveVel.vx+=metrics->m_metric[PM__RUN_REVERSESLOWDOWN]; } setMoveVelocity(&moveVel); + m_player->moveRight(); } int CPlayerModeBase::slowdown() { diff --git a/source/player/psjump.cpp b/source/player/psjump.cpp index 0e1857057..4a48378ae 100644 --- a/source/player/psjump.cpp +++ b/source/player/psjump.cpp @@ -117,10 +117,10 @@ void CPlayerStateJump::think(CPlayerModeBase *_playerMode) _playerMode->slowdown(); } - if(controlDown&PI_DOWN) - { - _playerMode->setState(STATE_BUTTBOUNCE); - } +// if(controlDown&PI_DOWN) +// { +// _playerMode->setState(STATE_BUTTBOUNCE); +// } }