aboutsummaryrefslogtreecommitdiff
path: root/sword2/sword2.cpp
diff options
context:
space:
mode:
authorTorbjörn Andersson2003-11-08 15:47:51 +0000
committerTorbjörn Andersson2003-11-08 15:47:51 +0000
commit688c80b0620ae5765355a4048864bb3de84ebf74 (patch)
tree497d8efc73b08f5a4d58c45c52b7a6bafa1975ff /sword2/sword2.cpp
parentb04ddef7506bfa08527da9e79040c583fb765b2e (diff)
downloadscummvm-rg350-688c80b0620ae5765355a4048864bb3de84ebf74.tar.gz
scummvm-rg350-688c80b0620ae5765355a4048864bb3de84ebf74.tar.bz2
scummvm-rg350-688c80b0620ae5765355a4048864bb3de84ebf74.zip
Moved more stuff into classes, changed some static allocation to dynamic,
and removed some of the references to global variables. At this point I believe everything in the main game engine has been moved into classes - not necessarily the correct ones, but still... However, there is some stuff in the driver directory that need to be taken care of as well. svn-id: r11207
Diffstat (limited to 'sword2/sword2.cpp')
-rw-r--r--sword2/sword2.cpp143
1 files changed, 61 insertions, 82 deletions
diff --git a/sword2/sword2.cpp b/sword2/sword2.cpp
index d3909b8024..20fcad672b 100644
--- a/sword2/sword2.cpp
+++ b/sword2/sword2.cpp
@@ -75,7 +75,7 @@ GameList Engine_SWORD2_detectGames(const FSList &fslist) {
const GameSettings *g;
// TODO: It would be nice if we had code here which distinguishes between
- // the 'sword2' and Ôsword2demoÔ targets. The current code can't do that
+ // the 'sword2' and 'sword2demo' targets. The current code can't do that
// since they use the same detectname.
for (g = sword2_settings; g->gameName; ++g) {
@@ -101,12 +101,6 @@ REGISTER_PLUGIN("Broken Sword II", Engine_SWORD2_gameList, Engine_SWORD2_create,
namespace Sword2 {
-uint8 quitGame = 0;
-
-uint8 gamePaused = 0;
-uint8 graphics_level_fudged = 0;
-uint8 stepOneCycle = 0; // for use while game paused
-
Sword2Engine *g_sword2 = NULL;
Sound *g_sound = NULL;
Display *g_display = NULL;
@@ -137,12 +131,12 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst)
// away
memory = new MemoryManager();
- res_man = new ResourceManager();
- g_logic = new Logic();
+ res_man = new ResourceManager(this);
+ g_logic = new Logic(this);
+ fontRenderer = new FontRenderer();
+ gui = new Gui(this);
g_sound = _sound = new Sound(_mixer);
g_display = _display = new Display(640, 480);
- gui = new Gui();
-
_debugger = new Debugger(this);
_lastPaletteRes = 0;
@@ -189,14 +183,19 @@ Sword2Engine::Sword2Engine(GameDetector *detector, OSystem *syst)
// used to be a define, but now it's flexible
_scrollFraction = 16;
+
+ _gamePaused = false;
+ _stepOneCycle = false;
+ _graphicsLevelFudged = false;
}
Sword2Engine::~Sword2Engine() {
free(_targetName);
- delete _sound;
- delete _display;
delete _debugger;
+ delete _display;
+ delete _sound;
delete gui;
+ delete fontRenderer;
delete g_logic;
delete res_man;
delete memory;
@@ -243,12 +242,6 @@ int32 Sword2Engine::InitialiseGame(void) {
debug(5, "CALLING: initialiseFontResourceFlags");
initialiseFontResourceFlags();
- debug(5, "CALLING: Init_sync_system");
- Init_sync_system();
-
- debug(5, "CALLING: Init_event_system");
- initEventSystem();
-
// initialise the sound fx queue
debug(5, "CALLING: Init_fx_queue");
@@ -263,16 +256,13 @@ int32 Sword2Engine::InitialiseGame(void) {
return 0;
}
-void Close_game() {
- debug(5, "Close_game() STARTING:");
-
+void Sword2Engine::closeGame(void) {
// Stop music instantly!
- g_sword2->killMusic();
-
+ killMusic();
g_system->quit();
}
-int32 GameCycle(void) {
+void Sword2Engine::gameCycle(void) {
// do one game cycle
// got a screen to run?
@@ -281,34 +271,29 @@ int32 GameCycle(void) {
do {
// reset the graphic 'buildit' list before a new
// logic list (see fnRegisterFrame)
- g_sword2->resetRenderLists();
+ resetRenderLists();
// reset the mouse hot-spot list (see fnRegisterMouse
// and fnRegisterFrame)
- g_sword2->resetMouseList();
+ resetMouseList();
// keep going as long as new lists keep getting put in
// - i.e. screen changes
} while (g_logic->processSession());
} else {
// start the console and print the start options perhaps?
- g_sword2->_debugger->attach("AWAITING START COMMAND: (Enter 's 1' then 'q' to start from beginning)");
+ _debugger->attach("AWAITING START COMMAND: (Enter 's 1' then 'q' to start from beginning)");
}
// if this screen is wide, recompute the scroll offsets every cycle
- if (g_sword2->_thisScreen.scroll_flag)
- g_sword2->setScrolling();
+ if (_thisScreen.scroll_flag)
+ setScrolling();
- g_sword2->mouseEngine();
- g_sword2->processFxQueue();
+ mouseEngine();
+ processFxQueue();
// update age and calculate previous cycle memory usage
res_man->nextCycle();
-
- if (quitGame)
- return 1;
-
- return 0;
}
void Sword2Engine::go() {
@@ -327,7 +312,7 @@ void Sword2Engine::go() {
debug(5, "CALLING: InitialiseGame");
if (InitialiseGame()) {
- Close_game();
+ closeGame();
return;
}
@@ -337,10 +322,10 @@ void Sword2Engine::go() {
else { // show restore menu
setMouse(NORMAL_MOUSE_ID);
if (!gui->restoreControl())
- Start_game();
+ startGame();
}
} else
- Start_game();
+ startGame();
debug(5, "CALLING: initialiseRenderCycle");
g_display->initialiseRenderCycle();
@@ -370,9 +355,9 @@ void Sword2Engine::go() {
// if we've just stepped forward one cycle while the
// game was paused
- if (stepOneCycle) {
- PauseGame();
- stepOneCycle = 0;
+ if (_stepOneCycle) {
+ pauseGame();
+ _stepOneCycle = false;
}
#endif
@@ -390,10 +375,10 @@ void Sword2Engine::go() {
if (c == '~' || c == '#')
_debugger->attach();
- if (gamePaused) { // if currently paused
+ if (_gamePaused) { // if currently paused
if (c == 'P') {
// 'P' while paused = unpause!
- UnpauseGame();
+ unpauseGame();
}
#ifdef _SWORD2_DEBUG
// frame-skipping only allowed on
@@ -402,13 +387,13 @@ void Sword2Engine::go() {
else if (c == ' ') {
// SPACE bar while paused =
// step one frame!
- stepOneCycle = 1;
- UnpauseGame();
+ _stepOneCycle = true;
+ unpauseGame();
}
#endif
} else if (c == 'P') {
// 'P' while not paused = pause!
- PauseGame();
+ pauseGame();
} else if (c == 'C' && !(_features & GF_DEMO)) {
g_logic->fnPlayCredits(NULL);
}
@@ -422,15 +407,11 @@ void Sword2Engine::go() {
}
// skip GameCycle if we're paused
- if (gamePaused == 0) {
+ if (!_gamePaused) {
#ifdef _SWORD2_DEBUG
_gameCycle++;
#endif
-
- if (GameCycle()) {
- // break out of main game loop
- break;
- }
+ gameCycle();
}
// creates the debug text blocks
@@ -441,24 +422,22 @@ void Sword2Engine::go() {
// display once every 4 game-cycles
if (console_status || !_renderSkip || (_gameCycle % 4) == 0)
- g_sword2->buildDisplay(); // create and flip the screen
+ buildDisplay(); // create and flip the screen
#else
// create and flip the screen
- g_sword2->buildDisplay();
+ buildDisplay();
#endif
}
- Close_game(); //close engine systems down
-
- return; //quit the game
+ closeGame(); // close engine systems down
}
-void Sword2Engine::Start_game(void) {
+void Sword2Engine::startGame(void) {
// boot the game straight into a start script
int screen_manager_id;
- debug(5, "Start_game() STARTING:");
+ debug(5, "startGame() STARTING:");
// all demos not just web
if (_features & GF_DEMO)
@@ -495,14 +474,14 @@ void Sword2Engine::Start_game(void) {
// close george
res_man->closeResource(8);
- debug(5, "Start_game() DONE.");
+ debug(5, "startGame() DONE.");
}
// FIXME: Move this to some better place?
-void sleepUntil(int32 time) {
+void Sword2Engine::sleepUntil(int32 time) {
while ((int32) SVM_timeGetTime() < time) {
- g_sword2->parseEvents();
+ parseEvents();
// Make sure menu animations and fades don't suffer
g_display->processMenu();
@@ -512,7 +491,7 @@ void sleepUntil(int32 time) {
}
}
-void PauseGame(void) {
+void Sword2Engine::pauseGame(void) {
// uint8 *text;
// open text file & get the line "PAUSED"
@@ -525,10 +504,10 @@ void PauseGame(void) {
if (g_display->getFadeStatus() != RDFADE_NONE)
return;
- g_sword2->pauseAllSound();
+ pauseAllSound();
// make a normal mouse
- g_sword2->clearPointerText();
+ clearPointerText();
// mouse_mode=MOUSE_normal;
@@ -536,52 +515,52 @@ void PauseGame(void) {
g_display->setLuggageAnim(NULL, 0);
// blank cursor
- g_sword2->setMouse(0);
+ setMouse(0);
// forces engine to choose a cursor
- g_sword2->_mouseTouching = 1;
+ _mouseTouching = 1;
// if level at max, turn down because palette-matching won't work
// when dimmed
if (gui->_currentGraphicsLevel == 3) {
gui->updateGraphicsLevel(2);
- graphics_level_fudged = 1;
+ _graphicsLevelFudged = true;
}
// don't dim it if we're single-stepping through frames
// dim the palette during the pause
- if (stepOneCycle == 0)
+ if (!_stepOneCycle)
g_display->dimPalette();
- gamePaused = 1;
+ _gamePaused = true;
}
-void UnpauseGame(void) {
+void Sword2Engine::unpauseGame(void) {
// removed "PAUSED" from screen
// Kill_text_bloc(pause_text_bloc_no);
- if (OBJECT_HELD && g_sword2->_realLuggageItem)
- g_sword2->setLuggage(g_sword2->_realLuggageItem);
+ if (OBJECT_HELD && _realLuggageItem)
+ setLuggage(_realLuggageItem);
- g_sword2->unpauseAllSound();
+ unpauseAllSound();
// put back game screen palette; see Build_display.cpp
- g_sword2->setFullPalette(0xffffffff);
+ setFullPalette(0xffffffff);
// If graphics level at max, turn up again
- if (graphics_level_fudged) {
+ if (_graphicsLevelFudged) {
gui->updateGraphicsLevel(3);
- graphics_level_fudged = 0;
+ _graphicsLevelFudged = false;
}
- gamePaused = 0;
+ _gamePaused = false;
g_logic->_unpauseZone = 2;
// if mouse is about or we're in a chooser menu
- if (!g_sword2->_mouseStatus || g_logic->_choosing)
- g_sword2->setMouse(NORMAL_MOUSE_ID);
+ if (!_mouseStatus || g_logic->_choosing)
+ setMouse(NORMAL_MOUSE_ID);
}
} // End of namespace Sword2