diff --git a/source/frontend/frontend.cpp b/source/frontend/frontend.cpp index 86d81c561..f4039756b 100644 --- a/source/frontend/frontend.cpp +++ b/source/frontend/frontend.cpp @@ -173,11 +173,6 @@ void CFrontEndScene::init() m_font=new ("frontendfont") FontBank(); m_font->initialise(&standardFont); m_font->setJustification(FontBank::JUST_CENTRE); - -#ifndef __E3__ - CGameSlotManager::eraseGameSlot(0); - CGameSlotManager::setActiveSlot(0); -#endif } diff --git a/source/frontend/maintitl.cpp b/source/frontend/maintitl.cpp index b2ae8a9c8..513091cf4 100644 --- a/source/frontend/maintitl.cpp +++ b/source/frontend/maintitl.cpp @@ -145,12 +145,10 @@ void CFrontEndMainTitles::init() 50,20,200,20, STR__FRONTEND__OPTIONS, &m_gotoOptionsFlag,true); -#ifdef __E3__ CGUIFactory::createValueButtonFrame(m_mainMenu, 50,40,200,20, STR__FRONTEND__CREDITS, &m_gotoCreditsFlag,true); -#endif } /*---------------------------------------------------------------------- diff --git a/source/level/level.cpp b/source/level/level.cpp index 59f3f4ba4..3b3ae804a 100644 --- a/source/level/level.cpp +++ b/source/level/level.cpp @@ -447,7 +447,9 @@ void CLevel::initThings(int _respawningLevel) createThisPickup=false; } - if((PICKUP_TYPE)ItemList->Type==PICKUP__NET&&_respawningLevel) + if(((PICKUP_TYPE)ItemList->Type==PICKUP__NET|| + (PICKUP_TYPE)ItemList->Type==PICKUP__HELMET)&& + _respawningLevel) { createThisPickup=false; } diff --git a/source/map/map.cpp b/source/map/map.cpp index e05378eef..9a72ecaa8 100644 --- a/source/map/map.cpp +++ b/source/map/map.cpp @@ -134,7 +134,6 @@ extern int s_globalLevelSelectThing; ---------------------------------------------------------------------- */ void CMapScene::init() { -#ifdef __E3__ m_font=new ("map screen font") FontBank(); m_font->initialise(&standardFont); m_font->setJustification(FontBank::JUST_CENTRE); @@ -150,10 +149,9 @@ void CMapScene::init() m_screenImage=MemAlloc(512*256*2,"MapScreen"); generateMapScreenImage(); SetScreenImage((u8*)m_screenImage); -#endif m_readyToExit=false; -// CFader::setFadingIn(CFader::BLACK_FADE); + CFader::setFadingIn(CFader::BLACK_FADE); } @@ -165,12 +163,10 @@ void CMapScene::init() ---------------------------------------------------------------------- */ void CMapScene::shutdown() { -#ifdef __E3__ ClearScreenImage(); MemFree(m_screenImage); m_spriteBank->dump(); delete m_spriteBank; m_font->dump(); delete m_font; -#endif } @@ -182,7 +178,6 @@ void CMapScene::shutdown() ---------------------------------------------------------------------- */ void CMapScene::render() { -#ifdef __E3__ int i,x,y,xpos,ypos; int compilerGetsComfused; char spatCount[10]; @@ -223,7 +218,6 @@ m_font->setColour(0,255,0); m_font->print(24,24,buf); m_font->setColour(0,0,0); m_font->print(25,25,buf); -#endif } @@ -235,7 +229,6 @@ m_font->print(25,25,buf); ---------------------------------------------------------------------- */ void CMapScene::think(int _frames) { -#ifdef __E3__ if(!CFader::isFading()&&!m_readyToExit) { // Change chapter @@ -314,14 +307,6 @@ void CMapScene::think(int _frames) GameState::setNextScene(&GameScene); } } -#else -if(!m_readyToExit) -{ - s_globalLevelSelectThing=0; - m_readyToExit=true; - GameState::setNextScene(&GameScene); -} -#endif } diff --git a/source/pickups/phelmet.h b/source/pickups/phelmet.h index 77183e50d..0490c8aeb 100644 --- a/source/pickups/phelmet.h +++ b/source/pickups/phelmet.h @@ -38,6 +38,7 @@ class CHelmetPickup : public CBasePickup { public: virtual void init(); + virtual int dontKillDuringLevelRespawn() {return true;} virtual DVECTOR getSizeForPlacement(); virtual void collect(class CPlayer *_player); diff --git a/source/player/player.cpp b/source/player/player.cpp index a298cde4e..1015bc829 100644 --- a/source/player/player.cpp +++ b/source/player/player.cpp @@ -112,8 +112,8 @@ #include #endif -//#ifndef __ANIM_SPONGEBOB_BUBBLEWAND_HEADER__ -//#include +//#ifndef __ANIM_SPONGEBOB_WAND_HEADER__ +//#include //#endif #ifndef __ANIM_SPONGEBOB_JELLYFISH_HEADER__ @@ -325,7 +325,10 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= ANIM_SPONGEBOB_NET_TEETERBACK, // ANIM_SPONGEBOB_TEETERBACK, ANIM_SPONGEBOB_NET_TEETERFRONT, // ANIM_SPONGEBOB_TEETERFRONT, ANIM_SPONGEBOB_NET_SWIPE, // ANIM_SPONGEBOB_SWIPE, + ANIM_SPONGEBOB_NET_DEATHFORWARDS, // ANIM_SPONGEBOB_DEATHFORWARDS, + ANIM_SPONGEBOB_NET_DEATHSQUASH, // ANIM_SPONGEBOB_DEATHSQUASH, ANIM_SPONGEBOB_NET_DEATHSPIN, // ANIM_SPONGEBOB_DEATHSPIN, + -1, // ANIM_SPONGEBOB_DEATHDRY -1, // ANIM_SPONGEBOB_BALLOONJUMP, -1, // ANIM_SPONGEBOB_BLOWBUBBLE, -1, // ANIM_SPONGEBOB_FIREEND, @@ -356,7 +359,10 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= ANIM_SPONGEBOB_CORALBLOWER_TEETERBACK, // ANIM_SPONGEBOB_TEETERBACK, ANIM_SPONGEBOB_CORALBLOWER_TEETERFRONT, // ANIM_SPONGEBOB_TEETERFRONT, -1, // ANIM_SPONGEBOB_SWIPE, + ANIM_SPONGEBOB_CORALBLOWER_DEATHFORWARDS, // ANIM_SPONGEBOB_DEATHFORWARDS, + ANIM_SPONGEBOB_CORALBLOWER_DEATHSQUASH, // ANIM_SPONGEBOB_DEATHSQUASH, ANIM_SPONGEBOB_CORALBLOWER_DEATHSPIN, // ANIM_SPONGEBOB_DEATHSPIN, + -1, // ANIM_SPONGEBOB_DEATHDRY -1, // ANIM_SPONGEBOB_BALLOONJUMP, -1, // ANIM_SPONGEBOB_BLOWBUBBLE, ANIM_SPONGEBOB_CORALBLOWER_FIREEND, // ANIM_SPONGEBOB_FIREEND, @@ -387,7 +393,10 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= ANIM_SPONGEBOB_JELLYLAUNCHER_TEETERBACK, // ANIM_SPONGEBOB_TEETERBACK, ANIM_SPONGEBOB_JELLYLAUNCHER_TEETERFRONT, // ANIM_SPONGEBOB_TEETERFRONT, -1, // ANIM_SPONGEBOB_SWIPE, + ANIM_SPONGEBOB_JELLYLAUNCHER_DEATHFORWARDS, // ANIM_SPONGEBOB_DEATHFORWARDS, + ANIM_SPONGEBOB_JELLYLAUNCHER_DEATHSQUASH, // ANIM_SPONGEBOB_DEATHSQUASH, ANIM_SPONGEBOB_JELLYLAUNCHER_DEATHSPIN, // ANIM_SPONGEBOB_DEATHSPIN, + -1, // ANIM_SPONGEBOB_DEATHDRY -1, // ANIM_SPONGEBOB_BALLOONJUMP, -1, // ANIM_SPONGEBOB_BLOWBUBBLE, ANIM_SPONGEBOB_JELLYLAUNCHER_FIREEND, // ANIM_SPONGEBOB_FIREEND, @@ -418,7 +427,10 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= ANIM_SPONGEBOB_GLASSES_TEETERBACK, // ANIM_SPONGEBOB_TEETERBACK, ANIM_SPONGEBOB_GLASSES_TEETERFRONT, // ANIM_SPONGEBOB_TEETERFRONT, ANIM_SPONGEBOB_GLASSES_SWIPE, // ANIM_SPONGEBOB_SWIPE, + ANIM_SPONGEBOB_GLASSES_DEATHFORWARDS, // ANIM_SPONGEBOB_DEATHFORWARDS, + ANIM_SPONGEBOB_GLASSES_DEATHSQUASH, // ANIM_SPONGEBOB_DEATHSQUASH, ANIM_SPONGEBOB_GLASSES_DEATHSPIN, // ANIM_SPONGEBOB_DEATHSPIN, + -1, // ANIM_SPONGEBOB_DEATHDRY ANIM_SPONGEBOB_GLASSES_BALLOONJUMP, // ANIM_SPONGEBOB_BALLOONJUMP, ANIM_SPONGEBOB_GLASSES_BLOWBUBBLE, // ANIM_SPONGEBOB_BLOWBUBBLE, ANIM_SPONGEBOB_GLASSES_FIREEND, // ANIM_SPONGEBOB_FIREEND, @@ -433,8 +445,8 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= // PLAYER_ADDON_BUBBLEWAND, { - -1, // ANIM_SPONGEBOB_BUTTBOUNCEEND, - -1, // ANIM_SPONGEBOB_BUTTBOUNCESTART, + -1, // ANIM_SPONGEBOB_BUTTBOUNCEEND, + -1, // ANIM_SPONGEBOB_BUTTBOUNCESTART, -1, // ANIM_SPONGEBOB_FALL, -1, // ANIM_SPONGEBOB_GETUP, -1, // ANIM_SPONGEBOB_HITGROUND, @@ -449,9 +461,12 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= -1, // ANIM_SPONGEBOB_TEETERBACK, -1, // ANIM_SPONGEBOB_TEETERFRONT, -1, // ANIM_SPONGEBOB_SWIPE, + -1, // ANIM_SPONGEBOB_DEATHFORWARDS, + -1, // ANIM_SPONGEBOB_DEATHSQUASH, -1, // ANIM_SPONGEBOB_DEATHSPIN, + -1, // ANIM_SPONGEBOB_DEATHDRY -1, // ANIM_SPONGEBOB_BALLOONJUMP, - -1, // ANIM_SPONGEBOB_BLOWBUBBLE, + -1, // ANIM_SPONGEBOB_BLOWBUBBLE, -1, // ANIM_SPONGEBOB_FIREEND, -1, // ANIM_SPONGEBOB_FIRESTART, -1, // ANIM_SPONGEBOB_IDLEWEAPON, @@ -480,7 +495,10 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= ANIM_SPONGEBOB_JELLYFISH_TEETERBACK, // ANIM_SPONGEBOB_TEETERBACK, ANIM_SPONGEBOB_JELLYFISH_TEETERFRONT, // ANIM_SPONGEBOB_TEETERFRONT, ANIM_SPONGEBOB_JELLYFISH_SWIPE, // ANIM_SPONGEBOB_SWIPE, + ANIM_SPONGEBOB_JELLYFISH_DEATHFORWARDS, // ANIM_SPONGEBOB_DEATHFORWARDS, + ANIM_SPONGEBOB_JELLYFISH_DEATHSQUASH, // ANIM_SPONGEBOB_DEATHSQUASH, ANIM_SPONGEBOB_JELLYFISH_DEATHSPIN, // ANIM_SPONGEBOB_DEATHSPIN, + -1, // ANIM_SPONGEBOB_DEATHDRY -1, // ANIM_SPONGEBOB_BALLOONJUMP, -1, // ANIM_SPONGEBOB_BLOWBUBBLE, -1, // ANIM_SPONGEBOB_FIREEND, @@ -511,7 +529,10 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]= -1, // ANIM_SPONGEBOB_TEETERBACK, -1, // ANIM_SPONGEBOB_TEETERFRONT, -1, // ANIM_SPONGEBOB_SWIPE, + -1, // ANIM_SPONGEBOB_DEATHFORWARDS, + -1, // ANIM_SPONGEBOB_DEATHSQUASH, -1, // ANIM_SPONGEBOB_DEATHSPIN, + -1, // ANIM_SPONGEBOB_DEATHDRY -1, // ANIM_SPONGEBOB_BALLOONJUMP, -1, // ANIM_SPONGEBOB_BLOWBUBBLE, -1, // ANIM_SPONGEBOB_FIREEND, @@ -650,7 +671,6 @@ void CPlayer::think(int _frames) int i; -#if !defined(__USER_CDBUILD__) if(PadGetDown(0)&PAD_L1) { oldmode=m_currentMode; @@ -661,7 +681,6 @@ else if(oldmode!=-1&&!(PadGetHeld(0)&PAD_L1)) newmode=oldmode; oldmode=-1; } -#endif #ifdef __USER_paul__ if(PadGetHeld(0)&PAD_L1&&PadGetHeld(0)&PAD_L2) @@ -878,7 +897,7 @@ if(newmode!=-1) m_healthWaterLevel-=waterDrainSpeed*_frames; if(m_healthWaterLevel<=0) { - dieYouPorousFreak(); + dieYouPorousFreak(DEATHTYPE__DRYUP); } } @@ -986,8 +1005,14 @@ int stateDebugY=60; #endif #ifdef __USER_paul__ -#define NUM_LASTPOS 50 -static DVECTOR lastpos[NUM_LASTPOS]; +#define NUM_LASTPOS 100 +typedef struct +{ + int vx,vy; + int h; + int onp; +}POSMEM; +static POSMEM lastpos[NUM_LASTPOS]; static int lastposnum=0; #endif @@ -1001,7 +1026,6 @@ void CPlayer::render() CPlayerThing::render(); -#ifdef __E3__ #ifdef _STATE_DEBUG_ char buf[100]; #ifdef __USER_paul__ @@ -1011,13 +1035,12 @@ sprintf(buf,"Pos: %04d,%04d",Pos.vx,Pos.vy); #endif m_fontBank->print(stateDebugX,stateDebugY,buf); #endif -#endif #ifdef __USER_paul__ if(PadGetDown(0)&PAD_R1) { - DVECTOR clear={0,0}; + POSMEM clear={0,0,0,false}; for(int i=0;ivx=Pos.vx; + p->vy=Pos.vy; + p->onp=isOnPlatform()!=NULL; + if(p->onp) + { + p->h=getHeightFromPlatformNoGround(Pos.vx,Pos.vy,150); + } + else + { + p->h=getHeightFromGround(Pos.vx,Pos.vy,150); + } } +POSMEM *p=lastpos; for(int i=0;ivx-m_cameraPos.vx; + y=p->vy-m_cameraPos.vy; DrawLine(x-4,y-4,x+4,y+4,0,0,255,0); DrawLine(x-4,y+4,x+4,y-4,0,0,255,0); + y=y+p->h; + if(p->onp) + { + DrawLine(x-6,y,x+6,y,255,0,255,0); + } + else + { + DrawLine(x-6,y,x+6,y,128,0,255,0); + } + + p++; } #endif @@ -1304,6 +1350,8 @@ void CPlayer::registerAddon(PLAYER_ADDONS _addon) ---------------------------------------------------------------------- */ void CPlayer::setMode(PLAYER_MODE _mode) { + int state; + if(_mode==PLAYER_MODE_DEAD) { ASSERT(m_currentMode!=PLAYER_MODE_DEAD); @@ -1311,8 +1359,22 @@ void CPlayer::setMode(PLAYER_MODE _mode) } resetPlayerCollisionSizeToBase(); + + if(m_currentPlayerModeClass) + { + state=m_currentPlayerModeClass->getState(); + } + else + { + state=STATE_IDLE; + } m_currentMode=_mode; m_currentPlayerModeClass=s_playerModes[_mode]; + if(!m_currentPlayerModeClass->setState(state)) + { + m_currentPlayerModeClass->setState(STATE_IDLE); + m_moveVelocity.vx=m_moveVelocity.vy=0; + } m_currentPlayerModeClass->enter(); } @@ -1815,10 +1877,11 @@ void CPlayer::takeDamage(DAMAGE_TYPE _damage,REACT_DIRECTION _reactDirection,CTh Params: Returns: ---------------------------------------------------------------------- */ -void CPlayer::dieYouPorousFreak() +void CPlayer::dieYouPorousFreak(DEATH_TYPE _deathType) { ASSERT(m_currentMode!=PLAYER_MODE_DEAD); + m_deathType=_deathType; CSoundMediator::playSfx(CSoundMediator::SFX_SPONGEBOB_DEFEATED_JINGLE); setMode(PLAYER_MODE_DEAD); } diff --git a/source/player/player.h b/source/player/player.h index aa1c30c72..2f9e3e9a5 100644 --- a/source/player/player.h +++ b/source/player/player.h @@ -125,6 +125,13 @@ typedef enum DAMAGE__KILL_OUTRIGHT, }DAMAGE_TYPE; +typedef enum +{ + DEATHTYPE__NORMAL, + DEATHTYPE__DRYUP, + DEATHTYPE__SQUASH, +} DEATH_TYPE; + typedef enum { REACT__LEFT=-1, @@ -309,6 +316,8 @@ private: PLAYER_MODE m_currentMode; PLAYER_MODE m_lastModeBeforeDeath; +public: + DEATH_TYPE getDeathType() {return m_deathType;} private: int m_lives; @@ -316,7 +325,8 @@ private: int m_healthWaterLevel; int m_healthReactFrames; - void dieYouPorousFreak(); + void dieYouPorousFreak(DEATH_TYPE _deathType=DEATHTYPE__NORMAL); + DEATH_TYPE m_deathType; void updatePadInput(); diff --git a/source/player/pmdead.cpp b/source/player/pmdead.cpp index 2cb9aa91e..00a0dc626 100644 --- a/source/player/pmdead.cpp +++ b/source/player/pmdead.cpp @@ -57,8 +57,24 @@ ---------------------------------------------------------------------- */ void CPlayerModeDead::enter() { + int deathAnim; + m_deadTime=0; - m_player->setAnimNo(ANIM_SPONGEBOB_DEATHSPIN); + + switch(m_player->getDeathType()) + { + default: + case DEATHTYPE__NORMAL: + deathAnim=ANIM_SPONGEBOB_DEATHSPIN; + break; + case DEATHTYPE__DRYUP: + deathAnim=ANIM_SPONGEBOB_DEATHDRY; + break; + case DEATHTYPE__SQUASH: + deathAnim=ANIM_SPONGEBOB_DEATHSQUASH; + break; + } + m_player->setAnimNo(deathAnim); } /*---------------------------------------------------------------------- diff --git a/source/player/pmodes.cpp b/source/player/pmodes.cpp index 8ebd47563..a4dd12575 100644 --- a/source/player/pmodes.cpp +++ b/source/player/pmodes.cpp @@ -183,8 +183,6 @@ void CPlayerMode::respawn() {m_player->respawn();} void CPlayerModeBase::enter() { m_fallFrames=0; - setState(STATE_IDLE); - zeroMoveVelocity(); } /*----------------------------------------------------------------------