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/actionmap.h"
#include "saga/game_mod.h"
#include "saga/stream.h"
namespace Saga {

View File

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

View File

@ -26,7 +26,6 @@
#include "saga/gfx.h"
#include "saga/console.h"
#include "saga/game_mod.h"
#include "saga/events.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_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) {
warning("Anim::load Couldn't get animation frame count");
return FAILURE;
@ -176,7 +175,7 @@ int Anim::play(uint16 anim_id, int vector_time) {
return FAILURE;
}
GAME_GetDisplayInfo(&disp_info);
_vm->getDisplayInfo(&disp_info);
_vm->_render->getBufferInfo(&buf_info);
display_buf = buf_info.bg_buf;
@ -191,7 +190,7 @@ int Anim::play(uint16 anim_id, int vector_time) {
if (anim->play_flag) {
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,
disp_info.logical_w * disp_info.logical_h);
if (result != SUCCESS) {
@ -346,7 +345,7 @@ int Anim::freeId(uint16 anim_id) {
return FAILURE;
}
if (GAME_GetGameType() == GID_ITE) {
if (_vm->_gameType == GType_ITE) {
free(anim->frame_offsets);
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.nframes = readS.readByte();
if (GAME_GetGameType() == GID_IHNM) {
if (_vm->_gameType == GType_IHNM) {
*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_GetDisplayInfo(&di);
_vm->getDisplayInfo(&di);
*nextf_p = NULL;

View File

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

View File

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

View File

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

View File

@ -26,7 +26,7 @@
#ifndef SAGA_GAME_H_
#define SAGA_GAME_H_
#include "base/plugins.h"
#include "saga/saga.h"
namespace Saga {
@ -47,7 +47,7 @@ struct GAME_FILEDESC {
struct GAMEDESC {
const char *name;
SAGAGameId gd_game_type;
SAGAGameType gd_game_type;
GAME_IDS gd_game_id;
const char *gd_title;
int gd_logical_w;
@ -75,7 +75,6 @@ struct GAME_FILEDATA {
};
struct GAMEMODULE {
int game_init;
int game_number;
GAMEDESC *gamedesc;
int g_skipintro;
@ -88,9 +87,7 @@ struct GAMEMODULE {
const char *err_str;
};
int LoadLanguage();
int LoadGame(uint16 game_n_p);
int DetectGame(uint16 *game_n_p);
DetectedGameList GAME_ProbeGame(const FSList &fslist);
} // 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
// hey, it's a nice piece of music!)
GAME_GetSceneInfo(&gs_desc);
_vm->getSceneInfo(&gs_desc);
first_scene.load_flag = BY_SCENE;
first_scene.scene_n = gs_desc.first_scene;

View File

@ -24,8 +24,6 @@
// SAGA Image resource management routines
#include "saga/saga.h"
#include "saga/game_mod.h"
#include "saga/image.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);
// 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);
}

View File

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

View File

@ -24,7 +24,6 @@
// Isometric level module
#include "saga/saga.h"
#include "saga/game_mod.h"
#include "saga/gfx.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) {
GAME_DISPLAYINFO disp_info;
GAME_GetDisplayInfo(&disp_info);
_vm->getDisplayInfo(&disp_info);
Rect iso_rect(disp_info.logical_w, disp_info.scene_h);
drawRect(dst_s, &iso_rect, 0);
drawMetamap(dst_s, -1000, -500);

View File

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

View File

@ -24,7 +24,6 @@
#include "saga/music.h"
#include "saga/rscfile_mod.h"
#include "saga/game_mod.h"
#include "saga/stream.h"
#include "sound/audiostream.h"
#include "sound/mididrv.h"
@ -298,7 +297,7 @@ Music::Music(SoundMixer *mixer, MidiDriver *driver, int enabled) : _mixer(mixer)
_musicInitialized = 1;
_mixer->setMusicVolume(ConfMan.getInt("music_volume"));
if (GAME_GetGameType() == GID_ITE) {
if (_vm->_gameType == GType_ITE) {
File file;
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
// return File object.
_musicContext = GAME_GetFileContext(GAME_MUSICFILE, 0);
_musicContext = _vm->getFileContext(GAME_MUSICFILE, 0);
if (_musicContext != NULL) {
_hasDigiMusic = true;
@ -407,7 +406,7 @@ int Music::play(uint32 music_rn, uint16 flags) {
MidiParser *parser;
File midiFile;
if (GAME_GetGameType() == GID_ITE) {
if (_vm->_gameType == GType_ITE) {
if (music_rn >= 9 && music_rn <= 34) {
if (flags == MUSIC_DEFAULT) {
flags = _midiTableITECD[music_rn - 9].flags;
@ -457,8 +456,8 @@ int Music::play(uint32 music_rn, uint16 flags) {
} else {
// Load MIDI/XMI resource data
if (GAME_GetGameType() == GID_ITE) {
rsc_ctxt = GAME_GetFileContext(GAME_RESOURCEFILE, 0);
if (_vm->_gameType == GType_ITE) {
rsc_ctxt = _vm->getFileContext(GAME_RESOURCEFILE, 0);
} else {
// I've listened to music from both the FM and the GM
// 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.
if (hasAdlib()) {
rsc_ctxt = GAME_GetFileContext(GAME_MUSICFILE_FM, 0);
rsc_ctxt = _vm->getFileContext(GAME_MUSICFILE_FM, 0);
} else {
rsc_ctxt = GAME_GetFileContext(GAME_MUSICFILE_GM, 0);
rsc_ctxt = _vm->getFileContext(GAME_MUSICFILE_GM, 0);
}
_player->setGM(true);

View File

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

View File

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

View File

@ -26,7 +26,6 @@
#include "saga/gfx.h"
#include "saga/events.h"
#include "saga/game_mod.h"
#include "saga/palanim.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);
if (GAME_GetGameType() == GID_IHNM) {
if (_vm->_gameType == GType_IHNM) {
return SUCCESS;
}

View File

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

View File

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

View File

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

View File

@ -28,6 +28,8 @@
#include "common/scummsys.h"
#include "base/engine.h"
#include "base/gameDetector.h"
#include "base/plugins.h"
#include "common/util.h"
#include "common/stream.h"
#include "common/rect.h"
@ -72,9 +74,9 @@ enum ERRORCODE {
SUCCESS = 0
};
enum SAGAGameId {
GID_ITE,
GID_IHNM
enum SAGAGameType {
GType_ITE,
GType_IHNM
};
enum scriptTimings {
@ -86,6 +88,84 @@ struct CLICKAREA {
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) {
return tick * 1000 / kScriptTimeTicksPerSecond;
}
@ -106,6 +186,10 @@ public:
int _soundEnabled;
int _musicEnabled;
int _gameId;
int _gameType;
uint32 _features;
SndRes *_sndRes;
Sound *_sound;
Music *_music;
@ -159,8 +243,23 @@ public:
int processInput(void);
Point getMousePos();
private:
private:
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

View File

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

View File

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

View File

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

View File

@ -25,7 +25,6 @@
#include "saga/saga.h"
#include "saga/game_mod.h"
#include "saga/rscfile_mod.h"
#include "saga/sndres.h"
@ -40,18 +39,18 @@ namespace Saga {
SndRes::SndRes(SagaEngine *vm) : _vm(vm) {
/* Load sound module resource file contexts */
_sfx_ctxt = GAME_GetFileContext(GAME_SOUNDFILE, 0);
_sfx_ctxt = _vm->getFileContext(GAME_SOUNDFILE, 0);
if (_sfx_ctxt == NULL) {
return;
}
_voice_ctxt = GAME_GetFileContext(GAME_VOICEFILE, 0);
_voice_ctxt = _vm->getFileContext(GAME_VOICEFILE, 0);
if (_voice_ctxt == NULL) {
return;
}
// Grab sound resource information for the current game
GAME_GetSoundInfo(&_snd_info);
_snd_info = _vm->getSoundInfo();
_init = 1;
}
@ -78,7 +77,7 @@ int SndRes::playVoice(uint32 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
// separate file (p2_a.voc or P2_A.iaf), to correct voice 4 in
// the intro. Use that, if available.
@ -122,7 +121,7 @@ int SndRes::playVoice(uint32 voice_rn) {
return FAILURE;
}
if (GAME_GetFeatures() & GF_VOX_VOICES && !voiceFile)
if (_vm->_features & GF_VOX_VOICES && !voiceFile)
_vm->_sound->playVoxVoice(&snd_buffer);
else
_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,
// if available.
if (GAME_GetGameType() == GID_ITE && voice_rn == 4) {
if (_vm->_gameType == GType_ITE && voice_rn == 4) {
if (f.open("p2_a.voc")) {
result = SUCCESS;
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
ms_f = (double)length / 22050 * 2000.0;
ms_i = (int)ms_f;

View File

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

View File

@ -23,7 +23,6 @@
#include "saga/saga.h"
#include "saga/sound.h"
#include "saga/game_mod.h"
#include "sound/audiostream.h"
#include "sound/mixer.h"
@ -172,19 +171,6 @@ int Sound::playSoundBuffer(PlayingSoundHandle *handle, SOUNDBUFFER *buf, int vol
if (!buf->s_signed)
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);
return SUCCESS;

View File

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

View File

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

View File

@ -31,7 +31,6 @@
#include "saga/script.h"
#include "saga/sdata.h"
#include "saga/game_mod.h"
#include "saga/stream.h"
#include "saga/scene.h"
#include "saga/resnames.h"
@ -763,7 +762,7 @@ int Script::SThreadRun(SCRIPT_THREAD *thread, int instr_limit) {
}
// 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))) {
sampleResourceId = SCENE1_VOICE_009 + data - 288;
}