diff options
Diffstat (limited to 'saga/saga.cpp')
-rw-r--r-- | saga/saga.cpp | 250 |
1 files changed, 224 insertions, 26 deletions
diff --git a/saga/saga.cpp b/saga/saga.cpp index 9d3e11296b..729249a63b 100644 --- a/saga/saga.cpp +++ b/saga/saga.cpp @@ -1,24 +1,3 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2003 The ScummVM project - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Header$ - * - */ - #include "stdafx.h" #include "base/gameDetector.h" @@ -31,7 +10,26 @@ #include "saga.h" -#include "gamedesc.h" +#include "reinherit.h" + +#include "rscfile_mod.h" +#include "render_mod.h" +#include "actor_mod.h" +#include "animation_mod.h" +#include "console_mod.h" +#include "cvar_mod.h" +#include "events_mod.h" +#include "actionmap_mod.h" +#include "font_mod.h" +#include "game_mod.h" +#include "interface_mod.h" +#include "isomap_mod.h" +#include "script_mod.h" +#include "scene_mod.h" +#include "sndres_mod.h" +#include "sprite_mod.h" +#include "text_mod.h" +#include "objectmap_mod.h" struct SAGAGameSettings { const char *name; @@ -96,11 +94,24 @@ REGISTER_PLUGIN("SAGA Engine", Engine_SAGA_gameList, Engine_SAGA_create, Engine_ namespace Saga { +#define R_MAX_TIME_DELTA 100 + +typedef struct R_MAIN_DATA_tag { + + int sound_enabled; + int music_enabled; + +} R_MAIN_DATA; + +static void CF_quitfunc(int argc, char *argv[]); +static void CF_testfunc(int argc, char *argv[]); + +static R_MAIN_DATA MainData; + SagaEngine::SagaEngine(GameDetector *detector, OSystem *syst) : Engine(syst) { - setGameDirectory(getGameDataPath()); - openGame(); + GAME_setGameDirectory(getGameDataPath()); // Setup mixer if (!_mixer->isReady()) { @@ -110,7 +121,7 @@ SagaEngine::SagaEngine(GameDetector *detector, OSystem *syst) _mixer->setVolume(ConfMan.getInt("sfx_volume") * ConfMan.getInt("master_volume") / 255); // Initialize backend - syst->initSize(320, 240); + //syst->initSize(320, 240); } SagaEngine::~SagaEngine() { @@ -122,13 +133,200 @@ void SagaEngine::errorString(const char *buf1, char *buf2) { } void SagaEngine::go() { + int msec = 0; + + /* Register engine modules + * \*------------------------------------------------------------- */ + CON_Register(); /* Register console cvars first */ + + RENDER_Register(); + GAME_Register(); + + ANIM_Register(); + ACTIONMAP_Register(); + OBJECTMAP_Register(); + SCRIPT_Register(); + ACTOR_Register(); + SCENE_Register(); + + MainData.sound_enabled = 1; + + CVAR_RegisterFunc(CF_testfunc, + "testfunc", "foo [ optional foo ]", R_CVAR_NONE, 0, -1); + + CVAR_Register_I(&MainData.sound_enabled, + "sound", NULL, R_CVAR_CFG, 0, 1); + + CVAR_Register_I(&MainData.music_enabled, + "music", NULL, R_CVAR_CFG, 0, 1); + + CVAR_RegisterFunc(CF_quitfunc, "quit", NULL, R_CVAR_NONE, 0, 0); + + /* Process config file + * \*------------------------------------------------------------- */ + // FIXME + /* + if (CFG_Read(NULL) != R_SUCCESS) { + R_printf(R_STDERR, "Couldn't read configuration file.\n"); + } + */ + + /* Process command line + * \*------------------------------------------------------------- */ + + /* Detect game and open resource files + * \*------------------------------------------------------------- */ + if (GAME_Init() != R_SUCCESS) { + + R_printf(R_STDERR, + "Couldn't start the game: %s\n", GAME_GetErrS()); + + return; + } + + /* Initialize engine modules + * \*------------------------------------------------------------- */ + SND_Init(); + EVENT_Init(); + FONT_Init(); + SPRITE_Init(); + ANIM_Init(); + ACTIONMAP_Init(); + OBJECTMAP_Init(); + ISOMAP_Init(); + SCRIPT_Init(); + INTERFACE_Init(); /* requires script module */ + ACTOR_Init(); + + if (SCENE_Init() != R_SUCCESS) { + + R_printf(R_STDERR, "Couldn't initialize scene module.\n"); + return; + } + + /* System initialization + * \*------------------------------------------------------------- */ + + if (SYSIO_Init() != R_SUCCESS) { + + return; + } + + /* Must initialize system timer module first */ + if (SYSTIMER_InitMSCounter() != R_SUCCESS) { + + return; + } + + /* On some platforms, graphics initialization also initializes sound + * ( Win32 DirectX )... Music must be initialized before sound for + * native midi support */ + SYSMUSIC_Init(MainData.music_enabled); + if (!MainData.music_enabled) { + R_printf(R_STDOUT, "Music disabled.\n"); + } + /* Initialize graphics */ + if (RENDER_Init() != R_SUCCESS) { + return; + } + + /* Initialize system specific sound */ + SYSSOUND_Init(MainData.sound_enabled); + if (!MainData.sound_enabled) { + R_printf(R_STDOUT, "Sound disabled.\n"); + } + + SYSINPUT_Init(); + + SYSTIMER_ResetMSCounter(); + + /* Begin Main Engine Loop + * \*------------------------------------------------------------- */ + + SCENE_Start(); + + for (;;) { + +#ifdef R_USE_CUSTOM_WININIT + + if (ITESYS_CheckSignal()) { + break; + } +#endif + + if (RENDER_GetFlags() & RF_RENDERPAUSE) { + /* Freeze time while paused */ + SYSTIMER_ResetMSCounter(); + } else { + msec = SYSTIMER_ReadMSCounter(); + + if (msec > R_MAX_TIME_DELTA) { + msec = R_MAX_TIME_DELTA; + } + + ACTOR_Direct(msec); + EVENT_HandleEvents(msec); + STHREAD_ExecThreads(msec); + } + + /* Per frame processing + * \*--------------------------------------------------------- */ + RENDER_DrawScene(); + + SYSTIMER_Sleep(0); + } /* end main game engine loop */ + + R_Shutdown(0); + + return; } void SagaEngine::shutdown() { - _system->quit(); } +void R_Shutdown(int param) { + SCENE_Shutdown(); + ACTOR_Shutdown(); + SCRIPT_Shutdown(); + ANIM_Shutdown(); + SPRITE_Shutdown(); + OBJECTMAP_Shutdown(); + + FONT_Shutdown(); + + CON_Shutdown(); + CVAR_Shutdown(); + EVENT_Shutdown(); + + /* Shutdown system modules */ + SYSMUSIC_Shutdown(); + SYSSOUND_Shutdown(); + + SYSIO_Shutdown(); + + /* exit(param); */ +} + +static void CF_quitfunc(int argc, char *argv[]) +{ + R_Shutdown(0); + exit(0); +} + +static void CF_testfunc(int argc, char *argv[]) +{ + int i; + + CON_Print("Test function invoked: Got %d arguments.", argc); + + for (i = 0; i < argc; i++) { + CON_Print("Arg %d: %s", i, argv[i]); + } + + return; +} + } // End of namespace Saga |