diff --git a/src/CGame.cpp b/src/CGame.cpp index 2b25d69fe..01e8766f7 100644 --- a/src/CGame.cpp +++ b/src/CGame.cpp @@ -44,20 +44,13 @@ short CGame::runCycle(stCloneKeenPlus *pCKP) { int opt = MAINMNU_1PLAYER; int retval; - int eseq = 0; int defaultopt = 0; initgamefirsttime(pCKP, EGAGraphics->getNumSprites()); - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); g_pLogFile->ftextOut("Game starting...
"); - if (eseq) - { - endsequence(pCKP); - closeCKP(pCKP); - } - if(!pCKP->Control.skipstarting) { CIntro Intro; diff --git a/src/CGame.h b/src/CGame.h index 5ba963cd6..54c7fdbdc 100644 --- a/src/CGame.h +++ b/src/CGame.h @@ -12,6 +12,12 @@ #include "vorticon/CEGAGraphics.h" #include "vorticon/CMessages.h" +// references to cinematics/CommonEnding +int endsequence(stCloneKeenPlus *pCKP); + +// Reference from game.cpp +void initgame(stLevelControl *p_levelcontrol); + class CGame { public: CGame(); diff --git a/src/ai/garg.cpp b/src/ai/garg.cpp index fd6bc7a79..37578243a 100644 --- a/src/ai/garg.cpp +++ b/src/ai/garg.cpp @@ -38,7 +38,7 @@ char garg_CanWalkLeft(int o); char garg_CanWalkRight(int o); -void garg_ai(int o, stCloneKeenPlus *pCKP) +void garg_ai(int o, bool hardmode) { unsigned int i; @@ -205,7 +205,7 @@ unsigned int i; if (garg_CanWalkLeft(o)) { - if (pCKP->Control.levelcontrol.hardmode) + if (hardmode) objects[o].x -= GARG_WALK_SPEED_FAST; else objects[o].x -= GARG_WALK_SPEED; @@ -223,7 +223,7 @@ unsigned int i; objects[o].sprite = GARG_WALK_RIGHT + objects[o].ai.garg.walkframe; if (garg_CanWalkRight(o)) { - if (pCKP->Control.levelcontrol.hardmode) + if (hardmode) objects[o].x += GARG_WALK_SPEED_FAST; else objects[o].x += GARG_WALK_SPEED; @@ -238,8 +238,8 @@ unsigned int i; } /* walk animation */ - if (objects[o].ai.garg.timer > GARG_WALK_ANIM_TIME || \ - (objects[o].ai.garg.timer > GARG_WALK_ANIM_TIME && pCKP->Control.levelcontrol.hardmode)) + if (objects[o].ai.garg.timer > GARG_WALK_ANIM_TIME || + (objects[o].ai.garg.timer > GARG_WALK_ANIM_TIME && hardmode)) { objects[o].ai.garg.walkframe ^= 1; objects[o].ai.garg.timer = 0; diff --git a/src/ai/ninja.cpp b/src/ai/ninja.cpp index 88fb884f2..a2f874c7a 100644 --- a/src/ai/ninja.cpp +++ b/src/ai/ninja.cpp @@ -26,7 +26,7 @@ #define NINJA_DYING_FRAME 83 #define NINJA_DEAD_FRAME 84 -void ninja_ai(int o, stCloneKeenPlus *pCKP) +void ninja_ai(int o, bool hardmode) { unsigned int i; int onsamelevel; @@ -35,7 +35,7 @@ int onsamelevel; { objects[o].ai.ninja.state = NINJA_STAND; objects[o].ai.ninja.timetillkick = (rand()%(NINJA_MAX_TIME_TILL_KICK-NINJA_MIN_TIME_TILL_KICK))+NINJA_MIN_TIME_TILL_KICK; - if (pCKP->Control.levelcontrol.hardmode) objects[o].ai.ninja.timetillkick /= 3; + if (hardmode) objects[o].ai.ninja.timetillkick /= 3; if (player[primaryplayer].x < objects[o].x) { objects[o].ai.ninja.dir = LEFT; } diff --git a/src/ai/ray.cpp b/src/ai/ray.cpp index 15bd41056..c21d952eb 100644 --- a/src/ai/ray.cpp +++ b/src/ai/ray.cpp @@ -7,7 +7,7 @@ // raygun blast, shot by keen, and by the tank robots in ep1&2. #include "ray.h" -void ray_ai(int o, stCloneKeenPlus *pCKP, stLevelControl levelcontrol) +void ray_ai(int o, int episode) { int i; int hitlethal; @@ -69,8 +69,7 @@ int hitlethal; // check if ray hit keen. if canpk=0, only enemy rays can hurt keen if (objects[o].touchPlayer) { - if (player[objects[o].touchedBy].pfrozentime > PFROZEN_THAW && \ - levelcontrol.episode==1) + if (player[objects[o].touchedBy].pfrozentime > PFROZEN_THAW && episode==1) { // shot a frozen player--melt the ice player[objects[o].touchedBy].pfrozentime = PFROZEN_THAW; @@ -135,14 +134,14 @@ int hitlethal; objects[o].ai.ray.state = RAY_STATE_ZAPZOT; objects[o].ai.ray.zapzottimer = RAY_ZAPZOT_TIME; - if (levelcontrol.episode==1) + if (episode==1) { if (rand()&1) { objects[o].sprite = RAY_FRAME_ZAP_EP1; } else { objects[o].sprite = RAY_FRAME_ZOT_EP1; } } - else if (levelcontrol.episode==2) + else if (episode==2) { if (rand()&1) { objects[o].sprite = RAY_FRAME_ZAP_EP2; } diff --git a/src/ai/rope.cpp b/src/ai/rope.cpp index 3368237ec..dc446fb1f 100644 --- a/src/ai/rope.cpp +++ b/src/ai/rope.cpp @@ -19,9 +19,7 @@ #define STONE_DROP_RATE 100 void delete_object(int o); - void static rope_movestone(int o); - void kill_all_intersecting_tile(int mpx, int mpy); void rope_ai(int o) diff --git a/src/ai/se.cpp b/src/ai/se.cpp index 7d1f8764a..34af4eec6 100644 --- a/src/ai/se.cpp +++ b/src/ai/se.cpp @@ -1,11 +1,13 @@ -#include "../sdl/sound/CSound.h" + #include "../keen.h" + #include "ray.h" #include "se.h" -#include "../include/game.h" +#include "../include/game.h" #include "../include/enemyai.h" +#include "../sdl/sound/CSound.h" #include "../CLogFile.h" char PlatExtending=0; @@ -21,20 +23,20 @@ char PlatExtending=0; void set_mortimer_surprised(int yes); int mortimer_surprisedcount = 0; -void se_ai(int o, stCloneKeenPlus *pCKP) +void se_ai(int o, stLevelControl *p_levelcontrol) { switch(objects[o].ai.se.type) { - case SE_EXTEND_PLATFORM: se_extend_plat(o, &(pCKP->Control.levelcontrol.PlatExtending) ); break; - case SE_RETRACT_PLATFORM: se_retract_plat(o, &(pCKP->Control.levelcontrol.PlatExtending) ); break; - case SE_ANKHSHIELD: se_ankhshield(o, pCKP->Control.levelcontrol.episode); break; + case SE_EXTEND_PLATFORM: se_extend_plat(o, &(p_levelcontrol->PlatExtending) ); break; + case SE_RETRACT_PLATFORM: se_retract_plat(o, &(p_levelcontrol->PlatExtending) ); break; + case SE_ANKHSHIELD: se_ankhshield(o, p_levelcontrol->episode); break; case SE_MORTIMER_ARM: se_mortimer_arm(o); break; case SE_MORTIMER_LEG_LEFT: se_mortimer_leg_left(o); break; case SE_MORTIMER_LEG_RIGHT: se_mortimer_leg_right(o); break; - case SE_MORTIMER_SPARK: se_mortimer_spark(o, &(pCKP->Control.levelcontrol) ); break; - case SE_MORTIMER_HEART: se_mortimer_heart(o, &(pCKP->Control.levelcontrol) ); break; - case SE_MORTIMER_ZAPSUP: se_mortimer_zapsup(o, &(pCKP->Control.levelcontrol) ); break; + case SE_MORTIMER_SPARK: se_mortimer_spark(o, p_levelcontrol ); break; + case SE_MORTIMER_HEART: se_mortimer_heart(o, p_levelcontrol ); break; + case SE_MORTIMER_ZAPSUP: se_mortimer_zapsup(o, p_levelcontrol ); break; case SE_MORTIMER_RANDOMZAPS: se_mortimer_randomzaps(o); break; default: diff --git a/src/ai/se.h b/src/ai/se.h index a67289565..e4071ec1e 100644 --- a/src/ai/se.h +++ b/src/ai/se.h @@ -8,9 +8,9 @@ #ifndef SE_H_ #define SE_H_ -/* located in game.c */ +void se_extend_plat(int o, bool *p_PlatExtending); -//----------------------[referenced from ai/se.c]--------------------// +/* located in game.c */ void kill_all_intersecting_tile(int mpx, int mpy); void delete_object(int o); void killplayer(int theplayer); @@ -19,30 +19,23 @@ unsigned char spawn_object(int x, int y, int otype); /* located in map.c */ -//----------------------[referenced from ai/se.c]--------------------// +//----------------------[referenced from ai/se.cpp]--------------------// unsigned int getmaptileat(unsigned int x, unsigned int y); void map_chgtile(unsigned int x,unsigned int y, int newtile); void map_deanimate(int x, int y); -//----------------------[referenced from ai/se.c]--------------------// -//void fade(uchar type, uchar rate); - /* located in misc.c */ - -//----------------------[referenced from ai/se.c]--------------------// -uint rnd(void); +unsigned int rnd(void); /* located in cinematics/blowupworld.c */ -//----------------------[referenced from ai/se.c]--------------------// void SetVibrateTime(int vibetime, char pausegame, stLevelControl *levelcontrol); -/* located in ai/se.c */ //----------------------[referenced from ai/se.c]--------------------// -void se_ai(int o); +void se_ai(int o, stLevelControl *p_levelcontrol); void se_extend_plat(int o, bool *p_PlatExtending); void se_retract_plat(int o, bool *p_PlatExtending); void spark_ai(int o, int *p_sparks_left); diff --git a/src/ai/sndwave.cpp b/src/ai/sndwave.cpp index 7bf26fb2e..48f987ef6 100644 --- a/src/ai/sndwave.cpp +++ b/src/ai/sndwave.cpp @@ -15,7 +15,7 @@ #define SNDWAVE_OFFSCREEN_KILL_TIME 100 -void sndwave_ai(int o, stCloneKeenPlus *pCKP) +void sndwave_ai(int o, bool hardmode) { //int i; if (objects[o].needinit) @@ -57,7 +57,7 @@ void sndwave_ai(int o, stCloneKeenPlus *pCKP) } else { - if (pCKP->Control.levelcontrol.hardmode) + if (hardmode) objects[o].x += SNDWAVE_SPEED_FAST; else objects[o].x += SNDWAVE_SPEED; @@ -72,7 +72,7 @@ void sndwave_ai(int o, stCloneKeenPlus *pCKP) } else { - if (pCKP->Control.levelcontrol.hardmode) + if (hardmode) objects[o].x -= SNDWAVE_SPEED_FAST; else objects[o].x -= SNDWAVE_SPEED; diff --git a/src/ai/tankep2.cpp b/src/ai/tankep2.cpp index 03fc0183c..93d117b44 100644 --- a/src/ai/tankep2.cpp +++ b/src/ai/tankep2.cpp @@ -39,7 +39,7 @@ #define TANK2_TIME_BEFORE_FIRE_WHEN_SEE 100 #define TANK2_TIME_BETWEEN_FIRE_CAUSE_LEVEL 400 -void tankep2_ai(int o, stCloneKeenPlus *pCKP) +void tankep2_ai(int o, bool hardmode) { int newobject; //int not_about_to_fall; @@ -141,7 +141,7 @@ unsigned int i; else { // no we're not facing him, on hard difficulty turn around - if (pCKP->Control.levelcontrol.hardmode) + if (hardmode) { objects[o].ai.tank.frame = 0; objects[o].ai.tank.timer = 0; diff --git a/src/ai/vort.cpp b/src/ai/vort.cpp index 69bfd193a..5cdafde2a 100644 --- a/src/ai/vort.cpp +++ b/src/ai/vort.cpp @@ -31,7 +31,7 @@ void vort_initiatejump(int o); -void vort_ai(int o, stCloneKeenPlus *pCKP, stLevelControl levelcontrol) +void vort_ai(int o, stLevelControl *p_levelcontrol) { int bonk,kill; if (objects[o].needinit) @@ -44,14 +44,14 @@ int bonk,kill; objects[o].canbezapped = 1; objects[o].needinit = 0; - if (pCKP->Control.levelcontrol.hardmode) + if (p_levelcontrol->hardmode) { objects[o].ai.vort.ep1style = 1; } else objects[o].ai.vort.ep1style = 0; // copy in animation frame indexes for the current ep - if (levelcontrol.episode==1) + if (p_levelcontrol->episode==1) { objects[o].ai.vort.WalkLeftFrame = VORT1_WALK_LEFT_FRAME; objects[o].ai.vort.WalkRightFrame = VORT1_WALK_RIGHT_FRAME; @@ -61,7 +61,7 @@ int bonk,kill; objects[o].ai.vort.DyingFrame = VORT1_DYING_FRAME; objects[o].ai.vort.ep1style = 1; } - else if (levelcontrol.episode==2) + else if (p_levelcontrol->episode==2) { objects[o].ai.vort.WalkLeftFrame = VORT2_WALK_LEFT_FRAME; objects[o].ai.vort.WalkRightFrame = VORT2_WALK_RIGHT_FRAME; @@ -71,7 +71,7 @@ int bonk,kill; objects[o].ai.vort.DyingFrame = VORT2_DYING_FRAME; objects[o].ai.vort.DeadFrame = VORT2_DEAD_FRAME; } - else if (levelcontrol.episode==3) + else if (p_levelcontrol->episode==3) { objects[o].ai.vort.WalkLeftFrame = VORT3_WALK_LEFT_FRAME; objects[o].ai.vort.WalkRightFrame = VORT3_WALK_RIGHT_FRAME; @@ -89,10 +89,10 @@ int bonk,kill; kill = 0; // if we touch a glowcell, we die! - if (objects[o].zapped >= VORT_HP && !levelcontrol.isfinallevel) kill = 1; - else if (objects[o].zapped >= VORT_COMMANDER_HP && levelcontrol.isfinallevel) kill = 1; + if (objects[o].zapped >= VORT_HP && !p_levelcontrol->isfinallevel) kill = 1; + else if (objects[o].zapped >= VORT_COMMANDER_HP && p_levelcontrol->isfinallevel) kill = 1; else if (objects[o].zapped && !objects[o].ai.vort.ep1style) kill = 1; - else if (levelcontrol.episode==2 && getmaptileat((objects[o].x>>CSF)+12, (objects[o].y>>CSF)+16)==TILE_GLOWCELL) + else if (p_levelcontrol->episode==2 && getmaptileat((objects[o].x>>CSF)+12, (objects[o].y>>CSF)+16)==TILE_GLOWCELL) { kill = 1; } @@ -104,7 +104,7 @@ int bonk,kill; objects[o].ai.vort.frame = 0; objects[o].ai.vort.palflashtimer = VORT_PALETTE_FLASH_TIME + 1; objects[o].ai.vort.palflashamt = 255; - if (levelcontrol.episode == 1) + if (p_levelcontrol->episode == 1) { objects[o].ai.vort.state = VORT_DYING; //pal_set(BORDER_COLOR, 255, objects[o].ai.vort.palflashamt, objects[o].ai.vort.palflashamt); @@ -118,7 +118,7 @@ int bonk,kill; else { objects[o].ai.vort.state = VORT2_DYING; - if (pCKP->Control.levelcontrol.hardmode) + if (p_levelcontrol->hardmode) { fade.mode = FADE_GO; fade.dir = FADE_IN; @@ -214,7 +214,7 @@ vort_reprocess: ; if (rand()%VORT_JUMP_PROB == (VORT_JUMP_PROB/2)) { // let's jump. - if (!levelcontrol.dark && !objects[o].blockedu) + if (!p_levelcontrol->dark && !objects[o].blockedu) { vort_initiatejump(o); goto vort_reprocess; @@ -237,7 +237,7 @@ vort_reprocess: ; // if we only traveled a tiny amount before hitting a wall, we've // probably fallen into a small narrow area, and we need to try // to jump out of it - if (objects[o].ai.vort.dist_traveled < VORT_TRAPPED_DIST && !levelcontrol.dark && objects[o].blockedd && !objects[o].blockedu) + if (objects[o].ai.vort.dist_traveled < VORT_TRAPPED_DIST && !p_levelcontrol->dark && objects[o].blockedd && !objects[o].blockedu) { vort_initiatejump(o); if (rand()&1) @@ -267,7 +267,7 @@ vort_reprocess: ; objects[o].ai.vort.animtimer = 0; objects[o].ai.vort.state = VORT_LOOK; - if (objects[o].ai.vort.dist_traveled < VORT_TRAPPED_DIST && !levelcontrol.dark && objects[o].blockedd && !objects[o].blockedu) + if (objects[o].ai.vort.dist_traveled < VORT_TRAPPED_DIST && !p_levelcontrol->dark && objects[o].blockedd && !objects[o].blockedu) { vort_initiatejump(o); if (rand()&1) @@ -294,15 +294,15 @@ vort_reprocess: ; case VORT_DYING: objects[o].sprite = objects[o].ai.vort.DyingFrame + objects[o].ai.vort.frame; - if (levelcontrol.isfinallevel&&levelcontrol.episode==1) + if (p_levelcontrol->isfinallevel && p_levelcontrol->episode==1) { - pCKP->Control.levelcontrol.canexit = 1; + p_levelcontrol->canexit = true; } if (objects[o].ai.vort.animtimer > VORT_DIE_ANIM_TIME) { objects[o].ai.vort.palflashamt -= PAL_FLASH_DEC_AMT; - if (levelcontrol.episode!=2) + if (p_levelcontrol->episode != 2) { // pal_set(BORDER_COLOR, 212, objects[o].ai.vort.palflashamt, objects[o].ai.vort.palflashamt); // pal_apply(); diff --git a/src/ai/walker.cpp b/src/ai/walker.cpp index 8c5070d6f..b593a1599 100644 --- a/src/ai/walker.cpp +++ b/src/ai/walker.cpp @@ -37,7 +37,6 @@ void walker_ai(int o, stLevelControl levelcontrol) { unsigned int p; unsigned int i=0; -//int supportingsomebody; int nopush; int /*til,*/floor; @@ -263,10 +262,8 @@ int /*til,*/floor; // of the walker a bit) floor = 0; if (!TileProperty[getmaptileat((player[i].x>>CSF)+4, (player[i].y>>CSF)+sprites[0].ysize)][BUP]) - //if (!tiles[getmaptileat((player[i].x>>CSF)+4, (player[i].y>>CSF)+sprites[0].ysize)].solidfall) { // lower-left isn't solid if (TileProperty[getmaptileat((player[i].x>>CSF)+12, (player[i].y>>CSF)+sprites[0].ysize)][BUP]) - //if (tiles[getmaptileat((player[i].x>>CSF)+12, (player[i].y>>CSF)+sprites[0].ysize)].solidfall) { floor = 1; } @@ -324,7 +321,6 @@ int /*til,*/floor; } break; } -/*anim: ;*/ // walk animation if (objects[o].ai.walker.animtimer > WALKER_WALK_ANIM_TIME) diff --git a/src/cinematics/blowupworld.cpp b/src/cinematics/BlowupWorld.cpp similarity index 100% rename from src/cinematics/blowupworld.cpp rename to src/cinematics/BlowupWorld.cpp diff --git a/src/cinematics/CommonEnding.cpp b/src/cinematics/CommonEnding.cpp new file mode 100644 index 000000000..4714b81f3 --- /dev/null +++ b/src/cinematics/CommonEnding.cpp @@ -0,0 +1,146 @@ +/* + * commonending.cpp + * + * Created on: 07.08.2009 + * Author: gerstrong + */ + +#include "../keen.h" +#include "CommonEnding.h" + +#include "../CGraphics.h" +#include "../sdl/CInput.h" +#include "../sdl/CTimer.h" + +#define LETTER_SHOW_SPD 30 + +#define HEADFOREARTH_WAIT_TIME 600 + + +int endsequence(stCloneKeenPlus *pCKP) +{ + + if (pCKP->Control.levelcontrol.episode==1) + { + if (eseq1_ReturnsToShip(pCKP)) return 0; + if (eseq1_ShipFlys(pCKP)) return 0; + eseq1_BackAtHome(pCKP); + } + else if (pCKP->Control.levelcontrol.episode==2) + { + if (eseq2_HeadsForEarth(pCKP)) return 0; + if (eseq2_LimpsHome(pCKP)) return 0; + if (eseq2_SnowedOutside(pCKP)) return 0; + } + else if (pCKP->Control.levelcontrol.episode==3) + { + if (eseq3_AwardBigV(pCKP)) return 0; + } + + return 0; +} + +// Just show a message like type writing. Maybe this one will be replaced by the new Dialog system +void eseq_showmsg(const std::string& text, int boxleft, int boxtop, + int boxwidth, int boxheight, bool autodismiss) +{ + + std::string tempbuf; + char textline, showtimer; + unsigned int amountshown; + int waittimer; + int cancel, lastcancelstate; + + textline = 0; + amountshown = 0; + showtimer = 0; + lastcancelstate = 1; + waittimer = 0; + + do + { + gamedo_fades(); + gamedo_AnimatedTiles(); + gamedo_render_drawobjects(); + + cancel = (g_pInput->getPressedCommand(KENTER) || g_pInput->getPressedCommand(KCTRL) || g_pInput->getPressedCommand(KALT)); + + // draw the text up to the amount currently shown + tempbuf = text; + if(amountshown < tempbuf.size()) + tempbuf.erase(amountshown); + sb_dialogbox(boxleft,boxtop,boxwidth,boxheight); + g_pGraphics->sb_font_draw( tempbuf, (boxleft+1)*8, (boxtop+1+textline)*8); + + gamedo_frameskipping_blitonly(); + gamedo_render_eraseobjects(); + + if (showtimer > LETTER_SHOW_SPD) + { // it's time to show a new letter + if (amountshown < text.size()) + { + amountshown++; + } + showtimer = 0; + } else showtimer++; + + // user pressed enter or some other key + if (cancel && !lastcancelstate) + { + if (amountshown < text.size()) + { + amountshown = text.size(); + } + else return; + } + + // when all text is shown wait a sec then return + if (autodismiss) + { + if (amountshown >= text.size()) + { + if (waittimer > HEADFOREARTH_WAIT_TIME) return; + waittimer++; + } + } + + + lastcancelstate = cancel; + + g_pInput->pollEvents(); + g_pTimer->SpeedThrottle(); + } while(!g_pInput->getPressedCommand(KQUIT)); + return; +} + +void eseq_ToBeContinued() +{ +int i; + std::string text; +int dlgX, dlgY, dlgW, dlgH; + + // remove all objects because eseq_showmsg will call drawobjects + for(i=0;igetPressedKey(KQUIT)) return; + g_pInput->pollEvents(); + g_pTimer->SpeedThrottle(); + } while(fade.mode == FADE_GO); +} + diff --git a/src/cinematics/CommonEnding.h b/src/cinematics/CommonEnding.h new file mode 100644 index 000000000..496814547 --- /dev/null +++ b/src/cinematics/CommonEnding.h @@ -0,0 +1,28 @@ +/* + * commonending.h + * + * Created on: 07.08.2009 + * Author: gerstrong + */ + +#ifndef COMMONENDING_H_ +#define COMMONENDING_H_ + +// For Episode 1 +int eseq1_ShipFlys(stCloneKeenPlus *pCKP); +int eseq1_ReturnsToShip(stCloneKeenPlus *pCKP); +int eseq1_BackAtHome(stCloneKeenPlus *pCKP); + +// For Episode 2 +int eseq2_HeadsForEarth(stCloneKeenPlus *pCKP); +int eseq2_LimpsHome(stCloneKeenPlus *pCKP); +int eseq2_SnowedOutside(stCloneKeenPlus *pCKP); + +// For Episode 3 +char eseq3_AwardBigV(stCloneKeenPlus *pCKP); + +// Reference to ../gamedo.cpp +void gamedo_render_drawobjects(); +void gamedo_frameskipping_blitonly(); + +#endif /* COMMONENDING_H_ */ diff --git a/src/eseq_ep1.cpp b/src/cinematics/EndingSequenceEp1.cpp similarity index 88% rename from src/eseq_ep1.cpp rename to src/cinematics/EndingSequenceEp1.cpp index 984405894..7a7747f4f 100644 --- a/src/eseq_ep1.cpp +++ b/src/cinematics/EndingSequenceEp1.cpp @@ -2,17 +2,17 @@ Ending sequence for Episode 1. */ -#include "keen.h" -#include "include/game.h" -#include "include/gamedo.h" -#include "include/gamepdo.h" -#include "sdl/CInput.h" -#include "sdl/CTimer.h" -#include "include/eseq_ep1.h" -#include "include/eseq_ep2.h" -#include "include/menu.h" -#include "CGraphics.h" -#include "StringUtils.h" +#include "../keen.h" +#include "../include/game.h" +#include "../include/gamedo.h" +#include "../include/gamepdo.h" +#include "../sdl/CInput.h" +#include "../sdl/CTimer.h" +#include "../include/menu.h" +#include "../CGraphics.h" +#include "../StringUtils.h" + +#include "EndingSequenceEp1.h" #define CMD_MOVE 0 #define CMD_WAIT 1 @@ -43,6 +43,9 @@ #define BACKHOME_SHORT_WAIT_TIME 250 +#define MARK_SPR_NUM 2 + + int eseq1_ReturnsToShip(stCloneKeenPlus *pCKP) { int i; @@ -50,7 +53,7 @@ int i; for(i=0;iControl.levelcontrol.levels_completed[i] = 0; - showmapatpos(80, WM_X, WM_Y, 0, pCKP); + showmapatpos(80, WM_X, WM_Y, pCKP); // draw keen next to his ship g_pGraphics->drawSprite(168, 85, PMAPLEFTFRAME, 0); @@ -68,7 +71,7 @@ int i; fade.fadetimer = 0; fade.rate = FADE_NORM; - eseq_showmsg(getstring("EP1_ESEQ_PART1"),1,18,37,6,1, pCKP); + eseq_showmsg(getstring("EP1_ESEQ_PART1"),1,18,37,6,1); // fade out fade.mode = FADE_GO; @@ -104,9 +107,7 @@ int x, y; int scrollingon; scrollingon = 1; - - #define MARK_SPR_NUM 2 - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); // set up the ship's route ShipQueuePtr = 0; @@ -135,7 +136,7 @@ int scrollingon; addshipqueue(CMD_MOVE, 100, DDOWN); addshipqueue(CMD_ENDOFQUEUE, 0, 0); - showmapatpos(81, SHIPFLY_X, SHIPFLY_Y, 0, pCKP); + showmapatpos(81, SHIPFLY_X, SHIPFLY_Y, pCKP); objects[MARK_SPR_NUM].type = OBJ_YORP; // doesn't matter objects[MARK_SPR_NUM].exists = 0; @@ -268,7 +269,7 @@ int scrollingon; gamedo_fades(); gamedo_AnimatedTiles(); - gamedo_frameskipping(pCKP); + gamedo_frameskipping(); if (scrollingon) gamedo_ScrollTriggers(0); g_pInput->pollEvents(); @@ -408,37 +409,6 @@ int dlgX, dlgY, dlgW, dlgH; } while(1); finale_draw("finale.ck1", pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory); - eseq_ToBeContinued(pCKP); + eseq_ToBeContinued(); return 1; } - -void eseq_ToBeContinued(stCloneKeenPlus *pCKP) -{ -int i; - std::string text; -int dlgX, dlgY, dlgW, dlgH; - - // remove all objects because eseq_showmsg will call drawobjects - for(i=0;igetPressedKey(KQUIT)) return; - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - } while(fade.mode == FADE_GO); -} diff --git a/src/cinematics/EndingSequenceEp1.h b/src/cinematics/EndingSequenceEp1.h new file mode 100644 index 000000000..42cee4112 --- /dev/null +++ b/src/cinematics/EndingSequenceEp1.h @@ -0,0 +1,16 @@ +/* + * EndingSequenceEp1.h + * + * Created on: 08.08.2009 + * Author: gerstrong + */ + +#ifndef ENDINGSEQUENCEEP1_H_ +#define ENDINGSEQUENCEEP1_H_ + +void eseq_ToBeContinued(); +void eseq_showmsg(const std::string& text, int boxleft, int boxtop, + int boxwidth, int boxheight, bool autodismiss); + + +#endif /* ENDINGSEQUENCEEP1_H_ */ diff --git a/src/eseq_ep2.cpp b/src/cinematics/EndingSequenceEp2.cpp similarity index 84% rename from src/eseq_ep2.cpp rename to src/cinematics/EndingSequenceEp2.cpp index 5f4f89812..af692ef7a 100644 --- a/src/eseq_ep2.cpp +++ b/src/cinematics/EndingSequenceEp2.cpp @@ -2,19 +2,19 @@ Ending sequence for Episode 2. */ -#include "keen.h" -#include "include/game.h" +#include "../keen.h" +/*#include "include/game.h" #include "include/gamedo.h" -#include "include/gamepdo.h" -#include "sdl/CTimer.h" -#include "sdl/CInput.h" -#include "sdl/sound/CSound.h" -#include "include/eseq_ep2.h" -#include "include/eseq_ep1.h" -#include "include/menu.h" -#include "include/enemyai.h" -#include "CGraphics.h" -#include "StringUtils.h" +#include "include/gamepdo.h"*/ +#include "../sdl/CTimer.h" +#include "../sdl/CInput.h" +#include "../sdl/sound/CSound.h" +#include "../include/menu.h" +#include "../include/enemyai.h" +#include "EndingSequenceEp2.h" +#include "CommonEnding.h" +#include "../CGraphics.h" +#include "../StringUtils.h" #define CMD_MOVE 0 @@ -29,8 +29,6 @@ stShipQueue shipqueue[32]; int ShipQueuePtr; -#define LETTER_SHOW_SPD 30 - // start x,y map scroll position for eseq2_TantalusRay() #define TANTALUS_X 0 #define TANTALUS_Y 0 @@ -76,10 +74,10 @@ int state, timer, spawnedcount=0; pCKP->Control.levelcontrol.dark = 0; g_pGraphics->initPalette(pCKP->Control.levelcontrol.dark); - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); state = TAN_STATE_WAITBEFOREFIRE; - showmapatpos(81,TANTALUS_X, TANTALUS_Y, 0, pCKP); + showmapatpos(81,TANTALUS_X, TANTALUS_Y, pCKP); AllPlayersInvisible(); numplayers = 1; @@ -202,8 +200,8 @@ int state, timer, spawnedcount=0; case 32: state = TAN_STATE_GAMEOVER; g_pSound->playSound(SOUND_GAME_OVER, PLAY_NOW); - SetGameOver(pCKP); - break; + pCKP->Control.levelcontrol.gameovermode = true; + break; } spawnedcount++; timer = 60; @@ -236,8 +234,8 @@ int state, timer, spawnedcount=0; gamedo_fades(); if (state!=TAN_STATE_GAMEOVER) gamedo_AnimatedTiles(); - gamedo_frameskipping(pCKP); - gamedo_enemyai(pCKP); + gamedo_frameskipping(); + gamedo_enemyai( &(pCKP->Control.levelcontrol) ); if(((player[0].x>>CSF)-scroll_x) > 160-16) map_scroll_right(); if (((player[0].y>>CSF)-scroll_y) > 100) @@ -251,7 +249,7 @@ int state, timer, spawnedcount=0; return 1; } -void eseq2_vibrate(stCloneKeenPlus *pCKP) +void eseq2_vibrate() { int xamt, yamt; int xdir, ydir; @@ -325,7 +323,7 @@ int x,y,w,h; } // show the frame - gamedo_frameskipping(pCKP); + gamedo_frameskipping(); vibratetimes++; g_pInput->pollEvents(); @@ -338,15 +336,13 @@ int x,y,w,h; w = GetStringAttribute("EP2_AfterVibrateString", "WIDTH"); h = GetStringAttribute("EP2_AfterVibrateString", "HEIGHT"); - eseq_showmsg(getstring("EP2_AfterVibrateString"),x,y,w,h,1, pCKP); + eseq_showmsg(getstring("EP2_AfterVibrateString"),x,y,w,h,1); } #define HEADFOREARTH_X 0 #define HEADFOREARTH_Y 0 -#define HEADFOREARTH_WAIT_TIME 600 - #define SPR_SHIP_RIGHT_EP2 132 #define SPR_SHIP_LEFT_EP2 133 #define SPR_VORTICON_MOTHERSHIP 72 @@ -356,79 +352,6 @@ int x,y,w,h; #define HEADSFOREARTH_W 33 #define HEADSFOREARTH_H 8 -void eseq_showmsg(const std::string& text, int boxleft, int boxtop, int boxwidth, int boxheight, char autodismiss, stCloneKeenPlus *pCKP) -{ -//int draw; -//int i; - - std::string tempbuf; -char textline, showtimer; -unsigned int amountshown; -int waittimer; -int cancel, lastcancelstate; - - textline = 0; - amountshown = 0; - showtimer = 0; - lastcancelstate = 1; - waittimer = 0; - - do - { - gamedo_fades(); - gamedo_AnimatedTiles(); - gamedo_render_drawobjects(pCKP); - - cancel = (g_pInput->getPressedCommand(KENTER) || g_pInput->getPressedCommand(KCTRL) || g_pInput->getPressedCommand(KALT)); - - // draw the text up to the amount currently shown - tempbuf = text; - if(amountshown < tempbuf.size()) - tempbuf.erase(amountshown); - sb_dialogbox(boxleft,boxtop,boxwidth,boxheight); - g_pGraphics->sb_font_draw( tempbuf, (boxleft+1)*8, (boxtop+1+textline)*8); - - gamedo_frameskipping_blitonly(); - gamedo_render_eraseobjects(); - - if (showtimer > LETTER_SHOW_SPD) - { // it's time to show a new letter - if (amountshown < text.size()) - { - amountshown++; - } - showtimer = 0; - } else showtimer++; - - // user pressed enter or some other key - if (cancel && !lastcancelstate) - { - if (amountshown < text.size()) - { - amountshown = text.size(); - } - else return; - } - - // when all text is shown wait a sec then return - if (autodismiss) - { - if (amountshown >= text.size()) - { - if (waittimer > HEADFOREARTH_WAIT_TIME) return; - waittimer++; - } - } - - - lastcancelstate = cancel; - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - } while(!g_pInput->getPressedCommand(KQUIT)); - return; -} - int eseq2_HeadsForEarth(stCloneKeenPlus *pCKP) { char enter,lastenterstate; @@ -436,7 +359,7 @@ int x, y; int downtimer; int afterfadewaittimer; - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); // set up the ship's route ShipQueuePtr = 0; @@ -444,7 +367,7 @@ int afterfadewaittimer; addshipqueue(CMD_MOVE, 2360, DDOWNRIGHT); addshipqueue(CMD_FADEOUT, 0, 0); - showmapatpos(81, HEADFOREARTH_X, HEADFOREARTH_Y, 0, pCKP); + showmapatpos(81, HEADFOREARTH_X, HEADFOREARTH_Y, pCKP); numplayers = 1; // place the player near the vorticon mothership @@ -470,7 +393,7 @@ int afterfadewaittimer; fade.dir = FADE_IN; fade.curamt = 0; fade.fadetimer = 0; - eseq_showmsg(getstring("EP2_ESEQ_PART1"),HEADSFOREARTH_X,HEADSFOREARTH_Y,HEADSFOREARTH_W,HEADSFOREARTH_H,1, pCKP); + eseq_showmsg(getstring("EP2_ESEQ_PART1"),HEADSFOREARTH_X,HEADSFOREARTH_Y,HEADSFOREARTH_W,HEADSFOREARTH_H, true); // erase the message dialog map_redraw(); @@ -550,7 +473,7 @@ int afterfadewaittimer; gamedo_fades(); gamedo_AnimatedTiles(); - gamedo_frameskipping(pCKP); + gamedo_frameskipping(); gamedo_ScrollTriggers(0); g_pInput->pollEvents(); @@ -569,7 +492,7 @@ char enter,lastenterstate; int downtimer; int afterfadewaittimer = 0; - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); // set up the ship's route ShipQueuePtr = 0; @@ -577,7 +500,7 @@ int afterfadewaittimer = 0; addshipqueue(CMD_MOVE, 1600, DUPLEFT); addshipqueue(CMD_FADEOUT, 0, 0); - showmapatpos(81, LIMPSHOME_X, LIMPSHOME_Y, 0, pCKP); + showmapatpos(81, LIMPSHOME_X, LIMPSHOME_Y, pCKP); numplayers = 1; player[0].x = (10 <<4<pollEvents(); g_pTimer->SpeedThrottle(); @@ -704,14 +627,14 @@ int dlgX, dlgY, dlgW, dlgH; dlgH = GetStringAttribute(tempstr, "HEIGHT"); lastpage = GetStringAttribute(tempstr, "LASTPAGE"); - eseq_showmsg(text, dlgX, dlgY, dlgW, dlgH, 1, pCKP); + eseq_showmsg(text, dlgX, dlgY, dlgW, dlgH, 1); if (lastpage==1) break; curpage++; } while(!g_pInput->getPressedCommand(KQUIT)); finale_draw("finale.ck2", pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory); - eseq_ToBeContinued(pCKP); + eseq_ToBeContinued(); return 0; } diff --git a/src/cinematics/EndingSequenceEp2.h b/src/cinematics/EndingSequenceEp2.h new file mode 100644 index 000000000..680d366a5 --- /dev/null +++ b/src/cinematics/EndingSequenceEp2.h @@ -0,0 +1,20 @@ +/* + * EndingSequenceEp2.h + * + * Created on: 08.08.2009 + * Author: gerstrong + */ + +#ifndef ENDINGSEQUENCEEP2_H_ +#define ENDINGSEQUENCEEP2_H_ + +// references to CommonEnding.cpp +void eseq_ToBeContinued(); +void eseq_showmsg(const std::string& text, int boxleft, int boxtop, + int boxwidth, int boxheight, bool autodismiss); + +// references to ../gamedo.cpp +void gamedo_frameskipping(); +void gamedo_enemyai(stLevelControl *p_levelcontrol); + +#endif /* ENDINGSEQUENCEEP2_H_ */ diff --git a/src/eseq_ep3.cpp b/src/cinematics/EndingSequenceEp3.cpp similarity index 69% rename from src/eseq_ep3.cpp rename to src/cinematics/EndingSequenceEp3.cpp index 281ced1c4..9b0fd7dd2 100644 --- a/src/eseq_ep3.cpp +++ b/src/cinematics/EndingSequenceEp3.cpp @@ -4,17 +4,20 @@ the Vorticon's camera flashes and stuff aren't implemented. */ -#include "keen.h" -#include "include/game.h" -#include "include/gamedo.h" -#include "sdl/CTimer.h" -#include "sdl/CInput.h" -#include "sdl/sound/CSound.h" -#include "include/eseq_ep3.h" -#include "include/eseq_ep2.h" -#include "include/menu.h" +#include "../keen.h" -void eseq3_Mortimer(stCloneKeenPlus *pCKP) +#include "../include/game.h" +#include "../include/gamedo.h" +#include "../include/menu.h" + +#include "../sdl/CTimer.h" +#include "../sdl/CInput.h" +#include "../sdl/sound/CSound.h" + +#include "EndingSequenceEp3.h" + + +void eseq3_Mortimer() { int x,y,w,h; g_pSound->playSound(SOUND_MORTIMER, PLAY_FORCE); @@ -24,11 +27,11 @@ int x,y,w,h; w = GetStringAttribute("EP3_MORTIMER", "WIDTH"); h = GetStringAttribute("EP3_MORTIMER", "HEIGHT"); - eseq_showmsg(getstring("EP3_MORTIMER"),x,y,w,h,0, pCKP); - eseq_showmsg(getstring("EP3_MORTIMER2"),x,y,w,h,0, pCKP); - eseq_showmsg(getstring("EP3_MORTIMER3"),x,y,w,h,0, pCKP); - eseq_showmsg(getstring("EP3_MORTIMER4"),x,y,w,h,0, pCKP); - eseq_showmsg(getstring("EP3_MORTIMER5"),x,y,w,h,0, pCKP); + eseq_showmsg(getstring("EP3_MORTIMER"),x,y,w,h, false); + eseq_showmsg(getstring("EP3_MORTIMER2"),x,y,w,h, false); + eseq_showmsg(getstring("EP3_MORTIMER3"),x,y,w,h, false); + eseq_showmsg(getstring("EP3_MORTIMER4"),x,y,w,h, false); + eseq_showmsg(getstring("EP3_MORTIMER5"),x,y,w,h, false); map_redraw(); g_pSound->playSound(SOUND_FOOTSLAM, PLAY_NOW); @@ -38,9 +41,9 @@ char eseq3_AwardBigV(stCloneKeenPlus *pCKP) { int x,y,w,h; int c; - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); - showmapatpos(81, 32, 32, 0, pCKP); + showmapatpos(81, 32, 32, pCKP); numplayers = 1; player[0].x = 244<GameData[pCKP->Resources.GameSelected-1].DataDirectory); scrollx_buf = scrolly_buf = 0; @@ -90,7 +93,7 @@ char eseq3_AwardBigV(stCloneKeenPlus *pCKP) w = GetStringAttribute("THE_END", "WIDTH"); h = GetStringAttribute("THE_END", "HEIGHT"); - eseq_showmsg(getstring("THE_END"),x,y,w,h,0, pCKP); + eseq_showmsg(getstring("THE_END"),x,y,w,h, false); // wait for enter pressed c = 0; diff --git a/src/cinematics/EndingSequenceEp3.h b/src/cinematics/EndingSequenceEp3.h new file mode 100644 index 000000000..c1f09067c --- /dev/null +++ b/src/cinematics/EndingSequenceEp3.h @@ -0,0 +1,21 @@ +/* + * EndingSequenceEp3.h + * + * Created on: 08.08.2009 + * Author: gerstrong + */ + +#ifndef ENDINGSEQUENCEEP3_H_ +#define ENDINGSEQUENCEEP3_H_ + +// Reference to ../map.cpp +void map_redraw(void); + +// Reference to ../fileio.cpp +int GetStringAttribute(const std::string& stringName, const char *attrName); + +// Reference to CommonEnding.cpp +void eseq_showmsg(const std::string& text, int boxleft, int boxtop, + int boxwidth, int boxheight, bool autodismiss); + +#endif /* ENDINGSEQUENCEEP3_H_ */ diff --git a/src/fileio.cpp b/src/fileio.cpp index 142973a6d..a35e8ec97 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -109,7 +109,7 @@ short checkConsistencyofGameData(stGameData *p_GameData) } char NessieAlreadySpawned; -void addobjectlayertile(unsigned int t, stCloneKeenPlus *pCKP) +void addobjectlayertile(unsigned int t, int episode, int *levels_completed) { int o; switch(t) @@ -117,14 +117,12 @@ int o; case 0: break; // blank case 255: // player start - //Player[0].setCoord(curmapx << 4 << CSF, curmapy << 4 << CSF); - player[0].x = curmapx << 4 << CSF; player[0].y = curmapy << 4 << CSF; map.objectlayer[curmapx][curmapy] = 0; break; case NESSIE_PATH: // spawn nessie at first occurance of her path - if (pCKP->Control.levelcontrol.episode==3) + if (episode==3) { if (!NessieAlreadySpawned) { @@ -138,7 +136,7 @@ int o; break; default: // level marker levelmarker: ; - if ((t&0x7fff) < 256 && pCKP->Control.levelcontrol.levels_completed[t&0x00ff]) + if ((t&0x7fff) < 256 && levels_completed[t&0x00ff]) { if(!options[OPT_LVLREPLAYABILITY].value) map.objectlayer[curmapx][curmapy] = 0; @@ -148,7 +146,7 @@ levelmarker: ; int newtile = tiles[map.mapdata[curmapx][curmapy]].chgtile; // Consistency check! Some Mods have issues with that. - if(pCKP->Control.levelcontrol.episode == 1 || pCKP->Control.levelcontrol.episode == 2) + if(episode == 1 || episode == 2) { if(newtile<77 || newtile>81) // something went wrong. Use default tile @@ -165,7 +163,7 @@ levelmarker: ; newtile = 81; // br. this one } } - else if(pCKP->Control.levelcontrol.episode == 3) + else if(episode == 3) { if(newtile<52 || newtile>56) // something went wrong. Use default tile @@ -201,7 +199,8 @@ levelmarker: ; } } -void addenemytile(unsigned int t, stCloneKeenPlus *pCKP) +void addenemytile(unsigned int t, int episode, + int chglevelto, bool *canexit) { int o,x; map.objectlayer[curmapx][curmapy] = t; @@ -216,8 +215,6 @@ int o,x; if(curmapy >= map.ysize-2) // Edge bug. Keen would fall in some levels without this. curmapx = 4; - //Player[0].setCoord(curmapx << 4 << CSF, ((curmapy << 4) + 8) << CSF); - player[0].x = curmapx << 4 << CSF; player[0].y = ((curmapy << 4) + 8) << CSF; } @@ -228,7 +225,7 @@ int o,x; case 0: break; case -1: break; case 1: // yorp (ep1) vort (ep2&3) - if (pCKP->Control.levelcontrol.episode==1) + if (episode==1) { x = curmapx; @@ -250,13 +247,13 @@ int o,x; } break; case 2: // garg (ep1) baby vorticon (ep2&3) - if (pCKP->Control.levelcontrol.episode==1) + if (episode==1) { // those bastards. sometimes embedding garg's in the floor in // the original maps. if(TileProperty[map.mapdata[curmapx+1][curmapy+1]][BLEFT]) { - if (pCKP->Control.levelcontrol.chglevelto==7) + if (chglevelto==7) { spawn_object(curmapx<<4<Control.levelcontrol.episode==1) + if (episode==1) { spawn_object(curmapx<<4<Control.levelcontrol.episode==2) + else if (episode==2) { spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + else if (episode==3) { spawn_object(curmapx<<4<Control.levelcontrol.episode==1) + if (episode==1) spawn_object(curmapx<<4<Control.levelcontrol.episode==2) + else if (episode==2) spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + else if (episode==3) spawn_object(curmapx<<4<Control.levelcontrol.episode==1) + if (episode==1) { o = spawn_object(curmapx<<4<Control.levelcontrol.chglevelto==13) + if (chglevelto==13) { objects[o].hasbeenonscreen = 1; } } - else if (pCKP->Control.levelcontrol.episode==2) + else if (episode==2) spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + else if (episode==3) { if(TileProperty[map.mapdata[curmapx][curmapy+1]][BLEFT]) { @@ -323,65 +320,65 @@ int o,x; break; case 6: // up-right-flying ice chunk (ep1) horiz platform (ep2) // foob (ep3) - if (pCKP->Control.levelcontrol.episode==1) + if (episode==1) { o = spawn_object((((curmapx+1)<<4)+4)<Control.levelcontrol.episode==2) + else if (episode==2) { o = spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + else if (episode==3) { o = spawn_object(curmapx<<4<Control.levelcontrol.episode==2) + if (episode==2) { o = spawn_object(curmapx<<4<Control.levelcontrol.canexit = 0; // can't exit till spark is shot + *canexit = false; // can't exit till spark is shot } - else if (pCKP->Control.levelcontrol.episode==3) + else if (episode==3) { o = spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + if (episode==3) { o = spawn_object(curmapx<<4<Control.levelcontrol.episode==1) + if (episode==1) { o = spawn_object(((curmapx<<4)-4)<Control.levelcontrol.episode==3) + else if (episode==3) { o = spawn_object(curmapx<<4<Control.levelcontrol.episode==1) + if (episode==1) { spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + else if (episode==3) { spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + if (episode==3) { spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + if (episode==3) { o = spawn_object(curmapx<<4<Control.levelcontrol.episode==3) + if (episode==3) { o = spawn_object(curmapx<<4<episode; + int chglevelto = p_levelcontrol->chglevelto; + int *levels_completed = p_levelcontrol->levels_completed; + bool *p_canexit = &(p_levelcontrol->canexit); + + + NessieAlreadySpawned = 0; + map.isworldmap = (lvlnum == 80); std::string buffer = formatPathString(path); std::string fname = buffer + filename; - fp = OpenGameFile(fname.c_str(), "rb"); + fp = OpenGameFile(fname.c_str(), "rb"); if (!fp) { // only record this error message on build platforms that log errors @@ -547,7 +551,9 @@ unsigned int planesize = 0; { t = filebuf[c]; - if (map.isworldmap) addobjectlayertile(t, pCKP); else addenemytile(t, pCKP); + if (map.isworldmap) addobjectlayertile(t, episode, levels_completed); + else addenemytile(t, episode, chglevelto, p_canexit); + if (++resetcnt==resetpt) curmapx=curmapy=0; c++; @@ -597,7 +603,7 @@ unsigned int planesize = 0; // Didn't it work? Don't matter. HQP is optional, so continue // install enemy stoppoints as needed - if (pCKP->Control.levelcontrol.episode==1 && lvlnum==13) + if (episode==1 && lvlnum==13) { map.objectlayer[94][13] = GARG_STOPPOINT; map.objectlayer[113][13] = GARG_STOPPOINT; @@ -606,17 +612,17 @@ unsigned int planesize = 0; map.objectlayer[87][5] = GARG_STOPPOINT; map.objectlayer[39][18] = GARG_STOPPOINT; } - else if (pCKP->Control.levelcontrol.episode==3 && lvlnum==6) + else if (episode==3 && lvlnum==6) { map.objectlayer[40][7] = BALL_NOPASSPOINT; map.objectlayer[50][7] = BALL_NOPASSPOINT; } - else if (pCKP->Control.levelcontrol.episode==3 && lvlnum==9) + else if (episode==3 && lvlnum==9) { map.objectlayer[45][106] = BALL_NOPASSPOINT; } - else if (pCKP->Control.levelcontrol.episode==3 && lvlnum==4) + else if (episode==3 && lvlnum==4) { map.objectlayer[94][17] = BALL_NOPASSPOINT; } diff --git a/src/game.cpp b/src/game.cpp index a869a5529..b07b6a8de 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -12,11 +12,10 @@ #include "include/gamedo.h" #include "include/gamepdo.h" #include "include/gm_pdowm.h" -#include "include/eseq_ep3.h" #include "sdl/CTimer.h" #include "sdl/CInput.h" #include "sdl/sound/CSound.h" -#include "include/enemyai.h" +//#include "include/enemyai.h" #include "hqp/CMusic.h" #include "vorticon/CHighScores.h" #include "hqp/CHQBitmap.h" @@ -43,12 +42,13 @@ void gameloop(stCloneKeenPlus *pCKP) crashflag=1; crashflag2 = pCKP->Control.levelcontrol.curlevel; crashflag3 = pCKP->Control.levelcontrol.episode; - why_term_ptr = "No player start position! (flag2=pCKP->Control.levelcontrol.curlevel, flag3=pCKP->Control.levelcontrol.episode)"; + why_term_ptr = "No player start position! (flag2=levelcontrol.curlevel, flag3=levelcontrol.episode)"; } if (!loadinggame) { - gameloop_initialize(pCKP); + gameloop_initialize(pCKP->Control.levelcontrol.episode, pCKP->Control.levelcontrol.dokeensleft); + pCKP->Control.levelcontrol.dokeensleft = false; } else { @@ -78,10 +78,10 @@ void gameloop(stCloneKeenPlus *pCKP) gamedo_AnimatedTiles(); g_pInput->pollEvents(); g_pTimer->SpeedThrottle(); - gamedo_RenderScreen(pCKP); + gamedo_RenderScreen(); } while(fade.mode!=FADE_COMPLETE /*&& !immediate_keytable[KQUIT]*/); - eseq3_Mortimer(pCKP); + eseq3_Mortimer(); } lastquit = 1; @@ -106,7 +106,7 @@ void gameloop(stCloneKeenPlus *pCKP) else gunfiretimer++; // gather input and copy to player[].keytable[] structures - gamedo_getInput(pCKP); + gamedo_getInput( &(pCKP->Control.levelcontrol) ); // run the player behaviour for each player in the game if (!map.isworldmap) @@ -125,7 +125,7 @@ void gameloop(stCloneKeenPlus *pCKP) } gamedo_AnimatedTiles(!pCKP->Control.levelcontrol.usedhintmb); - gamedo_enemyai(pCKP); + gamedo_enemyai( &(pCKP->Control.levelcontrol) ); gamedo_HandleFKeys(pCKP); @@ -139,7 +139,7 @@ void gameloop(stCloneKeenPlus *pCKP) // do frameskipping, and render/blit the screen if it's time - gamedo_frameskipping(pCKP); + gamedo_frameskipping(); // when we complete a fade out flag to exit the game loop if (fade.mode==FADE_COMPLETE) @@ -248,7 +248,7 @@ void gameloop(stCloneKeenPlus *pCKP) if (g_pInput->getPressedKey(KQUIT)) { - VerifyQuit(pCKP); + VerifyQuit(); } if (QuitState != NO_QUIT) return; @@ -394,8 +394,7 @@ int mpx,mpy,t; //if (tiles[t].isAnimated) map_deanimate(mpx, mpy); if (TileProperty[t][ANIMATION] != 1) map_deanimate(mpx, mpy); } - else if (TileProperty[t][BEHAVIOR] == 1) - //else if (tiles[t].lethal) + else if (TileProperty[t][BEHAVIOR] == 1) // Lethal (Deadly) Behavoir { // whoah, this "goodie" isn't so good... killplayer(theplayer); return; @@ -405,7 +404,7 @@ int mpx,mpy,t; procgoodie(t, mpx, mpy, theplayer, pCKP); } -void initgame(stCloneKeenPlus *pCKP) +void initgame(stLevelControl *p_levelcontrol) { int x,y; unsigned int i; @@ -423,7 +422,7 @@ unsigned int i; } // set gun/ice cannon fire freq - if (pCKP->Control.levelcontrol.episode==1) + if (p_levelcontrol->episode==1) { gunfirefreq = ICECANNON_FIRE_FREQ; } @@ -438,8 +437,8 @@ unsigned int i; sprites[DOOR_GREEN_SPRITE].ysize = 32; sprites[DOOR_BLUE_SPRITE].ysize = 32; - pCKP->Control.levelcontrol.level_done_timer = 0; - pCKP->Control.levelcontrol.gameovermode = 0; + p_levelcontrol->level_done_timer = 0; + p_levelcontrol->gameovermode = 0; // all objects -> not exist for(i=1;iControl.levelcontrol.episode==1) + if (p_levelcontrol->episode==1) { objdefsprites[OBJ_YORP] = OBJ_YORP_DEFSPRITE; objdefsprites[OBJ_GARG] = OBJ_GARG_DEFSPRITE; @@ -469,7 +468,7 @@ unsigned int i; objdefsprites[OBJ_RAY] = OBJ_RAY_DEFSPRITE_EP1; objdefsprites[OBJ_VORT] = OBJ_VORT_DEFSPRITE_EP1; } - else if (pCKP->Control.levelcontrol.episode==2) + else if (p_levelcontrol->episode==2) { objdefsprites[OBJ_WALKER] = OBJ_WALKER_DEFSPRITE; objdefsprites[OBJ_TANKEP2] = OBJ_TANKEP2_DEFSPRITE; @@ -480,7 +479,7 @@ unsigned int i; objdefsprites[OBJ_PLATFORM] = OBJ_PLATFORM_DEFSPRITE_EP2; objdefsprites[OBJ_BABY] = OBJ_BABY_DEFSPRITE_EP2; } - else if (pCKP->Control.levelcontrol.episode==3) + else if (p_levelcontrol->episode==3) { objdefsprites[OBJ_FOOB] = OBJ_FOOB_DEFSPRITE; objdefsprites[OBJ_NINJA] = OBJ_NINJA_DEFSPRITE; @@ -501,7 +500,7 @@ unsigned int i; objdefsprites[OBJ_SECTOREFFECTOR] = BlankSprite; // initilize game variables - pCKP->Control.levelcontrol.level_done = LEVEL_NOT_DONE; + p_levelcontrol->level_done = LEVEL_NOT_DONE; animtiletimer = curanimtileframe = 0; DemoObjectHandle = 0; @@ -699,23 +698,14 @@ void killobject(int o) // anything (players/enemies) occupying the map tile at [mpx,mpy] is killed void kill_all_intersecting_tile(int mpx, int mpy) { -unsigned int xpix,ypix; -int i; + unsigned int xpix,ypix; xpix = mpx<= objects[i].x) - { if (ypix <= objects[i].y && ypix+(16<= objects[i].y) - { killobject(i); - } - } - } - } } // returns whether pix position x,y is a stop point for object o. @@ -874,17 +864,6 @@ void endlevel(int reason_for_leaving, stLevelControl *levelcontrol) } } -void SetGameOver(stCloneKeenPlus *pCKP) -{ -/*int x,y,bmnum;*/ - if (!pCKP->Control.levelcontrol.gameovermode) - { - pCKP->Control.levelcontrol.gameovermode = 1; - g_pSound->playSound(SOUND_GAME_OVER, PLAY_NOW); - } -} - - // this is so objects can block the player, // player can stand on them, etc. // x and y are the CSFed coordinates to check (e.g. playx and playy) @@ -1345,12 +1324,12 @@ int o; gamepdo_ankh(cp); } -void gameloop_initialize(stCloneKeenPlus *pCKP) +void gameloop_initialize(int episode, bool show_keensleft = false) { unsigned int x,y,i/*,tl*/; int timeout; - if (pCKP->Control.levelcontrol.episode == 3) + if (episode == 3) { // coat the top of the map ("oh no!" border) with a non-solid tile // so keen can jump partially off the top of the screen @@ -1371,7 +1350,7 @@ int timeout; } } - if (pCKP->Control.levelcontrol.episode==1) + if (episode==1) { // coat the bottom of the map below the border. // since the border has solidceil=1 this provides @@ -1394,7 +1373,7 @@ int timeout; x = player[0].x; for(i=1;i>CSF>>4 < (map.xsize/2) || pCKP->Control.levelcontrol.episode==1) + if (player[0].x>>CSF>>4 < (map.xsize/2) || episode==1) { x += (18<>CSF>>4 < (map.xsize/2) || pCKP->Control.levelcontrol.episode==1) + if (player[i].x>>CSF>>4 < (map.xsize/2) || episode==1) player[i].pdir = player[i].pshowdir = RIGHT; else player[i].pdir = player[i].pshowdir = LEFT; @@ -1451,10 +1430,7 @@ int timeout; fade.fadetimer = 0; // "keens left" when returning to world map after dying - if (pCKP->Control.levelcontrol.dokeensleft) - { - keensleft(pCKP); - pCKP->Control.levelcontrol.dokeensleft = 0; - } + if (show_keensleft) + keensleft(episode); } diff --git a/src/gamedo.cpp b/src/gamedo.cpp index f0854a062..a134b320c 100644 --- a/src/gamedo.cpp +++ b/src/gamedo.cpp @@ -38,14 +38,14 @@ unsigned char oldupkey = 5; unsigned char olddownkey = 5; unsigned char oldctrlkey = 5; unsigned char oldaltkey = 5; -void gamedo_getInput(stCloneKeenPlus *pCKP) +void gamedo_getInput(stLevelControl *p_levelcontrol) { int i=0; int byt; unsigned int msb, lsb; - if (pCKP->Control.levelcontrol.demomode==DEMO_PLAYBACK) + if (p_levelcontrol->demomode==DEMO_PLAYBACK) { // time to get a new key block? if (!demo_RLERunLen) @@ -70,7 +70,7 @@ unsigned int msb, lsb; if (byt & 32)player[0].playcontrol[PA_STATUS] = 1; if (byt & 64) { // demo STOP command - if (fade.mode!=FADE_GO) endlevel(1, &(pCKP->Control.levelcontrol) ); + if (fade.mode!=FADE_GO) endlevel(1, p_levelcontrol ); } } else @@ -84,12 +84,12 @@ unsigned int msb, lsb; { if (g_pInput->getPressedKey(i)) { - if (fade.mode!=FADE_GO) endlevel(0, &(pCKP->Control.levelcontrol) ); + if (fade.mode!=FADE_GO) endlevel( 0, p_levelcontrol ); } } if (g_pInput->getPressedCommand(IC_STATUS)) { - if (fade.mode!=FADE_GO) endlevel(0, &(pCKP->Control.levelcontrol) ); + if (fade.mode!=FADE_GO) endlevel( 0, p_levelcontrol ); } return; @@ -122,7 +122,7 @@ unsigned int msb, lsb; if(g_pInput->getHoldedCommand(p, IC_STATUS)) player[p].playcontrol[PA_STATUS] = 1; - if (pCKP->Control.levelcontrol.demomode==DEMO_RECORD) + if (p_levelcontrol->demomode==DEMO_RECORD) { if(i) player[p].playcontrol[PA_X] += 100; fputc(i, demofile); @@ -149,9 +149,6 @@ int scrollchanged; if (player[theplayer].pdie) return 0; - //px = (Player[theplayer].getCoordX()>>CSF)-scroll_x; - //py = (Player[theplayer].getCoordY()>>CSF)-scroll_y; - px = (player[theplayer].x>>CSF)-scroll_x; py = (player[theplayer].y>>CSF)-scroll_y; @@ -211,7 +208,7 @@ int i; } // do object and enemy AI -void gamedo_enemyai(stCloneKeenPlus *pCKP) +void gamedo_enemyai(stLevelControl *p_levelcontrol) { int i, topobj; // handle objects and do enemy AI @@ -256,36 +253,36 @@ int i, topobj; switch(objects[i].type) { //KEEN1 - case OBJ_YORP: yorp_ai(i, pCKP->Control.levelcontrol); break; - case OBJ_GARG: garg_ai(i, pCKP); break; - case OBJ_VORT: vort_ai(i, pCKP, pCKP->Control.levelcontrol); break; - case OBJ_BUTLER: butler_ai(i, pCKP->Control.levelcontrol.hardmode); break; - case OBJ_TANK: tank_ai(i, pCKP->Control.levelcontrol.hardmode); break; - case OBJ_RAY: ray_ai(i, pCKP, pCKP->Control.levelcontrol); break; - case OBJ_DOOR: door_ai(i, pCKP->Control.levelcontrol.cepvars.DoorOpenDir); break; + case OBJ_YORP: yorp_ai(i, *p_levelcontrol); break; + case OBJ_GARG: garg_ai(i, p_levelcontrol->hardmode); break; + case OBJ_VORT: vort_ai(i, p_levelcontrol ); break; + case OBJ_BUTLER: butler_ai(i, p_levelcontrol->hardmode); break; + case OBJ_TANK: tank_ai(i, p_levelcontrol->hardmode); break; + case OBJ_RAY: ray_ai(i, p_levelcontrol->episode); break; + case OBJ_DOOR: door_ai(i, p_levelcontrol->cepvars.DoorOpenDir); break; case OBJ_ICECANNON: icecannon_ai(i); break; case OBJ_ICECHUNK: icechunk_ai(i); break; case OBJ_ICEBIT: icebit_ai(i); break; - case OBJ_TELEPORTER: teleporter_ai(i, pCKP->Control.levelcontrol); break; + case OBJ_TELEPORTER: teleporter_ai(i, *p_levelcontrol); break; case OBJ_ROPE: rope_ai(i); break; //KEEN2 - case OBJ_WALKER: walker_ai(i, pCKP->Control.levelcontrol); break; - case OBJ_TANKEP2: tankep2_ai(i, pCKP); break; - case OBJ_PLATFORM: platform_ai(i, pCKP->Control.levelcontrol); break; - case OBJ_VORTELITE: vortelite_ai(i, pCKP->Control.levelcontrol.dark); break; - case OBJ_SECTOREFFECTOR: se_ai(i, pCKP); break; - case OBJ_BABY: baby_ai(i, pCKP->Control.levelcontrol.episode, - pCKP->Control.levelcontrol.hardmode); break; + case OBJ_WALKER: walker_ai(i, *p_levelcontrol); break; + case OBJ_TANKEP2: tankep2_ai(i, p_levelcontrol->hardmode); break; + case OBJ_PLATFORM: platform_ai(i, *p_levelcontrol); break; + case OBJ_VORTELITE: vortelite_ai(i, p_levelcontrol->dark); break; + case OBJ_SECTOREFFECTOR: se_ai(i, p_levelcontrol ); break; + case OBJ_BABY: baby_ai(i, p_levelcontrol->episode, + p_levelcontrol->hardmode); break; case OBJ_EXPLOSION: explosion_ai(i); break; case OBJ_EARTHCHUNK: earthchunk_ai(i); break; - case OBJ_SPARK: spark_ai(i, &(pCKP->Control.levelcontrol.sparks_left) ); break; + case OBJ_SPARK: spark_ai(i, &(p_levelcontrol->sparks_left) ); break; //KEEN3 - case OBJ_FOOB: foob_ai(i, pCKP); break; - case OBJ_NINJA: ninja_ai(i, pCKP); break; - case OBJ_MEEP: meep_ai(i, pCKP->Control.levelcontrol); break; - case OBJ_SNDWAVE: sndwave_ai(i, pCKP); break; - case OBJ_MOTHER: mother_ai(i, pCKP->Control.levelcontrol); break; - case OBJ_FIREBALL: fireball_ai(i, pCKP->Control.levelcontrol.hardmode); break; + case OBJ_FOOB: foob_ai(i, p_levelcontrol->hardmode); break; + case OBJ_NINJA: ninja_ai(i, p_levelcontrol->hardmode); break; + case OBJ_MEEP: meep_ai(i, *p_levelcontrol); break; + case OBJ_SNDWAVE: sndwave_ai(i, p_levelcontrol->hardmode); break; + case OBJ_MOTHER: mother_ai(i, *p_levelcontrol); break; + case OBJ_FIREBALL: fireball_ai(i, p_levelcontrol->hardmode); break; case OBJ_BALL: ballandjack_ai(i); break; case OBJ_JACK: ballandjack_ai(i); break; case OBJ_PLATVERT: platvert_ai(i); break; @@ -296,7 +293,6 @@ int i, topobj; case OBJ_DEMOMSG: break; default: - //crash("gamedo_enemy_ai: Object %d is of invalid type %d\n", i, objects[i].type); g_pLogFile->ftextOut("gamedo_enemy_ai: Object %d is of invalid type %d\n", i, objects[i].type); break; } @@ -466,7 +462,7 @@ int cplayer; int savew, saveh; -void gamedo_render_drawobjects(stCloneKeenPlus *pCKP) +void gamedo_render_drawobjects() { unsigned int i; int x,y,o,tl,xsize,ysize; @@ -479,14 +475,11 @@ int xa,ya; o = player[i].useObject; if (!player[i].hideplayer) - { objects[o].sprite = player[i].playframe + playerbaseframes[i]; - } else - { objects[o].sprite = BlankSprite; - } + objects[o].x = player[i].x; objects[o].y = player[i].y; objects[o].scrx = (player[i].x>>CSF)-scroll_x; @@ -496,7 +489,9 @@ int xa,ya; // if we're playing a demo keep the "DEMO" message on the screen // as an object - if (pCKP->Control.levelcontrol.demomode==DEMO_PLAYBACK) + // TODO: It would be better to add this demo message as on object, like the other stuff that is shown + // This still must be done... + /*if (show_demo_title) { #define DEMO_X_POS 137 #define DEMO_Y_POS 6 @@ -508,7 +503,7 @@ int xa,ya; objects[DemoObjectHandle].y = (DEMO_Y_POS+scroll_y)<renderHQBitmap(); - if(pCKP != NULL) - { - gamedo_render_drawobjects(pCKP); + //if(pCKP != NULL) + //{ + gamedo_render_drawobjects(); - if (pCKP->Control.levelcontrol.gameovermode) + //if (pCKP->Control.levelcontrol.gameovermode) + // TODO: make this Bitmap also a object or tile to be added. + /*if (special_bitmap == GAMEOVER_BITMAP) { // figure out where to center the gameover bitmap and draw it bmnum = g_pGraphics->getBitmapNumberFromName("GAMEOVER"); x = (320/2)-(bitmaps[bmnum].xsize/2); y = (200/2)-(bitmaps[bmnum].ysize/2); g_pGraphics->drawBitmap(x, y, bmnum); - } - } + }*/ + //} g_pVideoDriver->sb_blit(); // blit scrollbuffer to display - - if(pCKP != NULL) - { - gamedo_render_erasedebug(); - gamedo_render_eraseobjects(); - } + gamedo_render_erasedebug(); + gamedo_render_eraseobjects(); curfps++; } @@ -884,17 +878,17 @@ void gamedo_fades(void) } } -void gamedo_frameskipping(stCloneKeenPlus *pCKP) +void gamedo_frameskipping() { if (framebyframe) { - gamedo_RenderScreen(pCKP); + gamedo_RenderScreen(); return; } if (frameskiptimer >= g_pVideoDriver->getFrameskip()) { - gamedo_RenderScreen(pCKP); + gamedo_RenderScreen(); frameskiptimer = 0; } else frameskiptimer++; @@ -902,7 +896,7 @@ void gamedo_frameskipping(stCloneKeenPlus *pCKP) // same as above but only does a sb_blit, not the full RenderScreen. // used for intros etc. -void gamedo_frameskipping_blitonly(void) +void gamedo_frameskipping_blitonly() { if (framebyframe) { diff --git a/src/gamepdo.cpp b/src/gamepdo.cpp index 9ac7e90ea..3dc73fb5d 100644 --- a/src/gamepdo.cpp +++ b/src/gamepdo.cpp @@ -161,7 +161,8 @@ void gamepdo_dieanim(int cp, stCloneKeenPlus *pCKP) player[cp].pdie = PDIE_DEAD; if (player[cp].inventory.lives<0) { - SetGameOver(pCKP); + pCKP->Control.levelcontrol.gameovermode = true; + g_pSound->playSound(SOUND_GAME_OVER, PLAY_NOW); } else { @@ -284,7 +285,7 @@ void gamepdo_ProcessInput(unsigned int cp, stCloneKeenPlus *pCKP) g_pTimer->SpeedThrottle(); gamedo_fades(); - gamedo_render_drawobjects(pCKP); + gamedo_render_drawobjects(); gamedo_AnimatedTiles(); PauseDialog->renderDialog(); gamedo_frameskipping_blitonly(); diff --git a/src/gm_pdowm.cpp b/src/gm_pdowm.cpp index 8a8c3a4be..4c1c8aae0 100644 --- a/src/gm_pdowm.cpp +++ b/src/gm_pdowm.cpp @@ -49,14 +49,14 @@ void gamepdo_wm_HandlePlayer(int cp, stCloneKeenPlus *pCKP) AllowMountUnmountNessie(cp); } - gamepdo_wm_SelectFrame(cp, pCKP); + gamepdo_wm_SelectFrame(cp); // copy player's keytable to lastkeytable memcpy(&player[cp].lastkeytable, &player[cp].keytable, sizeof(player[cp].lastkeytable)); } // select the appropriate player frame based on what he's doing -void gamepdo_wm_SelectFrame(int cp, stCloneKeenPlus *pCKP) +void gamepdo_wm_SelectFrame(int cp) { // select base frame for current direction if (player[cp].pshowdir==RIGHT) player[cp].playframe = PMAPRIGHTFRAME; @@ -64,9 +64,6 @@ void gamepdo_wm_SelectFrame(int cp, stCloneKeenPlus *pCKP) else if (player[cp].pshowdir==UP) player[cp].playframe = PMAPUPFRAME; else if (player[cp].pshowdir==DOWN) player[cp].playframe = PMAPDOWNFRAME; - // episode 3 map frames start at 31, ep1&2 at 32 - if (pCKP->Control.levelcontrol.episode==3) player[cp].playframe--; - // no walking animation if we're fading if (fade.mode != NO_FADE) return; diff --git a/src/include/declarations.h b/src/include/declarations.h index 96d50d45b..7a9a06145 100644 --- a/src/include/declarations.h +++ b/src/include/declarations.h @@ -43,9 +43,9 @@ struct stLevelControl int curlevel; // number of current level char success; // 1 if level was finished, 0 if he died char isfinallevel; // 1 if this is the final level - char canexit; // 1 if player is allowed to use the exit door + bool canexit; // true if player is allowed to use the exit door char gameovermode; // 1 if "Game Over" is displayed - char dokeensleft; // 1 if we need to do the "Keens Left" + bool dokeensleft; // 1 if we need to do the "Keens Left" bool dark; // true if level is currently dark (lights are out) int episode; // which episode we're playing (1-3) @@ -69,7 +69,7 @@ struct stLevelControl int sparks_left; - // if 1, a moving platform is currently extending/retracting (ep2) + // if true, a moving platform is currently extending/retracting (ep2) bool PlatExtending; // if > 0, the screen will shake and it will decrement each frame. diff --git a/src/include/enemyai.h b/src/include/enemyai.h index b27600055..e2760dfc8 100644 --- a/src/include/enemyai.h +++ b/src/include/enemyai.h @@ -8,35 +8,35 @@ // .ai functions // ep1 void yorp_ai(int o, stLevelControl levelcontrol); -void garg_ai(int o, stCloneKeenPlus *pCKP); -void vort_ai(int o, stCloneKeenPlus *pCKP, stLevelControl levelcontrol); +void garg_ai(int o, bool hardmode); +void vort_ai(int o, stLevelControl *p_levelcontrol); void butler_ai(int o, bool hardmode); void tank_ai(int o, bool hardmode); -void ray_ai(int o, stCloneKeenPlus *pCKP, stLevelControl levelcontrol); +void ray_ai(int o, int episode); void icechunk_ai(int o); void icebit_ai(int o); void icecannon_ai(int o); void door_ai(int o, char DoorOpenDir); void teleporter_ai(int o, stLevelControl levelcontrol); void rope_ai(int o); + // ep2 void walker_ai(int o, stLevelControl levelcontrol); -void tankep2_ai(int o, stCloneKeenPlus *pCKP); +void tankep2_ai(int o, bool hardmode); void platform_ai(int o, stLevelControl levelcontrol); void vortelite_ai(int o, bool darkness); -void se_ai(int o, stCloneKeenPlus *pCKP); +void se_ai(int o, stLevelControl *p_levelcontrol); void explosion_ai(int o); void earthchunk_ai(int o); void spark_ai(int o, int *p_sparks_left); + // ep3 void foob_ai(int o, bool hardmode); -void ninja_ai(int o, stCloneKeenPlus *pCKP); +void ninja_ai(int o, bool hardmode); void meep_ai(int o, stLevelControl levelcontrol); -void sndwave_ai(int o, stCloneKeenPlus *pCKP); +void sndwave_ai(int o, bool hardmode); void mother_ai(int o, stLevelControl levelcontrol); void fireball_ai(int o, bool hard); void ballandjack_ai(int o); void platvert_ai(int o); void nessie_ai(int o); - -void gamedo_enemyai(stCloneKeenPlus *pCKP); diff --git a/src/include/eseq_ep1.h b/src/include/eseq_ep1.h deleted file mode 100644 index 6062895b0..000000000 --- a/src/include/eseq_ep1.h +++ /dev/null @@ -1,11 +0,0 @@ -/* - * eseq_ep1.h - * - * Created on: 02.01.2009 - * Author: gerstrong - */ - -int eseq1_ShipFlys(stCloneKeenPlus *pCKP); -void eseq_ToBeContinued(stCloneKeenPlus *pCKP); -int eseq1_ReturnsToShip(stCloneKeenPlus *pCKP); -int eseq1_BackAtHome(stCloneKeenPlus *pCKP); diff --git a/src/include/eseq_ep2.h b/src/include/eseq_ep2.h deleted file mode 100644 index b5188f3f7..000000000 --- a/src/include/eseq_ep2.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * eseq_ep2.h - * - * Created on: 02.01.2009 - * Author: gerstrong - */ - -#ifndef __CG_ESEQ_EP2_H__ -#define __CG_ESEQ_EP2_H__ - -#include -struct stCloneKeenPlus; - -int eseq2_LimpsHome(stCloneKeenPlus *pCKP); -int eseq2_TantalusRay(stCloneKeenPlus *pCKP); -void eseq2_vibrate(stCloneKeenPlus *pCKP); -int eseq2_HeadsForEarth(stCloneKeenPlus *pCKP); -int eseq2_SnowedOutside(stCloneKeenPlus *pCKP); -void eseq_showmsg(const std::string& text, int boxleft, int boxtop, int boxwidth, int boxheight, char autodismiss, stCloneKeenPlus *pCKP); - -#endif diff --git a/src/include/eseq_ep3.h b/src/include/eseq_ep3.h deleted file mode 100644 index 979bbe924..000000000 --- a/src/include/eseq_ep3.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * eseq_ep3.h - * - * Created on: 02.01.2009 - * Author: gerstrong - */ - -void eseq3_Mortimer(stCloneKeenPlus *pCKP); -char eseq3_AwardBigV(stCloneKeenPlus *pCKP); diff --git a/src/include/fileio.h b/src/include/fileio.h index 1e6d99c4c..39c98654a 100644 --- a/src/include/fileio.h +++ b/src/include/fileio.h @@ -10,7 +10,8 @@ #include -unsigned int loadmap(const std::string& filename, const std::string& path, int lvlnum, int isworldmap, stCloneKeenPlus *pCKP); +unsigned int loadmap(const std::string& filename, const std::string& path, + int lvlnum, stLevelControl* p_levelcontrol); void addmaptile(unsigned int t); void addenemytile(unsigned int t, stCloneKeenPlus *pCKP); short checkConsistencyofGameData(stGameData *p_GameData); diff --git a/src/include/game.h b/src/include/game.h index dce2d2cd4..961e165c3 100644 --- a/src/include/game.h +++ b/src/include/game.h @@ -247,7 +247,7 @@ DOWN #define PSUPPORTEDBYOBJECT 0 void gameloop(stCloneKeenPlus *pCKP); -void gameloop_initialize(stCloneKeenPlus *pCKP); +void gameloop_initialize(int episode, bool show_keensleft); void initsprites(stCloneKeenPlus *pCKP, int s); void keen_get_goodie(int px, int py, int theplayer, stCloneKeenPlus *pCKP); void procgoodie(int t, int mpx, int mpy, int theplayer, stCloneKeenPlus *pCKP); @@ -255,7 +255,6 @@ void procgoodie(int t, int mpx, int mpy, int theplayer, stCloneKeenPlus *pCKP); void recalc_highest_objslot(void); char IsStopPoint(int x, int y, int o); -void initgame(stCloneKeenPlus *pCKP); int initgamefirsttime(stCloneKeenPlus *pCKP, int s); void open_door(int doortile, int doorsprite, int mpx, int mpy, int cp, stCloneKeenPlus *pCKP); @@ -264,7 +263,11 @@ void PlayerTouchedExit(int theplayer, stCloneKeenPlus *pCKP); void endlevel(int reason_for_leaving, stLevelControl *levelcontrol); -void SetGameOver(stCloneKeenPlus *pCKP); char checkissolidl(int x, int y, int cp, stCloneKeenPlus *pCKP); char checkissolidr(int x, int y, int cp, stCloneKeenPlus *pCKP); +void gamedo_enemyai(stLevelControl *p_levelcontrol); + +// Referenzed from cinematics/EndingSequenceEp3.cpp +void eseq3_Mortimer(); + diff --git a/src/include/gamedo.h b/src/include/gamedo.h index 32d2e29a3..5ddc02f14 100644 --- a/src/include/gamedo.h +++ b/src/include/gamedo.h @@ -1,10 +1,12 @@ +void gamedo_RenderScreen(); -void gamedo_RenderScreen(stCloneKeenPlus *pCKP); -void gamedo_frameskipping(stCloneKeenPlus *pCKP); + +void gamedo_frameskipping(); void gamedo_HandleFKeys(stCloneKeenPlus *pCKP); -void gamedo_frameskipping_blitonly(void); -void gamedo_getInput(stCloneKeenPlus *pCKP); -void gamedo_render_drawobjects(stCloneKeenPlus *pCKP); +void gamedo_frameskipping_blitonly(); +void gamedo_getInput(stLevelControl *p_levelcontrol); + +void gamedo_render_drawobjects(); // Enemies AI Functions used in gamepdo.cpp void baby_ai(int o, int episode, bool hard); diff --git a/src/include/gm_pdowm.h b/src/include/gm_pdowm.h index ec61660af..2b70ac729 100644 --- a/src/include/gm_pdowm.h +++ b/src/include/gm_pdowm.h @@ -3,7 +3,7 @@ void gamepdo_wm_HandlePlayer(int cp, stCloneKeenPlus *pCKP); void gamepdo_InertiaAndFriction_Y(int cp, stCloneKeenPlus *pCKP); void gamepdo_InertiaAndFriction_X(unsigned int cp, stCloneKeenPlus *pCKP); void gamepdo_wm_AllowEnterLevel(int cp, stCloneKeenPlus *pCKP); -void gamepdo_wm_SelectFrame(int cp, stCloneKeenPlus *pCKP); +void gamepdo_wm_SelectFrame(int cp); void gamepdo_wm_setblockedlrud(int cp, stCloneKeenPlus *pCKP); void gamepdo_wm_setdir(int cp, stCloneKeenPlus *pCKP); diff --git a/src/include/menu.h b/src/include/menu.h index 44c1b49ad..adda46586 100644 --- a/src/include/menu.h +++ b/src/include/menu.h @@ -18,8 +18,8 @@ char controlsmenu(stCloneKeenPlus *pCKP); int mainmenu(stCloneKeenPlus *pCKP,int defaultopt); char configmenu(stCloneKeenPlus *pCKP); bool loadStartMenu(stCloneKeenPlus *pCKP); -void keensleft(stCloneKeenPlus *pCKP); -void showmapatpos(int level, int xoff, int yoff, int wm, stCloneKeenPlus *pCKP); +void keensleft(int episode); +void showmapatpos(int level, int xoff, int yoff, stCloneKeenPlus *pCKP); short loadResourcesforStartMenu(stCloneKeenPlus *pCKP, CGame *Game); int getDifficulty(stCloneKeenPlus *pCKP); void showPage(const std::string& str_text, stCloneKeenPlus *pCKP, int textsize); diff --git a/src/include/misc.h b/src/include/misc.h index 33e0f8949..9cbab59a0 100644 --- a/src/include/misc.h +++ b/src/include/misc.h @@ -1,14 +1,15 @@ +// Reference from game.cpp +void initgame(stLevelControl *p_levelcontrol); void cleanup(stCloneKeenPlus *CKP); void showinventory(int p, stCloneKeenPlus *pCKP); void YourShipNeedsTheseParts(stCloneKeenPlus *pCKP); void ShipEp3(stCloneKeenPlus *pCKP); -int endsequence(stCloneKeenPlus *pCKP); void youseeinyourmind(int mpx, int mpy, stCloneKeenPlus *pCKP); void VorticonElder(int mpx, int mpy, stCloneKeenPlus *pCKP); char save_slot_box(int issave, stCloneKeenPlus *pCKP); void game_save_interface(stCloneKeenPlus *pCKP); -int VerifyQuit(stCloneKeenPlus *pCKP); +int VerifyQuit(); char gameiswon(stCloneKeenPlus *pCKP); void game_save(char *fname, stCloneKeenPlus *pCKP); int game_load(char *fname, stCloneKeenPlus *pCKP); @@ -16,3 +17,5 @@ void showTextMB(int lines, char **text, stCloneKeenPlus *pCKP); void showGameHint(int mpx, int mpy, int episode, int level); unsigned int rnd(void); + +void endsequence_start(int episode); diff --git a/src/keen.h b/src/keen.h index 8155399c6..8e18a9036 100644 --- a/src/keen.h +++ b/src/keen.h @@ -104,12 +104,12 @@ typedef struct stFade typedef struct stMap { unsigned int xsize, ysize; // size of the map - unsigned char isworldmap; // if 1, this is the world map + bool isworldmap; // if 1, this is the world map unsigned int mapdata[256][256]; // the map data // in-game, contains monsters and special object tags like for switches // on world map contains level numbers and flags for things like teleporters unsigned int objectlayer[256][256]; - char firsttime; // used when generating multiplayer positions on world map + bool firsttime; // used when generating multiplayer positions on world map } stMap; struct stBitmap diff --git a/src/main.cpp b/src/main.cpp index 3521ff578..b3377ac26 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -36,7 +36,6 @@ #include "include/menu.h" #include "sdl/CVideoDriver.h" #include "include/game.h" -#include "include/eseq_ep2.h" #include "include/fileio.h" #include "include/fileio/story.h" #include "include/main.h" @@ -289,6 +288,11 @@ short closeCKP(stCloneKeenPlus *pCKP) return 0; } +// Prototypes needed for playgame_levelmanager +int eseq2_TantalusRay(stCloneKeenPlus *pCKP); +void eseq2_vibrate(); + + void playgame_levelmanager(stCloneKeenPlus *pCKP) { int i, o, wm, firsttime = 1; @@ -313,7 +317,7 @@ void playgame_levelmanager(stCloneKeenPlus *pCKP) do { - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); newlevel = p_levelcontrol->chglevelto; if (p_levelcontrol->episode==1 && p_levelcontrol->hardmode) @@ -337,7 +341,8 @@ void playgame_levelmanager(stCloneKeenPlus *pCKP) wm = 0; } p_levelcontrol->canexit = 1; // assume can exit before loading map - if (loadmap(levelname, pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory, p_levelcontrol->chglevelto, wm, pCKP)) + + if (loadmap(levelname, pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory, newlevel, p_levelcontrol)) { crashflag = 1; crashflag2 = p_levelcontrol->chglevelto; @@ -487,7 +492,7 @@ void playgame_levelmanager(stCloneKeenPlus *pCKP) } else if (p_levelcontrol->command==LVLC_TANTALUS_RAY) { - eseq2_vibrate(pCKP); + eseq2_vibrate(); eseq2_TantalusRay(pCKP); IntroCanceled = 1; // popup main menu immediately } @@ -548,12 +553,12 @@ gotEOF: ; p_levelcontrol->command = LVLC_NOCOMMAND; initgamefirsttime(pCKP, s); - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); // now load the map and play the level sprintf(filename, "level%02d.ck%d", p_levelcontrol->curlevel, p_levelcontrol->episode); - if (loadmap(filename, pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory, - p_levelcontrol->curlevel, 0, pCKP)) return DEMO_RESULT_FILE_BAD; + if ( loadmap(filename, pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory, + p_levelcontrol->curlevel, &(pCKP->Control.levelcontrol)) ) return DEMO_RESULT_FILE_BAD; for(i=0;iftextOut("showmapatpos(%d, %d, %d, %d);
",level,xoff,yoff,wm); + g_pLogFile->ftextOut("showmapatpos(%d, %d, %d);
",level,xoff,yoff); pCKP->Control.levelcontrol.dark = 0; g_pGraphics->initPalette(pCKP->Control.levelcontrol.dark); - initgame(pCKP); // reset scroll + initgame( &(pCKP->Control.levelcontrol) ); // reset scroll levelname = "level" + FixedWidthStr_LeftFill(itoa(level), 2, '0') + ".ck" + itoa(pCKP->Control.levelcontrol.episode); short numsel; @@ -51,7 +50,7 @@ void showmapatpos(int level, int xoff, int yoff, int wm, stCloneKeenPlus *pCKP) else numsel = pCKP->Resources.GameSelected-1; - if(loadmap(levelname, pCKP->GameData[numsel].DataDirectory, level, wm, pCKP) != 0) + if(loadmap(levelname, pCKP->GameData[numsel].DataDirectory, level, &(pCKP->Control.levelcontrol) ) != 0) return; drawmap(); @@ -136,7 +135,7 @@ short loadResourcesforStartMenu(stCloneKeenPlus *pCKP, CGame *Game) { return 1; } - initgame(pCKP); + initgame( &(pCKP->Control.levelcontrol) ); return 0; } @@ -155,7 +154,7 @@ bool loadStartMenu(stCloneKeenPlus *pCKP) fade.dir = FADE_IN; fade.curamt = 0; fade.fadetimer = 0; - showmapatpos(90, (104 << 2)+256+256+80, 32-4, 0, pCKP); + showmapatpos(90, (104 << 2)+256+256+80, 32-4, pCKP); // Prepare the Games Menu GamesMenu = new CDialog(); @@ -235,7 +234,7 @@ int mainmenu(stCloneKeenPlus *pCKP,int defaultopt) fade.dir = FADE_IN; fade.curamt = 0; fade.fadetimer = 0; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); // Prepare the Games Menu MainMenu = new CDialog(); @@ -374,7 +373,7 @@ int getDifficulty(stCloneKeenPlus *pCKP) fade.curamt = 0; fade.fadetimer = 0; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); // Load the Title Bitmap bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); @@ -440,7 +439,7 @@ int AudioDlg(stCloneKeenPlus *pCKP) int rate=0; short mode=0; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); // Load the Title Bitmap bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); @@ -549,7 +548,7 @@ void OptionsDlg(stCloneKeenPlus *pCKP) char buf[256]; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); // Load the Title Bitmap bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); @@ -651,7 +650,7 @@ short GraphicsDlg(stCloneKeenPlus *pCKP) unsigned char autoframeskip = 0; bool aspect; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); // Load the Title Bitmap bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); @@ -898,7 +897,7 @@ short GraphicsDlg(stCloneKeenPlus *pCKP) Settings->saveDrvCfg(); delete Settings; Settings = NULL; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); fade.mode = FADE_GO; fade.dir = FADE_IN; @@ -948,7 +947,7 @@ void showPage(const std::string& str_text, stCloneKeenPlus *pCKP, int textsize) memcpy(text,str_text.c_str(),textsize); - showmapatpos(90, STORYBOARD_X, STORYBOARD_Y, 0, pCKP); + showmapatpos(90, STORYBOARD_X, STORYBOARD_Y, pCKP); fade.mode = FADE_GO; fade.rate = FADE_NORM; @@ -1075,7 +1074,7 @@ void showPage(const std::string& str_text, stCloneKeenPlus *pCKP, int textsize) fade.mode = FADE_GO; } - gamedo_frameskipping(pCKP); + gamedo_frameskipping(); g_pInput->pollEvents(); g_pTimer->SpeedThrottle(); @@ -1096,7 +1095,7 @@ char configmenu(stCloneKeenPlus *pCKP) int selection; int x; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); // Load the Title Bitmap bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); @@ -1186,7 +1185,7 @@ char controlsmenu(stCloneKeenPlus *pCKP) char buf[256]; char buf2[256]; - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); + showmapatpos(90, MAINMENU_X, MENUS_Y, pCKP); // Load the Title Bitmap bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); @@ -1369,7 +1368,7 @@ char controlsmenu(stCloneKeenPlus *pCKP) return 0; } -void keensleft(stCloneKeenPlus *pCKP) +void keensleft(int episode) { int enter, lastenterstate; unsigned int p; @@ -1377,24 +1376,17 @@ int x,y,i; int boxY, boxH; int boxtimer; -stLevelControl *p_levelcontrol = &pCKP->Control.levelcontrol; - - // on episode 3 we have to subtract one from the map tiles - // because the tiles start at 31, not 32 like on the other eps - int ep3 = 0; - if (p_levelcontrol->episode==3) ep3 = 1; - #define KEENSLEFT_TIME 400 for(i=0;iControl.levelcontrol; x = ((KEENSLEFT_X+1)*8)+4; for(i=0;idrawSprite_direct(x, y, PMAPDOWNFRAME+playerbaseframes[p]-ep3); + g_pGraphics->drawSprite_direct(x, y, PMAPDOWNFRAME+playerbaseframes[p]- + (episode==3)); + // (episode==3) TODO: Check whether this is necessary x+=16; } y+=18; diff --git a/src/misc.cpp b/src/misc.cpp index 87c2a9ebb..886628461 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -18,9 +18,6 @@ #include "include/misc.h" #include "include/game.h" -#include "include/eseq_ep1.h" -#include "include/eseq_ep2.h" -#include "include/eseq_ep3.h" #include "include/gamedo.h" #include "CLogFile.h" #include "CGraphics.h" @@ -692,47 +689,6 @@ int i; if (i=='W') return 1; else return 0; } -/* -int game_load(char *fname) -{ -FILE *fp; -long i; -unsigned long scrx; -int scry; - - fp = OpenGameFile(fname, "rb"); - if (!fp) return 1; - - // do the header and version check - if (fgetc(fp) != 'S') { fclose(fp); return 1; } - if (fgetc(fp) != SAVEGAMEVERSION) { fclose(fp); return 1; } - fgetc(fp); // iswm flag--not needed here - - // save all necessary structures to the file - fread(&numplayers, sizeof(numplayers), 1, fp); - fread(&levelcontrol, sizeof(levelcontrol), 1, fp); - fread(&scrx, sizeof(scrx), 1, fp); - fread(&scry, sizeof(scry), 1, fp); - fread(&max_scroll_x, sizeof(max_scroll_x), 1, fp); - fread(&max_scroll_y, sizeof(max_scroll_y), 1, fp); - fread(&map, sizeof(map), 1, fp); - - initgame(); // reset scroll - drawmap(); - for(i=0;iControl.levelcontrol); sgrle_decompress(fp, (unsigned char *)&max_scroll_y, sizeof(max_scroll_y)); sgrle_decompress(fp, (unsigned char *)&map, sizeof(map)); - initgame(pCKP); // reset scroll + initgame( &(pCKP->Control.levelcontrol) ); // reset scroll drawmap(); for(i=0;i 5000) break; - gamedo_render_drawobjects(pCKP); + gamedo_render_drawobjects(); sb_dialogbox(dlgX,dlgY,dlgW,dlgH); g_pGraphics->sb_font_draw( getstring("GameSaveSuccess"),(dlgX+1)<<3,(dlgY+1)<<3); @@ -966,7 +922,7 @@ int dlgX,dlgY,dlgW,dlgH; map_redraw(); } -int VerifyQuit(stCloneKeenPlus *pCKP) +int VerifyQuit() { int dlgX,dlgY,dlgW,dlgH; std::string text; @@ -983,7 +939,7 @@ int dlgX,dlgY,dlgW,dlgH; // loading a game that doesn't exist. do { - gamedo_render_drawobjects(pCKP); + gamedo_render_drawobjects(); gamedo_AnimatedTiles(); sb_dialogbox(dlgX, dlgY, dlgW, dlgH); @@ -1015,29 +971,6 @@ int dlgX,dlgY,dlgW,dlgH; } while(1); } -int endsequence(stCloneKeenPlus *pCKP) -{ - - if (pCKP->Control.levelcontrol.episode==1) - { - if (eseq1_ReturnsToShip(pCKP)) return 0; - if (eseq1_ShipFlys(pCKP)) return 0; - eseq1_BackAtHome(pCKP); - } - else if (pCKP->Control.levelcontrol.episode==2) - { - if (eseq2_HeadsForEarth(pCKP)) return 0; - if (eseq2_LimpsHome(pCKP)) return 0; - if (eseq2_SnowedOutside(pCKP)) return 0; - } - else if (pCKP->Control.levelcontrol.episode==3) - { - if (eseq3_AwardBigV(pCKP)) return 0; - } - - return 0; -} - void AllPlayersInvisible(void) { int i; diff --git a/src/vorticon/CCredits.cpp b/src/vorticon/CCredits.cpp index 037694dd6..5372bf6e3 100644 --- a/src/vorticon/CCredits.cpp +++ b/src/vorticon/CCredits.cpp @@ -35,7 +35,7 @@ void CCredits::Render(stCloneKeenPlus *pCKP) fade.curamt = 0; fade.fadetimer = 0; - showmapatpos(90, 104<<4, 32, 0, pCKP); + showmapatpos(90, 104<<4, 32, pCKP); memset(scrolltext,0,51*80); diff --git a/src/vorticon/CDialog.cpp b/src/vorticon/CDialog.cpp index eb96f9149..d1193bb7e 100644 --- a/src/vorticon/CDialog.cpp +++ b/src/vorticon/CDialog.cpp @@ -277,7 +277,7 @@ void CDialog::renderOpenDialogAnimation(int x,int y, int w, int h) drawDialogbox(mx,my,mw,mh); gamedo_AnimatedTiles(); - gamedo_frameskipping(NULL); + gamedo_frameskipping(); g_pTimer->SpeedThrottle(); timer++; diff --git a/src/vorticon/CHighScores.cpp b/src/vorticon/CHighScores.cpp index 94ee694f5..0db1da906 100644 --- a/src/vorticon/CHighScores.cpp +++ b/src/vorticon/CHighScores.cpp @@ -69,7 +69,7 @@ char CHighScores::showHighScore(void) loadHighScoreTable(); // show High-score Frame - showmapatpos(90, HIGHSCORETABLE_X, HIGHSCORETABLE_Y, 0, pCKP); + showmapatpos(90, HIGHSCORETABLE_X, HIGHSCORETABLE_Y, pCKP); // Prepare some extra items if available (Ep1 + 2) memset(ItemTiles,0,4*sizeof(int)); @@ -161,7 +161,7 @@ char CHighScores::showHighScore(void) gamedo_AnimatedTiles(); - gamedo_frameskipping(pCKP); + gamedo_frameskipping(); g_pInput->pollEvents(); g_pTimer->SpeedThrottle(); @@ -189,7 +189,7 @@ char CHighScores::writeHighScore(int points, bool *extras, int cities) loadHighScoreTable(); // show High-score Frame - showmapatpos(90, HIGHSCORETABLE_X, HIGHSCORETABLE_Y, 0, pCKP); + showmapatpos(90, HIGHSCORETABLE_X, HIGHSCORETABLE_Y, pCKP); place=6; sscanf(Score[place],"%d",&num); @@ -352,7 +352,7 @@ char CHighScores::writeHighScore(int points, bool *extras, int cities) gamedo_AnimatedTiles(); - gamedo_frameskipping(pCKP); + gamedo_frameskipping(); g_pInput->pollEvents(); g_pTimer->SpeedThrottle(); diff --git a/src/vorticon/CIntro.cpp b/src/vorticon/CIntro.cpp index d6972afe0..b1f39424c 100644 --- a/src/vorticon/CIntro.cpp +++ b/src/vorticon/CIntro.cpp @@ -37,7 +37,7 @@ void CIntro::Render(stCloneKeenPlus *pCKP) fade.curamt = 0; fade.fadetimer = 0; - showmapatpos(90, 104<<4, 32, 0, pCKP); + showmapatpos(90, 104<<4, 32, pCKP); // Load the Title Bitmap bmnum[0] = g_pGraphics->getBitmapNumberFromName("AN"); diff --git a/src/vorticon/COrderingInfo.cpp b/src/vorticon/COrderingInfo.cpp index 1697c2720..bb98a824b 100644 --- a/src/vorticon/COrderingInfo.cpp +++ b/src/vorticon/COrderingInfo.cpp @@ -100,7 +100,7 @@ void COrderingInfo::Render(stCloneKeenPlus *pCKP) fade.curamt = 0; fade.fadetimer = 0; - showmapatpos(90, 22<<4, 32, 0, pCKP); + showmapatpos(90, 22<<4, 32, pCKP); do {