o Moved GAME_* to SagaEngine object

o Renamed GAME_ITE_* to GID_ITE_*
o Renamed GID_ITE and GID_IHNM to GType_ITE and GType_IHNM

svn-id: r16258
This commit is contained in:
Eugene Sandulenko 2004-12-22 13:09:47 +00:00
parent eaa0f3b974
commit 2fb8a8e453
30 changed files with 228 additions and 322 deletions

View file

@ -28,7 +28,6 @@
#include "saga/console.h" #include "saga/console.h"
#include "saga/actionmap.h" #include "saga/actionmap.h"
#include "saga/game_mod.h"
#include "saga/stream.h" #include "saga/stream.h"
namespace Saga { namespace Saga {

View file

@ -24,7 +24,6 @@
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/game_mod.h"
#include "saga/console.h" #include "saga/console.h"
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/script.h" #include "saga/script.h"
@ -66,7 +65,7 @@ Actor::Actor(SagaEngine *vm) : _vm(vm) {
debug(9, "Actor::Actor()"); debug(9, "Actor::Actor()");
// Get actor resource file context // Get actor resource file context
_actorContext = GAME_GetFileContext(GAME_RESOURCEFILE, 0); _actorContext = _vm->getFileContext(GAME_RESOURCEFILE, 0);
if (_actorContext == NULL) { if (_actorContext == NULL) {
error("Actor::Actor(): Couldn't load actor module resource context."); error("Actor::Actor(): Couldn't load actor module resource context.");
} }

View file

@ -26,7 +26,6 @@
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/console.h" #include "saga/console.h"
#include "saga/game_mod.h"
#include "saga/events.h" #include "saga/events.h"
#include "saga/render.h" #include "saga/render.h"
@ -89,7 +88,7 @@ int Anim::load(const byte *anim_resdata, size_t anim_resdata_len, uint16 *anim_i
new_anim->resdata = anim_resdata; new_anim->resdata = anim_resdata;
new_anim->resdata_len = anim_resdata_len; new_anim->resdata_len = anim_resdata_len;
if (GAME_GetGameType() == GID_ITE) { if (_vm->_gameType == GType_ITE) {
if (getNumFrames(anim_resdata, anim_resdata_len, &new_anim->n_frames) != SUCCESS) { if (getNumFrames(anim_resdata, anim_resdata_len, &new_anim->n_frames) != SUCCESS) {
warning("Anim::load Couldn't get animation frame count"); warning("Anim::load Couldn't get animation frame count");
return FAILURE; return FAILURE;
@ -176,7 +175,7 @@ int Anim::play(uint16 anim_id, int vector_time) {
return FAILURE; return FAILURE;
} }
GAME_GetDisplayInfo(&disp_info); _vm->getDisplayInfo(&disp_info);
_vm->_render->getBufferInfo(&buf_info); _vm->_render->getBufferInfo(&buf_info);
display_buf = buf_info.bg_buf; display_buf = buf_info.bg_buf;
@ -191,7 +190,7 @@ int Anim::play(uint16 anim_id, int vector_time) {
if (anim->play_flag) { if (anim->play_flag) {
frame = anim->current_frame; frame = anim->current_frame;
if (GAME_GetGameType() == GID_ITE) { if (_vm->_gameType == GType_ITE) {
result = ITE_DecodeFrame(anim->resdata, anim->resdata_len, anim->frame_offsets[frame - 1], display_buf, result = ITE_DecodeFrame(anim->resdata, anim->resdata_len, anim->frame_offsets[frame - 1], display_buf,
disp_info.logical_w * disp_info.logical_h); disp_info.logical_w * disp_info.logical_h);
if (result != SUCCESS) { if (result != SUCCESS) {
@ -346,7 +345,7 @@ int Anim::freeId(uint16 anim_id) {
return FAILURE; return FAILURE;
} }
if (GAME_GetGameType() == GID_ITE) { if (_vm->_gameType == GType_ITE) {
free(anim->frame_offsets); free(anim->frame_offsets);
anim->frame_offsets = NULL; anim->frame_offsets = NULL;
} }
@ -385,7 +384,7 @@ int Anim::getNumFrames(const byte *anim_resource, size_t anim_resource_len, uint
ah.unknown07 = readS.readByte(); ah.unknown07 = readS.readByte();
ah.nframes = readS.readByte(); ah.nframes = readS.readByte();
if (GAME_GetGameType() == GID_IHNM) { if (_vm->_gameType == GType_IHNM) {
*n_frames = ah.nframes; *n_frames = ah.nframes;
} }
@ -618,7 +617,7 @@ int Anim::IHNM_DecodeFrame(byte *decode_buf, size_t decode_buf_len, const byte *
GAME_DISPLAYINFO di; GAME_DISPLAYINFO di;
GAME_GetDisplayInfo(&di); _vm->getDisplayInfo(&di);
*nextf_p = NULL; *nextf_p = NULL;

View file

@ -35,7 +35,6 @@
#include "saga/text.h" #include "saga/text.h"
#include "saga/palanim.h" #include "saga/palanim.h"
#include "saga/render.h" #include "saga/render.h"
#include "saga/game_mod.h"
#include "saga/sndres.h" #include "saga/sndres.h"
#include "saga/music.h" #include "saga/music.h"

View file

@ -26,7 +26,6 @@
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/game_mod.h"
#include "saga/font.h" #include "saga/font.h"
#include "saga/stream.h" #include "saga/stream.h"
@ -38,13 +37,13 @@ Font::Font(SagaEngine *vm) : _vm(vm), _initialized(false) {
int i; int i;
// Load font module resource context // Load font module resource context
_fontContext = GAME_GetFileContext(GAME_RESOURCEFILE, 0); _fontContext = _vm->getFileContext(GAME_RESOURCEFILE, 0);
if (_fontContext == NULL) { if (_fontContext == NULL) {
error("Font::Font(): Couldn't get resource context."); error("Font::Font(): Couldn't get resource context.");
} }
// Allocate font table // Allocate font table
GAME_GetFontInfo(&gamefonts, &_nFonts); _vm->getFontInfo(&gamefonts, &_nFonts);
assert(_nFonts > 0); assert(_nFonts > 0);

View file

@ -33,31 +33,30 @@
#include "saga/interface.h" #include "saga/interface.h"
#include "saga/scene.h" #include "saga/scene.h"
#include "saga/game_mod.h"
#include "saga/game.h" #include "saga/game.h"
namespace Saga { namespace Saga {
// Inherit the Earth - DOS Demo version // Inherit the Earth - DOS Demo version
GAME_FILEDESC ITEDEMO_GameFiles[] = { static GAME_FILEDESC ITEDEMO_GameFiles[] = {
{"ITE.RSC", GAME_RESOURCEFILE}, {"ITE.RSC", GAME_RESOURCEFILE},
{"ITE.DMO", GAME_DEMOFILE}, {"ITE.DMO", GAME_DEMOFILE},
{"SCRIPTS.RSC", GAME_SCRIPTFILE}, {"SCRIPTS.RSC", GAME_SCRIPTFILE},
{"VOICES.RSC", GAME_SOUNDFILE | GAME_VOICEFILE} {"VOICES.RSC", GAME_SOUNDFILE | GAME_VOICEFILE}
}; };
GAME_FONTDESC ITEDEMO_GameFonts[] = { static GAME_FONTDESC ITEDEMO_GameFonts[] = {
{GAME_FONT_SMALL, 0}, {GAME_FONT_SMALL, 0},
{GAME_FONT_MEDIUM, 1} {GAME_FONT_MEDIUM, 1}
}; };
GAME_SOUNDINFO ITEDEMO_GameSound = { static GAME_SOUNDINFO ITEDEMO_GameSound = {
GAME_SOUND_VOC, 0, 0, 0 GAME_SOUND_VOC, 0, 0, 0
}; };
// Inherit the Earth - MAC Wyrmkeep Demo version // Inherit the Earth - MAC Wyrmkeep Demo version
GAME_FILEDESC ITEMACDEMO_GameFiles[] = { static GAME_FILEDESC ITEMACDEMO_GameFiles[] = {
{"ITED.RSC", GAME_RESOURCEFILE}, {"ITED.RSC", GAME_RESOURCEFILE},
{"SCRIPTSD.RSC", GAME_SCRIPTFILE}, {"SCRIPTSD.RSC", GAME_SCRIPTFILE},
{"SOUNDSD.RSC", GAME_SOUNDFILE}, {"SOUNDSD.RSC", GAME_SOUNDFILE},
@ -65,13 +64,13 @@ GAME_FILEDESC ITEMACDEMO_GameFiles[] = {
{"MUSICD.RSC", GAME_MUSICFILE} {"MUSICD.RSC", GAME_MUSICFILE}
}; };
GAME_FONTDESC ITEMACDEMO_GameFonts[] = { static GAME_FONTDESC ITEMACDEMO_GameFonts[] = {
{GAME_FONT_MEDIUM, 0}, {GAME_FONT_MEDIUM, 0},
{GAME_FONT_SMALL, 2} {GAME_FONT_SMALL, 2}
}; };
// Inherit the Earth - win32 Wyrmkeep Linux Demo version // Inherit the Earth - win32 Wyrmkeep Linux Demo version
GAME_FILEDESC ITEWINDEMO_GameFiles[] = { static GAME_FILEDESC ITEWINDEMO_GameFiles[] = {
{"ITED.RSC", GAME_RESOURCEFILE}, {"ITED.RSC", GAME_RESOURCEFILE},
{"SCRIPTSD.RSC", GAME_SCRIPTFILE}, {"SCRIPTSD.RSC", GAME_SCRIPTFILE},
{"SOUNDSD.RSC", GAME_SOUNDFILE}, {"SOUNDSD.RSC", GAME_SOUNDFILE},
@ -79,13 +78,13 @@ GAME_FILEDESC ITEWINDEMO_GameFiles[] = {
{"MUSICD.RSC", GAME_MUSICFILE} {"MUSICD.RSC", GAME_MUSICFILE}
}; };
GAME_FONTDESC ITEWINDEMO_GameFonts[] = { static GAME_FONTDESC ITEWINDEMO_GameFonts[] = {
{GAME_FONT_MEDIUM, 0}, {GAME_FONT_MEDIUM, 0},
{GAME_FONT_SMALL, 2} {GAME_FONT_SMALL, 2}
}; };
// Inherit the Earth - win32 Wyrmkeep Demo version older release // Inherit the Earth - win32 Wyrmkeep Demo version older release
GAME_FILEDESC ITEWINDEMOOld_GameFiles[] = { static GAME_FILEDESC ITEWINDEMOOld_GameFiles[] = {
{"ITED.RSC", GAME_RESOURCEFILE}, {"ITED.RSC", GAME_RESOURCEFILE},
{"SCRIPTSD.RSC", GAME_SCRIPTFILE}, {"SCRIPTSD.RSC", GAME_SCRIPTFILE},
{"SOUNDSD.RSC", GAME_SOUNDFILE}, {"SOUNDSD.RSC", GAME_SOUNDFILE},
@ -93,45 +92,44 @@ GAME_FILEDESC ITEWINDEMOOld_GameFiles[] = {
}; };
// Inherit the Earth - Diskette version // Inherit the Earth - Diskette version
GAME_FILEDESC ITEDISK_GameFiles[] = { static GAME_FILEDESC ITEDISK_GameFiles[] = {
{"ITE.RSC", GAME_RESOURCEFILE}, {"ITE.RSC", GAME_RESOURCEFILE},
{"SCRIPTS.RSC", GAME_SCRIPTFILE}, {"SCRIPTS.RSC", GAME_SCRIPTFILE},
{"VOICES.RSC", GAME_SOUNDFILE | GAME_VOICEFILE} {"VOICES.RSC", GAME_SOUNDFILE | GAME_VOICEFILE}
}; };
GAME_FONTDESC ITEDISK_GameFonts[] = { static GAME_FONTDESC ITEDISK_GameFonts[] = {
{GAME_FONT_MEDIUM, 0}, {GAME_FONT_MEDIUM, 0},
{GAME_FONT_LARGE, 1}, {GAME_FONT_LARGE, 1},
{GAME_FONT_SMALL, 2} {GAME_FONT_SMALL, 2}
}; };
GAME_RESOURCEDESC ITE_Resources = { static GAME_RESOURCEDESC ITE_Resources = {
ITE_SCENE_LUT, // Scene lookup table RN ITE_SCENE_LUT, // Scene lookup table RN
ITE_SCRIPT_LUT, // Script lookup table RN ITE_SCRIPT_LUT, // Script lookup table RN
ITE_COMMAND_PANEL, ITE_COMMAND_PANEL,
ITE_DIALOGUE_PANEL ITE_DIALOGUE_PANEL
}; };
static GAME_SOUNDINFO ITE_GameSound = {
GAME_SOUNDINFO ITE_GameSound = {
GAME_SOUND_VOC, 0, 0, 0 GAME_SOUND_VOC, 0, 0, 0
}; };
// Inherit the Earth - CD Enhanced version // Inherit the Earth - CD Enhanced version
GAME_FILEDESC ITECD_GameFiles[] = { static GAME_FILEDESC ITECD_GameFiles[] = {
{"ITE.RSC", GAME_RESOURCEFILE}, {"ITE.RSC", GAME_RESOURCEFILE},
{"SCRIPTS.RSC", GAME_SCRIPTFILE}, {"SCRIPTS.RSC", GAME_SCRIPTFILE},
{"SOUNDS.RSC", GAME_SOUNDFILE}, {"SOUNDS.RSC", GAME_SOUNDFILE},
{"VOICES.RSC", GAME_VOICEFILE} {"VOICES.RSC", GAME_VOICEFILE}
}; };
GAME_FONTDESC ITECD_GameFonts[] = { static GAME_FONTDESC ITECD_GameFonts[] = {
{GAME_FONT_MEDIUM, 0}, {GAME_FONT_MEDIUM, 0},
{GAME_FONT_LARGE, 1}, {GAME_FONT_LARGE, 1},
{GAME_FONT_SMALL, 2} {GAME_FONT_SMALL, 2}
}; };
GAME_SOUNDINFO ITECD_GameSound = { static GAME_SOUNDINFO ITECD_GameSound = {
GAME_SOUND_PCM, GAME_SOUND_PCM,
22050, 22050,
16, 16,
@ -139,7 +137,7 @@ GAME_SOUNDINFO ITECD_GameSound = {
}; };
// I Have No Mouth and I Must Scream - Demo version // I Have No Mouth and I Must Scream - Demo version
GAME_FILEDESC IHNMDEMO_GameFiles[] = { static GAME_FILEDESC IHNMDEMO_GameFiles[] = {
{"SCREAM.RES", GAME_RESOURCEFILE}, {"SCREAM.RES", GAME_RESOURCEFILE},
{"SCRIPTS.RES", GAME_SCRIPTFILE}, {"SCRIPTS.RES", GAME_SCRIPTFILE},
{"SFX.RES", GAME_SOUNDFILE}, {"SFX.RES", GAME_SOUNDFILE},
@ -147,7 +145,7 @@ GAME_FILEDESC IHNMDEMO_GameFiles[] = {
}; };
// I Have No Mouth and I Must Scream - Retail CD version // I Have No Mouth and I Must Scream - Retail CD version
GAME_FILEDESC IHNMCD_GameFiles[] = { static GAME_FILEDESC IHNMCD_GameFiles[] = {
{"MUSICFM.RES", GAME_MUSICFILE_FM}, {"MUSICFM.RES", GAME_MUSICFILE_FM},
{"MUSICGM.RES", GAME_MUSICFILE_GM}, {"MUSICGM.RES", GAME_MUSICFILE_GM},
{"SCREAM.RES", GAME_RESOURCEFILE}, {"SCREAM.RES", GAME_RESOURCEFILE},
@ -162,7 +160,7 @@ GAME_FILEDESC IHNMCD_GameFiles[] = {
{"VOICESS.RES", GAME_VOICEFILE} {"VOICESS.RES", GAME_VOICEFILE}
}; };
GAME_FONTDESC IHNMCD_GameFonts[] = { static GAME_FONTDESC IHNMCD_GameFonts[] = {
{GAME_FONT_MEDIUM, 2}, {GAME_FONT_MEDIUM, 2},
{GAME_FONT_LARGE, 3}, {GAME_FONT_LARGE, 3},
{GAME_FONT_SMALL, 4}, {GAME_FONT_SMALL, 4},
@ -172,23 +170,23 @@ GAME_FONTDESC IHNMCD_GameFonts[] = {
{GAME_FONT_LARGE3, 8} {GAME_FONT_LARGE3, 8}
}; };
GAME_RESOURCEDESC IHNM_Resources = { static GAME_RESOURCEDESC IHNM_Resources = {
IHNM_SCENE_LUT, // Scene lookup table RN IHNM_SCENE_LUT, // Scene lookup table RN
IHNM_SCRIPT_LUT, // Script lookup table RN IHNM_SCRIPT_LUT, // Script lookup table RN
IHNM_COMMAND_PANEL, IHNM_COMMAND_PANEL,
IHNM_DIALOGUE_PANEL IHNM_DIALOGUE_PANEL
}; };
GAME_SOUNDINFO IHNM_GameSound = { static GAME_SOUNDINFO IHNM_GameSound = {
GAME_SOUND_WAV, 0, 0, 0 GAME_SOUND_WAV, 0, 0, 0
}; };
GAMEDESC GameDescs[] = { static GAMEDESC GameDescs[] = {
// Inherit the earth - DOS Demo version // Inherit the earth - DOS Demo version
{ {
"ite-demo", "ite-demo",
GID_ITE, GType_ITE,
GAME_ITE_DEMO, // Game id GID_ITE_DEMO, // Game id
"Inherit the Earth (DOS Demo)", // Game title "Inherit the Earth (DOS Demo)", // Game title
320, 200, // Logical resolution 320, 200, // Logical resolution
137, // Scene viewport height 137, // Scene viewport height
@ -206,8 +204,8 @@ GAMEDESC GameDescs[] = {
// Note: it should be before win32 version ??? // Note: it should be before win32 version ???
{ {
"ite-demo", "ite-demo",
GID_ITE, GType_ITE,
GAME_ITE_MACDEMO, GID_ITE_MACDEMO,
"Inherit the Earth (MAC Demo)", "Inherit the Earth (MAC Demo)",
320, 200, 320, 200,
137, 137,
@ -225,8 +223,8 @@ GAMEDESC GameDescs[] = {
// Note: it should be before win32 version // Note: it should be before win32 version
{ {
"ite-demo", "ite-demo",
GID_ITE, GType_ITE,
GAME_ITE_WINDEMO, GID_ITE_WINDEMO,
"Inherit the Earth (Linux Demo)", "Inherit the Earth (Linux Demo)",
320, 200, 320, 200,
137, 137,
@ -243,8 +241,8 @@ GAMEDESC GameDescs[] = {
// Inherit the earth - Win32 Demo version // Inherit the earth - Win32 Demo version
{ {
"ite-demo", "ite-demo",
GID_ITE, GType_ITE,
GAME_ITE_WINDEMO, GID_ITE_WINDEMO,
"Inherit the Earth (Win32 Demo)", "Inherit the Earth (Win32 Demo)",
320, 200, 320, 200,
137, 137,
@ -262,8 +260,8 @@ GAMEDESC GameDescs[] = {
// NOTE: it should be before floppy version // NOTE: it should be before floppy version
{ {
"ite", "ite",
GID_ITE, GType_ITE,
GAME_ITE_CD, GID_ITE_CD,
"Inherit the Earth (DOS CD Version)", "Inherit the Earth (DOS CD Version)",
320, 200, 320, 200,
137, 137,
@ -280,8 +278,8 @@ GAMEDESC GameDescs[] = {
// Inherit the earth - Disk version // Inherit the earth - Disk version
{ {
"ite", "ite",
GID_ITE, GType_ITE,
GAME_ITE_DISK, GID_ITE_DISK,
"Inherit the Earth (DOS)", "Inherit the Earth (DOS)",
320, 200, 320, 200,
137, 137,
@ -298,8 +296,8 @@ GAMEDESC GameDescs[] = {
// I Have No Mouth And I Must Scream - Demo version // I Have No Mouth And I Must Scream - Demo version
{ {
"ihnm-demo", "ihnm-demo",
GID_IHNM, GType_IHNM,
GAME_IHNM_DEMO, GID_IHNM_DEMO,
"I Have No Mouth and I Must Scream (DOS Demo)", "I Have No Mouth and I Must Scream (DOS Demo)",
640, 480, 640, 480,
7, 7,
@ -316,8 +314,8 @@ GAMEDESC GameDescs[] = {
// I Have No Mouth And I Must Scream - CD version // I Have No Mouth And I Must Scream - CD version
{ {
"ihnm", "ihnm",
GID_IHNM, GType_IHNM,
GAME_IHNM_CD, GID_IHNM_CD,
"I Have No Mouth and I Must Scream (DOS)", "I Have No Mouth and I Must Scream (DOS)",
640, 480, 640, 480,
7, 7,
@ -334,26 +332,26 @@ GAMEDESC GameDescs[] = {
static GAMEMODULE GameModule; static GAMEMODULE GameModule;
int GAME_Init() { int SagaEngine::initGame() {
uint16 game_n; uint16 game_n;
if (DetectGame(&game_n) != SUCCESS) { if (detectGame(&game_n) != SUCCESS) {
warning("No valid games were found in the specified directory."); warning("No valid games were found in the specified directory.");
return FAILURE; return FAILURE;
} }
if (LoadGame(game_n) != SUCCESS) { if (loadGame(game_n) != SUCCESS) {
warning("Error loading game resource files."); warning("Error loading game resource files.");
return FAILURE; return FAILURE;
} }
// Load dialogue file // Load dialogue file
LoadLanguage(); loadLanguage();
return SUCCESS; return SUCCESS;
} }
int LoadLanguage() { int SagaEngine::loadLanguage() {
char lang_file[MAXPATH]; char lang_file[MAXPATH];
uint16 game_n; uint16 game_n;
@ -361,7 +359,7 @@ int LoadLanguage() {
game_n = GameModule.game_number; game_n = GameModule.game_number;
if (GameDescs[game_n].gd_game_type == GID_ITE) { if (GameDescs[game_n].gd_game_type == GType_ITE) {
snprintf(lang_file, MAXPATH, "%s%s.%s", GAME_ITE_LANG_PREFIX, GameModule.game_language, GAME_LANG_EXT); snprintf(lang_file, MAXPATH, "%s%s.%s", GAME_ITE_LANG_PREFIX, GameModule.game_language, GAME_LANG_EXT);
if (!test_file.open(lang_file)) { if (!test_file.open(lang_file)) {
debug(0, "Couldn't open language file %s. Using default (US English)", lang_file); debug(0, "Couldn't open language file %s. Using default (US English)", lang_file);
@ -390,7 +388,7 @@ int LoadLanguage() {
return SUCCESS; return SUCCESS;
} }
RSCFILE_CONTEXT *GAME_GetFileContext(uint16 type, int param) { RSCFILE_CONTEXT *SagaEngine::getFileContext(uint16 type, int param) {
RSCFILE_CONTEXT *found_ctxt = NULL; RSCFILE_CONTEXT *found_ctxt = NULL;
uint16 i; uint16 i;
@ -452,7 +450,7 @@ DetectedGameList GAME_ProbeGame(const FSList &fslist) {
return detectedGames; return detectedGames;
} }
int DetectGame(uint16 *game_n_p) { int SagaEngine::detectGame(uint16 *game_n_p) {
uint16 game_count = ARRAYSIZE(GameDescs); uint16 game_count = ARRAYSIZE(GameDescs);
uint16 game_n; uint16 game_n;
@ -493,7 +491,7 @@ int DetectGame(uint16 *game_n_p) {
return FAILURE; return FAILURE;
} }
int LoadGame(uint16 game_n) { int SagaEngine::loadGame(uint16 game_n) {
RSCFILE_CONTEXT *load_ctxt; RSCFILE_CONTEXT *load_ctxt;
uint16 game_count = ARRAYSIZE(GameDescs); uint16 game_count = ARRAYSIZE(GameDescs);
const char *game_fname; const char *game_fname;
@ -534,37 +532,26 @@ int LoadGame(uint16 game_n) {
GameModule.gd_fontct = GameDescs[game_n].gd_fontct; GameModule.gd_fontct = GameDescs[game_n].gd_fontct;
GameModule.gd_fontdescs = GameDescs[game_n].gd_fontdescs; GameModule.gd_fontdescs = GameDescs[game_n].gd_fontdescs;
// Finish initialization _gameId = GameModule.gamedesc->gd_game_id;
GameModule.game_init = 1; _gameType = GameModule.gamedesc->gd_game_type;
_features = GameModule.gamedesc->features;
return SUCCESS; return SUCCESS;
} }
int GAME_GetResourceInfo(GAME_RESOURCEDESC *rsc_desc) { const GAME_RESOURCEDESC SagaEngine::getResourceInfo(void) {
assert(rsc_desc != NULL); return *GameModule.gamedesc->gd_resource_desc;
*rsc_desc = *GameModule.gamedesc->gd_resource_desc;
return SUCCESS;
} }
int GAME_GetSoundInfo(GAME_SOUNDINFO *snd_info) { const GAME_SOUNDINFO SagaEngine::getSoundInfo(void) {
assert(snd_info != NULL); return *GameModule.gamedesc->gd_soundinfo;
*snd_info = *GameModule.gamedesc->gd_soundinfo;
return SUCCESS;
} }
int GAME_GetDisplayInfo(GAME_DISPLAYINFO *disp_info) { int SagaEngine::getDisplayInfo(GAME_DISPLAYINFO *disp_info) {
int game_n; int game_n;
assert(disp_info != NULL); assert(disp_info != NULL);
if (!GameModule.game_init) {
return FAILURE;
}
game_n = GameModule.game_number; game_n = GameModule.game_number;
disp_info->logical_w = GameDescs[game_n].gd_logical_w; disp_info->logical_w = GameDescs[game_n].gd_logical_w;
@ -574,7 +561,7 @@ int GAME_GetDisplayInfo(GAME_DISPLAYINFO *disp_info) {
return SUCCESS; return SUCCESS;
} }
int GAME_GetFontInfo(GAME_FONTDESC **gf_desc, int *font_n) { int SagaEngine::getFontInfo(GAME_FONTDESC **gf_desc, int *font_n) {
assert((gf_desc != NULL) && (font_n != NULL)); assert((gf_desc != NULL) && (font_n != NULL));
*gf_desc = GameModule.gd_fontdescs; *gf_desc = GameModule.gd_fontdescs;
@ -583,7 +570,7 @@ int GAME_GetFontInfo(GAME_FONTDESC **gf_desc, int *font_n) {
return SUCCESS; return SUCCESS;
} }
int GAME_GetSceneInfo(GAME_SCENEDESC *gs_desc) { int SagaEngine::getSceneInfo(GAME_SCENEDESC *gs_desc) {
assert(gs_desc != NULL); assert(gs_desc != NULL);
gs_desc->first_scene = GameModule.gamedesc->gd_startscene; gs_desc->first_scene = GameModule.gamedesc->gd_startscene;
@ -592,16 +579,4 @@ int GAME_GetSceneInfo(GAME_SCENEDESC *gs_desc) {
return SUCCESS; return SUCCESS;
} }
GAME_IDS GAME_GetGame() {
return GameModule.gamedesc->gd_game_id;
}
SAGAGameId GAME_GetGameType() {
return GameModule.gamedesc->gd_game_type;
}
uint32 GAME_GetFeatures() {
return GameModule.gamedesc->features;
}
} // End of namespace Saga } // End of namespace Saga

View file

@ -26,7 +26,7 @@
#ifndef SAGA_GAME_H_ #ifndef SAGA_GAME_H_
#define SAGA_GAME_H_ #define SAGA_GAME_H_
#include "base/plugins.h" #include "saga/saga.h"
namespace Saga { namespace Saga {
@ -47,7 +47,7 @@ struct GAME_FILEDESC {
struct GAMEDESC { struct GAMEDESC {
const char *name; const char *name;
SAGAGameId gd_game_type; SAGAGameType gd_game_type;
GAME_IDS gd_game_id; GAME_IDS gd_game_id;
const char *gd_title; const char *gd_title;
int gd_logical_w; int gd_logical_w;
@ -75,7 +75,6 @@ struct GAME_FILEDATA {
}; };
struct GAMEMODULE { struct GAMEMODULE {
int game_init;
int game_number; int game_number;
GAMEDESC *gamedesc; GAMEDESC *gamedesc;
int g_skipintro; int g_skipintro;
@ -88,9 +87,7 @@ struct GAMEMODULE {
const char *err_str; const char *err_str;
}; };
int LoadLanguage(); DetectedGameList GAME_ProbeGame(const FSList &fslist);
int LoadGame(uint16 game_n_p);
int DetectGame(uint16 *game_n_p);
} // End of namespace Saga } // End of namespace Saga

View file

@ -1,124 +0,0 @@
/* ScummVM - Scumm Interpreter
* Copyright (C) 2004 The ScummVM project
*
* The ReInherit Engine is (C)2000-2003 by Daniel Balsom.
*
* 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$
*
*/
// Game detection, general game parameters - module header
#ifndef SAGA_GAME_MOD_H__
#define SAGA_GAME_MOD_H__
#include "base/plugins.h"
namespace Saga {
#define IS_BIG_ENDIAN ((GAME_GetFeatures() & GF_BIG_ENDIAN_DATA) != 0)
#define IS_MAC_VERSION (GAME_GetGame() == GAME_ITE_MACDEMO)
enum GAME_IDS {
GAME_ITE_DEMO = 0,
GAME_ITE_DISK = 1,
GAME_ITE_CD = 2,
GAME_IHNM_DEMO = 3,
GAME_IHNM_CD = 4,
GAME_ITE_WINDEMO = 5,
GAME_ITE_MACDEMO = 6
};
enum GAME_FILETYPES {
GAME_RESOURCEFILE = 0x01,
GAME_SCRIPTFILE = 0x02,
GAME_SOUNDFILE = 0x04,
GAME_VOICEFILE = 0x08,
GAME_DEMOFILE = 0x10,
GAME_MUSICFILE = 0x20,
GAME_MUSICFILE_GM = 0x40,
GAME_MUSICFILE_FM = 0x80
};
enum GAME_SOUNDINFO_TYPES {
GAME_SOUND_PCM = 0,
GAME_SOUND_VOC,
GAME_SOUND_WAV,
GAME_SOUND_VOX
};
enum GAME_FONT_IDS {
GAME_FONT_SMALL = 0,
GAME_FONT_MEDIUM,
GAME_FONT_LARGE,
GAME_FONT_SMALL2,
GAME_FONT_MEDIUM2,
GAME_FONT_LARGE2,
GAME_FONT_LARGE3
};
enum GAME_FEATURES {
GF_VOX_VOICES = 1,
GF_BIG_ENDIAN_DATA = 2
};
struct GAME_DISPLAYINFO {
int logical_w;
int logical_h;
int scene_h;
};
struct GAME_SOUNDINFO {
int res_type;
long freq;
int sample_size;
int stereo;
};
struct GAME_FONTDESC {
uint16 font_id;
uint32 font_rn;
};
struct GAME_SCENEDESC {
uint32 scene_lut_rn;
uint32 first_scene;
};
struct GAME_RESOURCEDESC {
uint32 scene_lut_rn;
uint32 script_lut_rn;
uint32 command_panel_rn;
uint32 dialogue_panel_rn;
};
int GAME_Register();
int GAME_Init();
RSCFILE_CONTEXT *GAME_GetFileContext(uint16 type, int param);
int GAME_GetFontInfo(GAME_FONTDESC **, int *);
int GAME_GetResourceInfo(GAME_RESOURCEDESC *);
int GAME_GetSoundInfo(GAME_SOUNDINFO *);
int GAME_GetDisplayInfo(GAME_DISPLAYINFO *);
int GAME_GetSceneInfo(GAME_SCENEDESC *);
GAME_IDS GAME_GetGame();
SAGAGameId GAME_GetGameType();
DetectedGameList GAME_ProbeGame(const FSList &fslist);
uint32 GAME_GetFeatures();
} // End of namespace Saga
#endif

View file

@ -105,7 +105,7 @@ int Scene::IHNMStartProc() {
// it will cause the end titles music to play, which is wrong. (But // it will cause the end titles music to play, which is wrong. (But
// hey, it's a nice piece of music!) // hey, it's a nice piece of music!)
GAME_GetSceneInfo(&gs_desc); _vm->getSceneInfo(&gs_desc);
first_scene.load_flag = BY_SCENE; first_scene.load_flag = BY_SCENE;
first_scene.scene_n = gs_desc.first_scene; first_scene.scene_n = gs_desc.first_scene;

View file

@ -24,8 +24,6 @@
// SAGA Image resource management routines // SAGA Image resource management routines
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/game_mod.h"
#include "saga/image.h" #include "saga/image.h"
#include "saga/stream.h" #include "saga/stream.h"
@ -94,7 +92,7 @@ int SagaEngine::decodeBGImage(const byte *image_data, size_t image_size,
unbankBGImage(out_buf, decode_buf, hdr.width, hdr.height); unbankBGImage(out_buf, decode_buf, hdr.width, hdr.height);
// For some reason bg images in IHNM are upside down // For some reason bg images in IHNM are upside down
if (GAME_GetGameType() == GID_IHNM) { if (_vm->_gameType == GType_IHNM) {
flipImage(out_buf, hdr.width, hdr.height); flipImage(out_buf, hdr.width, hdr.height);
} }

View file

@ -25,7 +25,6 @@
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/game_mod.h"
#include "saga/actor.h" #include "saga/actor.h"
#include "saga/console.h" #include "saga/console.h"
#include "saga/font.h" #include "saga/font.h"
@ -164,7 +163,6 @@ int Interface::registerLang(void) {
Interface::Interface(SagaEngine *vm) : _vm(vm), _initialized(false) { Interface::Interface(SagaEngine *vm) : _vm(vm), _initialized(false) {
GAME_RESOURCEDESC g_resdesc; GAME_RESOURCEDESC g_resdesc;
int game_type;
int result; int result;
if (_initialized) { if (_initialized) {
@ -178,20 +176,19 @@ Interface::Interface(SagaEngine *vm) : _vm(vm), _initialized(false) {
} }
// Load interface module resource file context // Load interface module resource file context
_interfaceContext = GAME_GetFileContext(GAME_RESOURCEFILE, 0); _interfaceContext = _vm->getFileContext(GAME_RESOURCEFILE, 0);
if (_interfaceContext == NULL) { if (_interfaceContext == NULL) {
return; return;
} }
// Initialize interface data by game type // Initialize interface data by game type
game_type = GAME_GetGameType(); if (_vm->_gameType == GType_ITE) {
if (game_type == GID_ITE) {
// Load Inherit the Earth interface desc // Load Inherit the Earth interface desc
_cPanel.buttons = ITE_c_buttons; _cPanel.buttons = ITE_c_buttons;
_cPanel.nbuttons = ARRAYSIZE(ITE_c_buttons); _cPanel.nbuttons = ARRAYSIZE(ITE_c_buttons);
_iDesc = ITE_interface; _iDesc = ITE_interface;
} else if (game_type == GID_IHNM) { } else if (_vm->_gameType == GType_IHNM) {
// Load I Have No Mouth interface desc // Load I Have No Mouth interface desc
_cPanel.buttons = IHNM_c_buttons; _cPanel.buttons = IHNM_c_buttons;
_cPanel.nbuttons = ARRAYSIZE(IHNM_c_buttons); _cPanel.nbuttons = ARRAYSIZE(IHNM_c_buttons);
@ -201,7 +198,7 @@ Interface::Interface(SagaEngine *vm) : _vm(vm), _initialized(false) {
} }
// Load interface resources // Load interface resources
GAME_GetResourceInfo(&g_resdesc); g_resdesc = _vm->getResourceInfo();
// Load command panel resource // Load command panel resource
result = RSC_LoadResource(_interfaceContext, g_resdesc.command_panel_rn, result = RSC_LoadResource(_interfaceContext, g_resdesc.command_panel_rn,
@ -330,7 +327,7 @@ int Interface::draw() {
} }
// Get game display info // Get game display info
GAME_GetDisplayInfo(&g_di); _vm->getDisplayInfo(&g_di);
drawStatusBar(back_buf); drawStatusBar(back_buf);
@ -390,7 +387,7 @@ int Interface::update(const Point& imousePt, int update_flag) {
back_buf = _vm->_gfx->getBackBuffer(); back_buf = _vm->_gfx->getBackBuffer();
// Get game display info // Get game display info
GAME_GetDisplayInfo(&g_di); _vm->getDisplayInfo(&g_di);
if (_panelMode == kPanelCommand) { if (_panelMode == kPanelCommand) {
// Update playfield space ( only if cursor is inside ) // Update playfield space ( only if cursor is inside )
@ -425,12 +422,12 @@ int Interface::drawStatusBar(SURFACE *ds) {
// Disable this for IHNM for now, since that game uses the full screen // Disable this for IHNM for now, since that game uses the full screen
// in some cases. // in some cases.
if (GAME_GetGameType() == GID_IHNM) { if (_vm->_gameType == GType_IHNM) {
return SUCCESS; return SUCCESS;
} }
// Get game display info // Get game display info
GAME_GetDisplayInfo(&g_di); _vm->getDisplayInfo(&g_di);
// Erase background of status bar // Erase background of status bar
rect.left = 0; rect.left = 0;

View file

@ -24,7 +24,6 @@
// Isometric level module // Isometric level module
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/game_mod.h"
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/isomap.h" #include "saga/isomap.h"
@ -134,7 +133,8 @@ int IsoMap::loadMetamap(const byte *mm_res_p, size_t mm_res_len) {
int IsoMap::draw(SURFACE *dst_s) { int IsoMap::draw(SURFACE *dst_s) {
GAME_DISPLAYINFO disp_info; GAME_DISPLAYINFO disp_info;
GAME_GetDisplayInfo(&disp_info);
_vm->getDisplayInfo(&disp_info);
Rect iso_rect(disp_info.logical_w, disp_info.scene_h); Rect iso_rect(disp_info.logical_w, disp_info.scene_h);
drawRect(dst_s, &iso_rect, 0); drawRect(dst_s, &iso_rect, 0);
drawMetamap(dst_s, -1000, -500); drawMetamap(dst_s, -1000, -500);

View file

@ -30,7 +30,6 @@
#include "saga/animation.h" #include "saga/animation.h"
#include "saga/events.h" #include "saga/events.h"
#include "saga/font.h" #include "saga/font.h"
#include "saga/game_mod.h"
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/sndres.h" #include "saga/sndres.h"
#include "saga/text.h" #include "saga/text.h"
@ -137,7 +136,7 @@ int Scene::ITEStartProc() {
_vm->_scene->queueScene(&tempScene); _vm->_scene->queueScene(&tempScene);
} }
GAME_GetSceneInfo(&gs_desc); _vm->getSceneInfo(&gs_desc);
first_scene.load_flag = BY_SCENE; first_scene.load_flag = BY_SCENE;
first_scene.scene_n = gs_desc.first_scene; first_scene.scene_n = gs_desc.first_scene;

View file

@ -24,7 +24,6 @@
#include "saga/music.h" #include "saga/music.h"
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/game_mod.h"
#include "saga/stream.h" #include "saga/stream.h"
#include "sound/audiostream.h" #include "sound/audiostream.h"
#include "sound/mididrv.h" #include "sound/mididrv.h"
@ -298,7 +297,7 @@ Music::Music(SoundMixer *mixer, MidiDriver *driver, int enabled) : _mixer(mixer)
_musicInitialized = 1; _musicInitialized = 1;
_mixer->setMusicVolume(ConfMan.getInt("music_volume")); _mixer->setMusicVolume(ConfMan.getInt("music_volume"));
if (GAME_GetGameType() == GID_ITE) { if (_vm->_gameType == GType_ITE) {
File file; File file;
byte footerBuf[ARRAYSIZE(_digiTableITECD) * 8]; byte footerBuf[ARRAYSIZE(_digiTableITECD) * 8];
@ -314,7 +313,7 @@ Music::Music(SoundMixer *mixer, MidiDriver *driver, int enabled) : _mixer(mixer)
// Proper approach would be to extend resource manager so it could // Proper approach would be to extend resource manager so it could
// return File object. // return File object.
_musicContext = GAME_GetFileContext(GAME_MUSICFILE, 0); _musicContext = _vm->getFileContext(GAME_MUSICFILE, 0);
if (_musicContext != NULL) { if (_musicContext != NULL) {
_hasDigiMusic = true; _hasDigiMusic = true;
@ -407,7 +406,7 @@ int Music::play(uint32 music_rn, uint16 flags) {
MidiParser *parser; MidiParser *parser;
File midiFile; File midiFile;
if (GAME_GetGameType() == GID_ITE) { if (_vm->_gameType == GType_ITE) {
if (music_rn >= 9 && music_rn <= 34) { if (music_rn >= 9 && music_rn <= 34) {
if (flags == MUSIC_DEFAULT) { if (flags == MUSIC_DEFAULT) {
flags = _midiTableITECD[music_rn - 9].flags; flags = _midiTableITECD[music_rn - 9].flags;
@ -457,8 +456,8 @@ int Music::play(uint32 music_rn, uint16 flags) {
} else { } else {
// Load MIDI/XMI resource data // Load MIDI/XMI resource data
if (GAME_GetGameType() == GID_ITE) { if (_vm->_gameType == GType_ITE) {
rsc_ctxt = GAME_GetFileContext(GAME_RESOURCEFILE, 0); rsc_ctxt = _vm->getFileContext(GAME_RESOURCEFILE, 0);
} else { } else {
// I've listened to music from both the FM and the GM // I've listened to music from both the FM and the GM
// file, and I've tentatively reached the conclusion // file, and I've tentatively reached the conclusion
@ -484,9 +483,9 @@ int Music::play(uint32 music_rn, uint16 flags) {
// different in the two files. I have no idea why. // different in the two files. I have no idea why.
if (hasAdlib()) { if (hasAdlib()) {
rsc_ctxt = GAME_GetFileContext(GAME_MUSICFILE_FM, 0); rsc_ctxt = _vm->getFileContext(GAME_MUSICFILE_FM, 0);
} else { } else {
rsc_ctxt = GAME_GetFileContext(GAME_MUSICFILE_GM, 0); rsc_ctxt = _vm->getFileContext(GAME_MUSICFILE_GM, 0);
} }
_player->setGM(true); _player->setGM(true);

View file

@ -27,7 +27,6 @@
#define SAGA_MUSIC_H_ #define SAGA_MUSIC_H_
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/game_mod.h"
#include "sound/mixer.h" #include "sound/mixer.h"
#include "sound/mididrv.h" #include "sound/mididrv.h"
#include "sound/midiparser.h" #include "sound/midiparser.h"

View file

@ -32,7 +32,6 @@
#include "saga/console.h" #include "saga/console.h"
#include "saga/font.h" #include "saga/font.h"
#include "saga/objectmap.h" #include "saga/objectmap.h"
#include "saga/game_mod.h"
#include "saga/stream.h" #include "saga/stream.h"
namespace Saga { namespace Saga {

View file

@ -26,7 +26,6 @@
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/events.h" #include "saga/events.h"
#include "saga/game_mod.h"
#include "saga/palanim.h" #include "saga/palanim.h"
#include "saga/stream.h" #include "saga/stream.h"
@ -57,7 +56,7 @@ int PalAnim::loadPalAnim(const byte *resdata, size_t resdata_len) {
MemoryReadStreamEndian readS(resdata, resdata_len, IS_BIG_ENDIAN); MemoryReadStreamEndian readS(resdata, resdata_len, IS_BIG_ENDIAN);
if (GAME_GetGameType() == GID_IHNM) { if (_vm->_gameType == GType_IHNM) {
return SUCCESS; return SUCCESS;
} }

View file

@ -27,7 +27,6 @@
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/actor.h" #include "saga/actor.h"
#include "saga/font.h" #include "saga/font.h"
#include "saga/game_mod.h"
#include "saga/interface.h" #include "saga/interface.h"
#include "saga/scene.h" #include "saga/scene.h"
#include "saga/text.h" #include "saga/text.h"
@ -51,7 +50,7 @@ Render::Render(SagaEngine *vm, OSystem *system) {
int tmp_w, tmp_h, tmp_bytepp; int tmp_w, tmp_h, tmp_bytepp;
// Initialize system graphics // Initialize system graphics
GAME_GetDisplayInfo(&disp_info); _vm->getDisplayInfo(&disp_info);
// Initialize FPS timer callback // Initialize FPS timer callback
g_timer->installTimerProc(&fpsTimerCallback, 1000000, this); g_timer->installTimerProc(&fpsTimerCallback, 1000000, this);
@ -119,7 +118,7 @@ int Render::drawScene() {
mouse_pt = _vm->getMousePos(); mouse_pt = _vm->getMousePos();
_vm->_scene->getBGInfo(&bg_info); _vm->_scene->getBGInfo(&bg_info);
GAME_GetDisplayInfo(&disp_info); _vm->getDisplayInfo(&disp_info);
bg_pt.x = 0; bg_pt.x = 0;
bg_pt.y = 0; bg_pt.y = 0;

View file

@ -26,7 +26,6 @@
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/rscfile.h" #include "saga/rscfile.h"
#include "saga/game_mod.h"
#include "saga/stream.h" #include "saga/stream.h"
namespace Saga { namespace Saga {

View file

@ -40,7 +40,6 @@
#include "saga/console.h" #include "saga/console.h"
#include "saga/events.h" #include "saga/events.h"
#include "saga/font.h" #include "saga/font.h"
#include "saga/game_mod.h"
#include "saga/game.h" #include "saga/game.h"
#include "saga/interface.h" #include "saga/interface.h"
#include "saga/isomap.h" #include "saga/isomap.h"
@ -51,7 +50,6 @@
#include "saga/sprite.h" #include "saga/sprite.h"
#include "saga/sound.h" #include "saga/sound.h"
#include "saga/music.h" #include "saga/music.h"
#include "saga/game_mod.h"
#include "saga/palanim.h" #include "saga/palanim.h"
static const GameSettings saga_games[] = { static const GameSettings saga_games[] = {
@ -142,7 +140,7 @@ int SagaEngine::init(GameDetector &detector) {
// Process command line // Process command line
// Detect game and open resource files // Detect game and open resource files
if (GAME_Init() != SUCCESS) { if (initGame() != SUCCESS) {
return -1; return -1;
} }
@ -171,7 +169,7 @@ int SagaEngine::init(GameDetector &detector) {
// Initialize graphics // Initialize graphics
GAME_DISPLAYINFO disp_info; GAME_DISPLAYINFO disp_info;
GAME_GetDisplayInfo(&disp_info); getDisplayInfo(&disp_info);
_gfx = new Gfx(_system, disp_info.logical_w, disp_info.logical_h, detector); _gfx = new Gfx(_system, disp_info.logical_w, disp_info.logical_h, detector);
// Graphics driver should be initialized before console // Graphics driver should be initialized before console

View file

@ -28,6 +28,8 @@
#include "common/scummsys.h" #include "common/scummsys.h"
#include "base/engine.h" #include "base/engine.h"
#include "base/gameDetector.h" #include "base/gameDetector.h"
#include "base/plugins.h"
#include "common/util.h" #include "common/util.h"
#include "common/stream.h" #include "common/stream.h"
#include "common/rect.h" #include "common/rect.h"
@ -72,9 +74,9 @@ enum ERRORCODE {
SUCCESS = 0 SUCCESS = 0
}; };
enum SAGAGameId { enum SAGAGameType {
GID_ITE, GType_ITE,
GID_IHNM GType_IHNM
}; };
enum scriptTimings { enum scriptTimings {
@ -86,6 +88,84 @@ struct CLICKAREA {
Point *points; Point *points;
}; };
#define IS_BIG_ENDIAN ((_vm->_features & GF_BIG_ENDIAN_DATA) != 0)
#define IS_MAC_VERSION (_vm->_gameId == GID_ITE_MACDEMO)
enum GAME_IDS {
GID_ITE_DEMO = 0,
GID_ITE_DISK = 1,
GID_ITE_CD = 2,
GID_IHNM_DEMO = 3,
GID_IHNM_CD = 4,
GID_ITE_WINDEMO = 5,
GID_ITE_MACDEMO = 6
};
enum GAME_FILETYPES {
GAME_RESOURCEFILE = 0x01,
GAME_SCRIPTFILE = 0x02,
GAME_SOUNDFILE = 0x04,
GAME_VOICEFILE = 0x08,
GAME_DEMOFILE = 0x10,
GAME_MUSICFILE = 0x20,
GAME_MUSICFILE_GM = 0x40,
GAME_MUSICFILE_FM = 0x80
};
enum GAME_SOUNDINFO_TYPES {
GAME_SOUND_PCM = 0,
GAME_SOUND_VOC,
GAME_SOUND_WAV,
GAME_SOUND_VOX
};
enum GAME_FONT_IDS {
GAME_FONT_SMALL = 0,
GAME_FONT_MEDIUM,
GAME_FONT_LARGE,
GAME_FONT_SMALL2,
GAME_FONT_MEDIUM2,
GAME_FONT_LARGE2,
GAME_FONT_LARGE3
};
enum GAME_FEATURES {
GF_VOX_VOICES = 1,
GF_BIG_ENDIAN_DATA = 2
};
struct GAME_DISPLAYINFO {
int logical_w;
int logical_h;
int scene_h;
};
struct GAME_SOUNDINFO {
int res_type;
long freq;
int sample_size;
int stereo;
};
struct GAME_FONTDESC {
uint16 font_id;
uint32 font_rn;
};
struct GAME_SCENEDESC {
uint32 scene_lut_rn;
uint32 first_scene;
};
struct GAME_RESOURCEDESC {
uint32 scene_lut_rn;
uint32 script_lut_rn;
uint32 command_panel_rn;
uint32 dialogue_panel_rn;
};
inline int ticksToMSec(int tick) { inline int ticksToMSec(int tick) {
return tick * 1000 / kScriptTimeTicksPerSecond; return tick * 1000 / kScriptTimeTicksPerSecond;
} }
@ -106,6 +186,10 @@ public:
int _soundEnabled; int _soundEnabled;
int _musicEnabled; int _musicEnabled;
int _gameId;
int _gameType;
uint32 _features;
SndRes *_sndRes; SndRes *_sndRes;
Sound *_sound; Sound *_sound;
Music *_music; Music *_music;
@ -159,8 +243,23 @@ public:
int processInput(void); int processInput(void);
Point getMousePos(); Point getMousePos();
private: private:
Point _mousePos; Point _mousePos;
public:
int initGame();
RSCFILE_CONTEXT *getFileContext(uint16 type, int param);
int getFontInfo(GAME_FONTDESC **, int *);
const GAME_RESOURCEDESC getResourceInfo(void);
const GAME_SOUNDINFO getSoundInfo(void);
int getDisplayInfo(GAME_DISPLAYINFO *disp_info);
int getSceneInfo(GAME_SCENEDESC *);
private:
int loadLanguage();
int loadGame(uint16 game_n_p);
int detectGame(uint16 *game_n_p);
}; };
// FIXME: Global var. We use it until everything will be turned into objects // FIXME: Global var. We use it until everything will be turned into objects

View file

@ -25,7 +25,6 @@
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/game_mod.h"
#include "saga/animation.h" #include "saga/animation.h"
#include "saga/console.h" #include "saga/console.h"
#include "saga/interface.h" #include "saga/interface.h"
@ -55,10 +54,10 @@ Scene::Scene(SagaEngine *vm) : _vm(vm), _initialized(false) {
int i; int i;
// Load game-specific scene data // Load game-specific scene data
GAME_GetSceneInfo(&gs_desc); _vm->getSceneInfo(&gs_desc);
// Load scene module resource context // Load scene module resource context
_sceneContext = GAME_GetFileContext(GAME_RESOURCEFILE, 0); _sceneContext = _vm->getFileContext(GAME_RESOURCEFILE, 0);
if (_sceneContext == NULL) { if (_sceneContext == NULL) {
warning("Scene::Scene(): Couldn't load scene resource context"); warning("Scene::Scene(): Couldn't load scene resource context");
return; return;
@ -173,11 +172,11 @@ int Scene::startScene() {
event.op = EVENT_HIDE; event.op = EVENT_HIDE;
_vm->_events->queue(&event); _vm->_events->queue(&event);
switch (GAME_GetGameType()) { switch (_vm->_gameType) {
case GID_ITE: case GType_ITE:
ITEStartProc(); ITEStartProc();
break; break;
case GID_IHNM: case GType_IHNM:
IHNMStartProc(); IHNMStartProc();
break; break;
default: default:
@ -334,7 +333,7 @@ int Scene::getBGInfo(SCENE_BGINFO *bginfo) {
bginfo->bg_h = _bg.h; bginfo->bg_h = _bg.h;
bginfo->bg_p = _bg.p; bginfo->bg_p = _bg.p;
GAME_GetDisplayInfo(&di); _vm->getDisplayInfo(&di);
x = 0; x = 0;
y = 0; y = 0;
@ -784,7 +783,7 @@ int Scene::draw(SURFACE *dst_s) {
assert(_initialized); assert(_initialized);
_vm->_render->getBufferInfo(&buf_info); _vm->_render->getBufferInfo(&buf_info);
GAME_GetDisplayInfo(&disp_info); _vm->getDisplayInfo(&disp_info);
bg_pt.x = 0; bg_pt.x = 0;
bg_pt.y = 0; bg_pt.y = 0;

View file

@ -26,7 +26,6 @@
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/game_mod.h"
#include "saga/console.h" #include "saga/console.h"
#include "saga/script.h" #include "saga/script.h"
@ -55,17 +54,17 @@ Script::Script() {
_skipSpeeches = false; _skipSpeeches = false;
memset(_dataBuf, 0, sizeof(_dataBuf)); memset(_dataBuf, 0, sizeof(_dataBuf));
GAME_GetResourceInfo(&gr_desc); gr_desc = _vm->getResourceInfo();
debug(0, "Initializing scripting subsystem"); debug(0, "Initializing scripting subsystem");
// Load script resource file context // Load script resource file context
_scriptContext = GAME_GetFileContext(GAME_SCRIPTFILE, 0); _scriptContext = _vm->getFileContext(GAME_SCRIPTFILE, 0);
if (_scriptContext == NULL) { if (_scriptContext == NULL) {
error("Couldn't get script file context"); error("Couldn't get script file context");
} }
// Load script LUT resource // Load script LUT resource
s_lut_ctxt = GAME_GetFileContext(GAME_RESOURCEFILE, 0); s_lut_ctxt = _vm->getFileContext(GAME_RESOURCEFILE, 0);
if (s_lut_ctxt == NULL) { if (s_lut_ctxt == NULL) {
error("Couldn't get resource file context"); error("Couldn't get resource file context");
} }
@ -156,7 +155,7 @@ int Script::loadScript(int script_num) {
uint32 voicelut_rn; uint32 voicelut_rn;
int result; int result;
if (GAME_GetGameType() == GID_IHNM) { if (_vm->_gameType == GType_IHNM) {
return SUCCESS; return SUCCESS;
} }

View file

@ -30,7 +30,6 @@
#include "saga/font.h" #include "saga/font.h"
#include "saga/script.h" #include "saga/script.h"
#include "saga/game_mod.h"
#include "saga/stream.h" #include "saga/stream.h"
namespace Saga { namespace Saga {

View file

@ -25,7 +25,6 @@
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/game_mod.h"
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/sndres.h" #include "saga/sndres.h"
@ -40,18 +39,18 @@ namespace Saga {
SndRes::SndRes(SagaEngine *vm) : _vm(vm) { SndRes::SndRes(SagaEngine *vm) : _vm(vm) {
/* Load sound module resource file contexts */ /* Load sound module resource file contexts */
_sfx_ctxt = GAME_GetFileContext(GAME_SOUNDFILE, 0); _sfx_ctxt = _vm->getFileContext(GAME_SOUNDFILE, 0);
if (_sfx_ctxt == NULL) { if (_sfx_ctxt == NULL) {
return; return;
} }
_voice_ctxt = GAME_GetFileContext(GAME_VOICEFILE, 0); _voice_ctxt = _vm->getFileContext(GAME_VOICEFILE, 0);
if (_voice_ctxt == NULL) { if (_voice_ctxt == NULL) {
return; return;
} }
// Grab sound resource information for the current game // Grab sound resource information for the current game
GAME_GetSoundInfo(&_snd_info); _snd_info = _vm->getSoundInfo();
_init = 1; _init = 1;
} }
@ -78,7 +77,7 @@ int SndRes::playVoice(uint32 voice_rn) {
debug(0, "SndRes::playVoice(%ld)", voice_rn); debug(0, "SndRes::playVoice(%ld)", voice_rn);
if (GAME_GetGameType() == GID_ITE && voice_rn == 4) { if (_vm->_gameType == GType_ITE && voice_rn == 4) {
// The Wyrmkeep release of Inherit the Earth provides a // The Wyrmkeep release of Inherit the Earth provides a
// separate file (p2_a.voc or P2_A.iaf), to correct voice 4 in // separate file (p2_a.voc or P2_A.iaf), to correct voice 4 in
// the intro. Use that, if available. // the intro. Use that, if available.
@ -122,7 +121,7 @@ int SndRes::playVoice(uint32 voice_rn) {
return FAILURE; return FAILURE;
} }
if (GAME_GetFeatures() & GF_VOX_VOICES && !voiceFile) if (_vm->_features & GF_VOX_VOICES && !voiceFile)
_vm->_sound->playVoxVoice(&snd_buffer); _vm->_sound->playVoxVoice(&snd_buffer);
else else
_vm->_sound->playVoice(&snd_buffer); _vm->_sound->playVoice(&snd_buffer);
@ -274,7 +273,7 @@ int SndRes::getVoiceLength(uint32 voice_rn) {
// (p2_a.voc or P2_A.iaf), to correct voice 4 in the intro. Use that, // (p2_a.voc or P2_A.iaf), to correct voice 4 in the intro. Use that,
// if available. // if available.
if (GAME_GetGameType() == GID_ITE && voice_rn == 4) { if (_vm->_gameType == GType_ITE && voice_rn == 4) {
if (f.open("p2_a.voc")) { if (f.open("p2_a.voc")) {
result = SUCCESS; result = SUCCESS;
length = f.size(); length = f.size();
@ -298,7 +297,7 @@ int SndRes::getVoiceLength(uint32 voice_rn) {
} }
} }
if (GAME_GetFeatures() & GF_VOX_VOICES && !voiceFile) { if (_vm->_features & GF_VOX_VOICES && !voiceFile) {
// Rough hack, fix this to be accurate // Rough hack, fix this to be accurate
ms_f = (double)length / 22050 * 2000.0; ms_f = (double)length / 22050 * 2000.0;
ms_i = (int)ms_f; ms_i = (int)ms_f;

View file

@ -27,7 +27,6 @@
#define SAGA_SNDRES_H_ #define SAGA_SNDRES_H_
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/game_mod.h"
#include "saga/sound.h" #include "saga/sound.h"
namespace Saga { namespace Saga {

View file

@ -23,7 +23,6 @@
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/sound.h" #include "saga/sound.h"
#include "saga/game_mod.h"
#include "sound/audiostream.h" #include "sound/audiostream.h"
#include "sound/mixer.h" #include "sound/mixer.h"
@ -172,19 +171,6 @@ int Sound::playSoundBuffer(PlayingSoundHandle *handle, SOUNDBUFFER *buf, int vol
if (!buf->s_signed) if (!buf->s_signed)
flags |= SoundMixer::FLAG_UNSIGNED; flags |= SoundMixer::FLAG_UNSIGNED;
// FIXME: Remove the code below if the code above works.
#if 0
int game_id = GAME_GetGame();
if((game_id == GAME_ITE_DISK) || (game_id == GAME_ITE_DEMO)) {
flags = SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE;
} else {
flags = SoundMixer::FLAG_AUTOFREE | SoundMixer::FLAG_16BITS |
SoundMixer::FLAG_LITTLE_ENDIAN;
}
#endif
_mixer->playRaw(handle, buf->s_buf, buf->s_buf_len, buf->s_freq, flags, -1, volume); _mixer->playRaw(handle, buf->s_buf, buf->s_buf_len, buf->s_freq, flags, -1, volume);
return SUCCESS; return SUCCESS;

View file

@ -27,7 +27,6 @@
#define SAGA_SOUND_H_ #define SAGA_SOUND_H_
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
#include "saga/game_mod.h"
#include "sound/mixer.h" #include "sound/mixer.h"
namespace Saga { namespace Saga {

View file

@ -24,7 +24,6 @@
// Sprite management module // Sprite management module
#include "saga/saga.h" #include "saga/saga.h"
#include "saga/game_mod.h"
#include "saga/gfx.h" #include "saga/gfx.h"
#include "saga/scene.h" #include "saga/scene.h"
#include "saga/rscfile_mod.h" #include "saga/rscfile_mod.h"
@ -41,7 +40,7 @@ Sprite::Sprite(SagaEngine *vm) : _vm(vm), _initialized(false) {
debug(0, "Initializing sprite subsystem..."); debug(0, "Initializing sprite subsystem...");
// Load sprite module resource context // Load sprite module resource context
_spriteContext = GAME_GetFileContext(GAME_RESOURCEFILE, 0); _spriteContext = _vm->getFileContext(GAME_RESOURCEFILE, 0);
if (_spriteContext == NULL) { if (_spriteContext == NULL) {
return; return;
} }

View file

@ -31,7 +31,6 @@
#include "saga/script.h" #include "saga/script.h"
#include "saga/sdata.h" #include "saga/sdata.h"
#include "saga/game_mod.h"
#include "saga/stream.h" #include "saga/stream.h"
#include "saga/scene.h" #include "saga/scene.h"
#include "saga/resnames.h" #include "saga/resnames.h"
@ -763,7 +762,7 @@ int Script::SThreadRun(SCRIPT_THREAD *thread, int instr_limit) {
} }
// now data contains last string index // now data contains last string index
if (GAME_GetGame() == GAME_ITE_DISK) { // special ITE dos if (_vm->_gameId == GID_ITE_DISK) { // special ITE dos
if ((_vm->_scene->currentSceneNumber() == ITE_DEFAULT_SCENE) && (data >= 288) && (data <= (SCENE1_VOICE_138 - SCENE1_VOICE_009 + 288))) { if ((_vm->_scene->currentSceneNumber() == ITE_DEFAULT_SCENE) && (data >= 288) && (data <= (SCENE1_VOICE_138 - SCENE1_VOICE_009 + 288))) {
sampleResourceId = SCENE1_VOICE_009 + data - 288; sampleResourceId = SCENE1_VOICE_009 + data - 288;
} }