mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-20 08:53:51 +00:00
indent
svn-id: r13697
This commit is contained in:
parent
a8453637f8
commit
ae9f6dd86a
555
saga/game.cpp
555
saga/game.cpp
@ -20,331 +20,224 @@
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
/*
|
||||
Description:
|
||||
|
||||
Game detection, general game parameters
|
||||
|
||||
Notes:
|
||||
*/
|
||||
// Game detection, general game parameters
|
||||
|
||||
#include "reinherit.h"
|
||||
|
||||
#include "yslib.h"
|
||||
#include "common/file.h"
|
||||
|
||||
/*
|
||||
* Uses the following modules:
|
||||
\*--------------------------------------------------------------------------*/
|
||||
#include "rscfile_mod.h"
|
||||
#include "cvar_mod.h"
|
||||
#include "ite_introproc_mod.h"
|
||||
#include "interface_mod.h"
|
||||
|
||||
/*
|
||||
* Begin module component
|
||||
\*--------------------------------------------------------------------------*/
|
||||
#include "game_mod.h"
|
||||
#include "game.h"
|
||||
|
||||
namespace Saga {
|
||||
|
||||
/*--------------------------------------------------------------------------*\
|
||||
* Inherit the Earth - Demo version
|
||||
\*--------------------------------------------------------------------------*/
|
||||
// Inherit the Earth - Demo version
|
||||
|
||||
R_GAME_FILEDESC ITEDEMO_GameFiles[] = {
|
||||
|
||||
{"ITE.RSC", R_GAME_RESOURCEFILE}
|
||||
,
|
||||
{"ITE.DMO", R_GAME_DEMOFILE}
|
||||
,
|
||||
{"SCRIPTS.RSC", R_GAME_SCRIPTFILE}
|
||||
,
|
||||
{"ITE.RSC", R_GAME_RESOURCEFILE},
|
||||
{"ITE.DMO", R_GAME_DEMOFILE},
|
||||
{"SCRIPTS.RSC", R_GAME_SCRIPTFILE},
|
||||
{"VOICES.RSC", R_GAME_SOUNDFILE | R_GAME_VOICEFILE}
|
||||
};
|
||||
|
||||
R_GAME_FONTDESC ITEDEMO_GameFonts[] = {
|
||||
|
||||
{R_GAME_FONT_SMALL, 0}
|
||||
,
|
||||
{R_GAME_FONT_SMALL, 0},
|
||||
{R_GAME_FONT_MEDIUM, 1}
|
||||
};
|
||||
|
||||
R_GAME_SOUNDINFO ITEDEMO_GameSound = {
|
||||
|
||||
R_GAME_SOUND_VOC, 0, 0, 0
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*\
|
||||
* Inherit the Earth - Diskette version
|
||||
\*--------------------------------------------------------------------------*/
|
||||
|
||||
// Inherit the Earth - Diskette version
|
||||
R_GAME_FILEDESC ITEDISK_GameFiles[] = {
|
||||
|
||||
{"ITE.RSC", R_GAME_RESOURCEFILE}
|
||||
,
|
||||
{"SCRIPTS.RSC", R_GAME_SCRIPTFILE}
|
||||
,
|
||||
{"ITE.RSC", R_GAME_RESOURCEFILE} ,
|
||||
{"SCRIPTS.RSC", R_GAME_SCRIPTFILE} ,
|
||||
{"VOICES.RSC", R_GAME_SOUNDFILE | R_GAME_VOICEFILE}
|
||||
};
|
||||
|
||||
R_GAME_FONTDESC ITEDISK_GameFonts[] = {
|
||||
|
||||
{R_GAME_FONT_MEDIUM, 0}
|
||||
,
|
||||
{R_GAME_FONT_LARGE, 1}
|
||||
,
|
||||
{R_GAME_FONT_MEDIUM, 0} ,
|
||||
{R_GAME_FONT_LARGE, 1} ,
|
||||
{R_GAME_FONT_SMALL, 2}
|
||||
};
|
||||
|
||||
R_GAME_RESOURCEDESC ITE_Resources = {
|
||||
ITE_SCENE_LUT, /* Scene lookup table RN */
|
||||
ITE_SCRIPT_LUT, /* Script lookup table RN */
|
||||
|
||||
ITE_SCENE_LUT, // Scene lookup table RN
|
||||
ITE_SCRIPT_LUT, // Script lookup table RN
|
||||
ITE_COMMAND_PANEL,
|
||||
ITE_DIALOGUE_PANEL
|
||||
};
|
||||
|
||||
R_GAME_SOUNDINFO ITE_GameSound = {
|
||||
|
||||
R_GAME_SOUND_VOC, 0, 0, 0
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*\
|
||||
* Inherit the Earth - CD Enhanced version
|
||||
\*--------------------------------------------------------------------------*/
|
||||
|
||||
// Inherit the Earth - CD Enhanced version
|
||||
R_GAME_FILEDESC ITECD_GameFiles[] = {
|
||||
|
||||
{"ITE.RSC", R_GAME_RESOURCEFILE}
|
||||
,
|
||||
{"SCRIPTS.RSC", R_GAME_SCRIPTFILE}
|
||||
,
|
||||
{"SOUNDS.RSC", R_GAME_SOUNDFILE}
|
||||
,
|
||||
{"ITE.RSC", R_GAME_RESOURCEFILE},
|
||||
{"SCRIPTS.RSC", R_GAME_SCRIPTFILE},
|
||||
{"SOUNDS.RSC", R_GAME_SOUNDFILE},
|
||||
{"VOICES.RSC", R_GAME_VOICEFILE}
|
||||
};
|
||||
|
||||
R_GAME_FONTDESC ITECD_GameFonts[] = {
|
||||
|
||||
{R_GAME_FONT_MEDIUM, 0}
|
||||
,
|
||||
{R_GAME_FONT_LARGE, 1}
|
||||
,
|
||||
{R_GAME_FONT_MEDIUM, 0},
|
||||
{R_GAME_FONT_LARGE, 1},
|
||||
{R_GAME_FONT_SMALL, 2}
|
||||
};
|
||||
|
||||
R_GAME_SOUNDINFO ITECD_GameSound = {
|
||||
|
||||
R_GAME_SOUND_PCM,
|
||||
22050,
|
||||
16,
|
||||
0
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*\
|
||||
* I Have No Mouth and I Must Scream - Demo version
|
||||
\*--------------------------------------------------------------------------*/
|
||||
|
||||
// I Have No Mouth and I Must Scream - Demo version
|
||||
R_GAME_FILEDESC IHNMDEMO_GameFiles[] = {
|
||||
|
||||
{"SCREAM.RES", R_GAME_RESOURCEFILE}
|
||||
,
|
||||
{"SCRIPTS.RES", R_GAME_SCRIPTFILE}
|
||||
,
|
||||
{"SFX.RES", R_GAME_SOUNDFILE}
|
||||
,
|
||||
{"SCREAM.RES", R_GAME_RESOURCEFILE},
|
||||
{"SCRIPTS.RES", R_GAME_SCRIPTFILE},
|
||||
{"SFX.RES", R_GAME_SOUNDFILE},
|
||||
{"VOICESD.RES", R_GAME_VOICEFILE}
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------------------------*\
|
||||
* I Have No Mouth and I Must Scream - Retail CD version
|
||||
\*--------------------------------------------------------------------------*/
|
||||
|
||||
// I Have No Mouth and I Must Scream - Retail CD version
|
||||
R_GAME_FILEDESC IHNMCD_GameFiles[] = {
|
||||
|
||||
{"MUSICFM.RES", R_GAME_MUSICFILE}
|
||||
,
|
||||
{"MUSICGM.RES", R_GAME_MUSICFILE}
|
||||
,
|
||||
{"SCREAM.RES", R_GAME_RESOURCEFILE}
|
||||
,
|
||||
{"SCRIPTS.RES", R_GAME_SCRIPTFILE}
|
||||
,
|
||||
{"SFX.RES", R_GAME_SOUNDFILE}
|
||||
,
|
||||
{"VOICES1.RES", R_GAME_VOICEFILE}
|
||||
,
|
||||
{"VOICES2.RES", R_GAME_VOICEFILE}
|
||||
,
|
||||
{"VOICES3.RES", R_GAME_VOICEFILE}
|
||||
,
|
||||
{"VOICES4.RES", R_GAME_VOICEFILE}
|
||||
,
|
||||
{"VOICES5.RES", R_GAME_VOICEFILE}
|
||||
,
|
||||
{"VOICES6.RES", R_GAME_VOICEFILE}
|
||||
,
|
||||
{"MUSICFM.RES", R_GAME_MUSICFILE},
|
||||
{"MUSICGM.RES", R_GAME_MUSICFILE},
|
||||
{"SCREAM.RES", R_GAME_RESOURCEFILE},
|
||||
{"SCRIPTS.RES", R_GAME_SCRIPTFILE},
|
||||
{"SFX.RES", R_GAME_SOUNDFILE},
|
||||
{"VOICES1.RES", R_GAME_VOICEFILE},
|
||||
{"VOICES2.RES", R_GAME_VOICEFILE},
|
||||
{"VOICES3.RES", R_GAME_VOICEFILE},
|
||||
{"VOICES4.RES", R_GAME_VOICEFILE},
|
||||
{"VOICES5.RES", R_GAME_VOICEFILE},
|
||||
{"VOICES6.RES", R_GAME_VOICEFILE},
|
||||
{"VOICESS.RES", R_GAME_VOICEFILE}
|
||||
};
|
||||
|
||||
R_GAME_FONTDESC IHNMCD_GameFonts[] = {
|
||||
|
||||
{R_GAME_FONT_MEDIUM, 2}
|
||||
,
|
||||
{R_GAME_FONT_LARGE, 3}
|
||||
,
|
||||
{R_GAME_FONT_SMALL, 4}
|
||||
,
|
||||
{R_GAME_FONT_SMALL2, 5}
|
||||
,
|
||||
{R_GAME_FONT_MEDIUM2, 6}
|
||||
,
|
||||
{R_GAME_FONT_LARGE2, 7}
|
||||
,
|
||||
{R_GAME_FONT_MEDIUM, 2},
|
||||
{R_GAME_FONT_LARGE, 3},
|
||||
{R_GAME_FONT_SMALL, 4},
|
||||
{R_GAME_FONT_SMALL2, 5},
|
||||
{R_GAME_FONT_MEDIUM2, 6},
|
||||
{R_GAME_FONT_LARGE2, 7},
|
||||
{R_GAME_FONT_LARGE3, 8}
|
||||
};
|
||||
|
||||
R_GAME_RESOURCEDESC IHNM_Resources = {
|
||||
IHNM_SCENE_LUT, /* Scene lookup table RN */
|
||||
IHNM_SCRIPT_LUT, /* Script lookup table RN */
|
||||
|
||||
IHNM_SCENE_LUT, // Scene lookup table RN
|
||||
IHNM_SCRIPT_LUT, // Script lookup table RN
|
||||
IHNM_COMMAND_PANEL,
|
||||
IHNM_DIALOGUE_PANEL
|
||||
};
|
||||
|
||||
R_GAME_SOUNDINFO IHNM_GameSound = {
|
||||
|
||||
R_GAME_SOUND_WAV, 0, 0, 0
|
||||
};
|
||||
|
||||
R_GAMEDESC GameDescs[] = {
|
||||
|
||||
/* Inherit the earth - Demo version
|
||||
* \*------------------------------------------------------------- */
|
||||
// Inherit the earth - Demo version
|
||||
{
|
||||
R_GAMETYPE_ITE,
|
||||
R_GAME_ITE_DEMO, /* Game id */
|
||||
"Inherit the Earth - Demo version", /* Game title */
|
||||
320, 200, /* Logical resolution */
|
||||
137, /* Scene viewport height */
|
||||
R_GAMETYPE_ITE,
|
||||
R_GAME_ITE_DEMO, // Game id
|
||||
"Inherit the Earth - Demo version", // Game title
|
||||
320, 200, // Logical resolution
|
||||
137, // Scene viewport height
|
||||
ITE_DEFAULT_SCENE, // Starting scene number
|
||||
&ITE_Resources,
|
||||
ARRAYSIZE(ITEDEMO_GameFiles), // Game datafiles
|
||||
ITEDEMO_GameFiles,
|
||||
ARRAYSIZE(ITEDEMO_GameFonts),
|
||||
ITEDEMO_GameFonts,
|
||||
&ITEDEMO_GameSound,
|
||||
Verify_ITEDEMO, // Game verification func
|
||||
0 // Game supported flag
|
||||
},
|
||||
|
||||
ITE_DEFAULT_SCENE, /* Starting scene number */
|
||||
|
||||
&ITE_Resources,
|
||||
|
||||
ARRAYSIZE(ITEDEMO_GameFiles), /* Game datafiles */
|
||||
ITEDEMO_GameFiles,
|
||||
|
||||
ARRAYSIZE(ITEDEMO_GameFonts),
|
||||
ITEDEMO_GameFonts,
|
||||
|
||||
&ITEDEMO_GameSound,
|
||||
|
||||
Verify_ITEDEMO, /* Game verification func */
|
||||
0 /* Game supported flag */
|
||||
}
|
||||
,
|
||||
|
||||
/* Inherit the earth - Disk version
|
||||
* \*------------------------------------------------------------- */
|
||||
// Inherit the earth - Disk version
|
||||
{
|
||||
R_GAMETYPE_ITE,
|
||||
R_GAME_ITE_DISK,
|
||||
"Inherit the Earth - Disk version",
|
||||
320, 200,
|
||||
137,
|
||||
R_GAMETYPE_ITE,
|
||||
R_GAME_ITE_DISK,
|
||||
"Inherit the Earth - Disk version",
|
||||
320, 200,
|
||||
137,
|
||||
ITE_DEFAULT_SCENE,
|
||||
&ITE_Resources,
|
||||
ARRAYSIZE(ITEDISK_GameFiles),
|
||||
ITEDISK_GameFiles,
|
||||
ARRAYSIZE(ITEDISK_GameFonts),
|
||||
ITEDISK_GameFonts,
|
||||
&ITE_GameSound,
|
||||
Verify_ITEDISK,
|
||||
},
|
||||
|
||||
ITE_DEFAULT_SCENE,
|
||||
|
||||
&ITE_Resources,
|
||||
|
||||
ARRAYSIZE(ITEDISK_GameFiles),
|
||||
ITEDISK_GameFiles,
|
||||
|
||||
ARRAYSIZE(ITEDISK_GameFonts),
|
||||
ITEDISK_GameFonts,
|
||||
|
||||
&ITE_GameSound,
|
||||
|
||||
Verify_ITEDISK,
|
||||
1}
|
||||
,
|
||||
|
||||
/* Inherit the earth - CD version
|
||||
* \*------------------------------------------------------------- */
|
||||
// Inherit the earth - CD version
|
||||
{
|
||||
R_GAMETYPE_ITE,
|
||||
R_GAME_ITE_CD,
|
||||
"Inherit the Earth - CD version",
|
||||
320, 200,
|
||||
137,
|
||||
R_GAMETYPE_ITE,
|
||||
R_GAME_ITE_CD,
|
||||
"Inherit the Earth - CD version",
|
||||
320, 200,
|
||||
137,
|
||||
ITE_DEFAULT_SCENE,
|
||||
&ITE_Resources,
|
||||
ARRAYSIZE(ITECD_GameFiles),
|
||||
ITECD_GameFiles,
|
||||
ARRAYSIZE(ITECD_GameFonts),
|
||||
ITECD_GameFonts,
|
||||
&ITECD_GameSound,
|
||||
NULL,
|
||||
1},
|
||||
|
||||
ITE_DEFAULT_SCENE,
|
||||
|
||||
&ITE_Resources,
|
||||
|
||||
ARRAYSIZE(ITECD_GameFiles),
|
||||
ITECD_GameFiles,
|
||||
|
||||
ARRAYSIZE(ITECD_GameFonts),
|
||||
ITECD_GameFonts,
|
||||
|
||||
&ITECD_GameSound,
|
||||
|
||||
NULL,
|
||||
1}
|
||||
,
|
||||
|
||||
/* I Have No Mouth And I Must Scream - Demo version
|
||||
* \*------------------------------------------------------------- */
|
||||
// I Have No Mouth And I Must Scream - Demo version
|
||||
{
|
||||
R_GAMETYPE_IHNM,
|
||||
R_GAME_IHNM_DEMO,
|
||||
"I Have No Mouth - Demo version",
|
||||
640, 480,
|
||||
304,
|
||||
R_GAMETYPE_IHNM,
|
||||
R_GAME_IHNM_DEMO,
|
||||
"I Have No Mouth - Demo version",
|
||||
640, 480,
|
||||
304,
|
||||
0,
|
||||
&IHNM_Resources,
|
||||
ARRAYSIZE(IHNMDEMO_GameFiles),
|
||||
IHNMDEMO_GameFiles,
|
||||
0,
|
||||
NULL,
|
||||
&IHNM_GameSound,
|
||||
NULL,
|
||||
0} ,
|
||||
|
||||
0,
|
||||
|
||||
&IHNM_Resources,
|
||||
|
||||
ARRAYSIZE(IHNMDEMO_GameFiles),
|
||||
IHNMDEMO_GameFiles,
|
||||
|
||||
0,
|
||||
NULL,
|
||||
|
||||
&IHNM_GameSound,
|
||||
|
||||
NULL,
|
||||
0}
|
||||
,
|
||||
|
||||
/* I Have No Mouth And I Must Scream - CD version
|
||||
* \*------------------------------------------------------------- */
|
||||
// I Have No Mouth And I Must Scream - CD version
|
||||
{
|
||||
R_GAMETYPE_IHNM,
|
||||
R_GAME_IHNM_CD,
|
||||
"I Have No Mouth - CD version",
|
||||
640, 480,
|
||||
304,
|
||||
R_GAMETYPE_IHNM,
|
||||
R_GAME_IHNM_CD,
|
||||
"I Have No Mouth - CD version",
|
||||
640, 480,
|
||||
304,
|
||||
|
||||
1,
|
||||
1,
|
||||
|
||||
&IHNM_Resources,
|
||||
&IHNM_Resources,
|
||||
|
||||
ARRAYSIZE(IHNMCD_GameFiles),
|
||||
IHNMCD_GameFiles,
|
||||
ARRAYSIZE(IHNMCD_GameFiles),
|
||||
IHNMCD_GameFiles,
|
||||
|
||||
ARRAYSIZE(IHNMCD_GameFonts),
|
||||
IHNMCD_GameFonts,
|
||||
ARRAYSIZE(IHNMCD_GameFonts),
|
||||
IHNMCD_GameFonts,
|
||||
|
||||
&IHNM_GameSound,
|
||||
&IHNM_GameSound,
|
||||
|
||||
NULL,
|
||||
1}
|
||||
NULL,
|
||||
1}
|
||||
};
|
||||
|
||||
static R_GAMEMODULE GameModule;
|
||||
@ -358,93 +251,71 @@ void GAME_setGameDirectory(const char *gamedir) {
|
||||
strcpy(GameModule.data_dir, ".");
|
||||
}
|
||||
|
||||
int GAME_Register(void)
|
||||
{
|
||||
|
||||
int GAME_Register() {
|
||||
return R_SUCCESS;
|
||||
|
||||
/* Register "gamedir" cfg cvar
|
||||
* \*----------------------------------------- */
|
||||
// Register "gamedir" cfg cvar
|
||||
strncpy(GameModule.game_dir, "./", R_MAXPATH);
|
||||
|
||||
if (CVAR_Register_S(GameModule.game_dir,
|
||||
"gamedir", NULL, R_CVAR_CFG, R_MAXPATH) != R_SUCCESS) {
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
/* Register "datadir" cfg cvar
|
||||
* \*----------------------------------------- */
|
||||
// Register "datadir" cfg cvar
|
||||
strncpy(GameModule.data_dir, "./", R_MAXPATH);
|
||||
|
||||
if (CVAR_Register_S(GameModule.data_dir,
|
||||
"datadir", NULL, R_CVAR_CFG, R_MAXPATH) != R_SUCCESS) {
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
/* Register "g_language" cfg cvar
|
||||
* \*----------------------------------------- */
|
||||
// Register "g_language" cfg cvar
|
||||
strncpy(GameModule.game_dir, "us", R_MAXPATH);
|
||||
|
||||
if (CVAR_Register_S(GameModule.game_language,
|
||||
"g_language",
|
||||
NULL, R_CVAR_CFG, R_GAME_LANGSTR_LIMIT) != R_SUCCESS) {
|
||||
|
||||
if (CVAR_Register_S(GameModule.game_language, "g_language",
|
||||
NULL, R_CVAR_CFG, R_GAME_LANGSTR_LIMIT) != R_SUCCESS) {
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
/* Register "g_skipintro" cfg cvar
|
||||
* \*----------------------------------------- */
|
||||
if (CVAR_Register_I(&GameModule.g_skipintro,
|
||||
"g_skipintro", NULL, R_CVAR_CFG, 0, 1) != R_SUCCESS) {
|
||||
// Register "g_skipintro" cfg cvar
|
||||
if (CVAR_Register_I(&GameModule.g_skipintro, "g_skipintro", NULL, R_CVAR_CFG, 0, 1) != R_SUCCESS) {
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_Init(void)
|
||||
{
|
||||
int GAME_Init() {
|
||||
uint16 game_n;
|
||||
char *game_dir;
|
||||
|
||||
game_dir = GameModule.game_dir;
|
||||
|
||||
if (DetectGame(game_dir, &game_n) != R_SUCCESS) {
|
||||
|
||||
GameModule.err_str = "No valid games were found in the "
|
||||
"specified directory.";
|
||||
|
||||
GameModule.err_str = "No valid games were found in the specified directory.";
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
if (!GameDescs[game_n].gd_supported) {
|
||||
|
||||
GameModule.err_str = "This game is not currently supported.";
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
if (LoadGame(game_dir, game_n) != R_SUCCESS) {
|
||||
|
||||
GameModule.err_str = "Error loading game resource files.";
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
/* Load dialogue file
|
||||
* \*------------------------------------------------------------- */
|
||||
// Load dialogue file
|
||||
LoadLanguage();
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int LoadLanguage(void)
|
||||
{
|
||||
|
||||
int LoadLanguage() {
|
||||
char lang_file[R_MAXPATH];
|
||||
// char lang_path[R_MAXPATH];
|
||||
// char lang_path[R_MAXPATH];
|
||||
uint16 game_n;
|
||||
|
||||
File test_file;
|
||||
@ -452,151 +323,112 @@ int LoadLanguage(void)
|
||||
game_n = GameModule.game_number;
|
||||
|
||||
if (GameDescs[game_n].gd_game_type == R_GAMETYPE_ITE) {
|
||||
|
||||
snprintf(lang_file, R_MAXPATH,
|
||||
"%s%s.%s",
|
||||
R_GAME_ITE_LANG_PREFIX,
|
||||
GameModule.game_language, R_GAME_LANG_EXT);
|
||||
|
||||
snprintf(lang_file, R_MAXPATH, "%s%s.%s", R_GAME_ITE_LANG_PREFIX, GameModule.game_language, R_GAME_LANG_EXT);
|
||||
if (!test_file.open(lang_file)) {
|
||||
R_printf(R_STDOUT,
|
||||
"Couldn't open language file %s. "
|
||||
"Using default (US English)\n", lang_file);
|
||||
|
||||
R_printf(R_STDOUT, "Couldn't open language file %s. Using default (US English)\n", lang_file);
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
test_file.close();
|
||||
|
||||
if (INTERFACE_RegisterLang() != R_SUCCESS) {
|
||||
R_printf(R_STDERR,
|
||||
"Error registering interface language cvars.");
|
||||
|
||||
R_printf(R_STDERR, "Error registering interface language cvars.");
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
if (ITE_IntroRegisterLang() != R_SUCCESS) {
|
||||
|
||||
R_printf(R_STDERR,
|
||||
"Error registering intro sequence language cvars.");
|
||||
|
||||
R_printf(R_STDERR, "Error registering intro sequence language cvars.");
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
R_printf(R_STDOUT, "Using language file %s.\n", lang_file);
|
||||
|
||||
// FIXME
|
||||
//CFG_Read(lang_path);
|
||||
} else {
|
||||
|
||||
R_printf(R_STDOUT,
|
||||
"Language support for this game not implemented.\n");
|
||||
R_printf(R_STDOUT, "Language support for this game not implemented.\n");
|
||||
}
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_GetErrN(void)
|
||||
{
|
||||
int GAME_GetErrN() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *GAME_GetErrS(void)
|
||||
{
|
||||
|
||||
return GameModule.err_str == NULL
|
||||
? "No error description." : GameModule.err_str;
|
||||
const char *GAME_GetErrS() {
|
||||
return GameModule.err_str == NULL ? "No error description." : GameModule.err_str;
|
||||
}
|
||||
|
||||
int GAME_GetFileContext(R_RSCFILE_CONTEXT ** ctxt_p, uint16 r_type, int param)
|
||||
{
|
||||
|
||||
int GAME_GetFileContext(R_RSCFILE_CONTEXT ** ctxt_p, uint16 r_type, int param) {
|
||||
R_RSCFILE_CONTEXT *found_ctxt = NULL;
|
||||
uint16 i;
|
||||
|
||||
YS_IGNORE_PARAM(param);
|
||||
|
||||
if (ctxt_p == NULL) {
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
for (i = 0; i < GameModule.gfile_n; i++) {
|
||||
|
||||
if (GameModule.gfile_data[i].file_types & r_type) {
|
||||
|
||||
found_ctxt = GameModule.gfile_data[i].file_ctxt;
|
||||
}
|
||||
}
|
||||
|
||||
if (found_ctxt != NULL) {
|
||||
|
||||
*ctxt_p = found_ctxt;
|
||||
} else {
|
||||
|
||||
*ctxt_p = NULL;
|
||||
}
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int DetectGame(const char *game_dir, uint16 * game_n_p)
|
||||
{
|
||||
int DetectGame(const char *game_dir, uint16 *game_n_p) {
|
||||
uint16 game_count = ARRAYSIZE(GameDescs);
|
||||
uint16 game_n;
|
||||
|
||||
uint16 file_count;
|
||||
uint16 file_n;
|
||||
|
||||
File test_file;
|
||||
|
||||
int file_missing = 0;
|
||||
int found_game = 0;
|
||||
|
||||
if ((game_dir == NULL) || (game_n_p == NULL)) {
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
for (game_n = 0; (game_n < game_count) && !found_game; game_n++) {
|
||||
|
||||
file_count = GameDescs[game_n].gd_filect;
|
||||
|
||||
file_missing = 0;
|
||||
|
||||
/* Try to open all files for this game */
|
||||
// Try to open all files for this game
|
||||
for (file_n = 0; file_n < file_count; file_n++) {
|
||||
|
||||
if (!test_file.open(GameDescs[game_n].gd_filedescs[file_n].gf_fname)) {
|
||||
file_missing = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
test_file.close();
|
||||
}
|
||||
|
||||
/* Try the next game, couldn't find all files for the current
|
||||
* game */
|
||||
// Try the next game, couldn't find all files for the current
|
||||
// game
|
||||
if (file_missing) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If there's a verification function for this game, use it,
|
||||
* otherwise assume we've found the game if all files are found. */
|
||||
// If there's a verification function for this game, use it,
|
||||
// otherwise assume we've found the game if all files are found.
|
||||
found_game = 1;
|
||||
|
||||
if (GameDescs[game_n].gd_verifyf != NULL &&
|
||||
GameDescs[game_n].gd_verifyf(game_dir) != R_SUCCESS) {
|
||||
|
||||
if (GameDescs[game_n].gd_verifyf != NULL && GameDescs[game_n].gd_verifyf(game_dir) != R_SUCCESS) {
|
||||
found_game = 0;
|
||||
}
|
||||
|
||||
if (found_game) {
|
||||
R_printf(R_STDOUT,
|
||||
"Found game: %s\n", GameDescs[game_n].gd_title);
|
||||
|
||||
R_printf(R_STDOUT, "Found game: %s\n", GameDescs[game_n].gd_title);
|
||||
*game_n_p = game_n;
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
}
|
||||
@ -604,73 +436,53 @@ int DetectGame(const char *game_dir, uint16 * game_n_p)
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
int LoadGame(const char *game_dir, uint16 game_n)
|
||||
{
|
||||
|
||||
int LoadGame(const char *game_dir, uint16 game_n) {
|
||||
R_RSCFILE_CONTEXT *load_ctxt;
|
||||
|
||||
uint16 game_count = ARRAYSIZE(GameDescs);
|
||||
|
||||
const char *game_fname;
|
||||
uint16 game_filect;
|
||||
|
||||
uint16 i;
|
||||
|
||||
if ((game_dir == NULL) || (game_n >= game_count)) {
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
game_filect = GameDescs[game_n].gd_filect;
|
||||
|
||||
GameModule.gfile_data = (R_GAME_FILEDATA *)malloc(game_filect *
|
||||
sizeof *GameModule.gfile_data);
|
||||
GameModule.gfile_data = (R_GAME_FILEDATA *)malloc(game_filect * sizeof *GameModule.gfile_data);
|
||||
if (GameModule.gfile_data == NULL) {
|
||||
|
||||
return R_MEM;
|
||||
}
|
||||
|
||||
GameModule.gfile_n = game_filect;
|
||||
|
||||
/* Load game resource files
|
||||
* \*------------------------------------------------------------- */
|
||||
// Load game resource files
|
||||
for (i = 0; i < game_filect; i++) {
|
||||
|
||||
load_ctxt = RSC_CreateContext();
|
||||
|
||||
game_fname = GameDescs[game_n].gd_filedescs[i].gf_fname;
|
||||
|
||||
if (RSC_OpenContext(load_ctxt, game_fname) != R_SUCCESS) {
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
R_printf(R_STDOUT, "Opened resource file: %s\n", game_fname);
|
||||
|
||||
GameModule.gfile_data[i].file_ctxt = load_ctxt;
|
||||
GameModule.gfile_data[i].file_types =
|
||||
GameDescs[game_n].gd_filedescs[i].gf_type;
|
||||
|
||||
GameModule.gfile_data[i].file_types = GameDescs[game_n].gd_filedescs[i].gf_type;
|
||||
GameModule.gfile_data[i].file_flags = 0;
|
||||
}
|
||||
|
||||
/* Load game font data
|
||||
* \*------------------------------------------------------------- */
|
||||
// Load game font data
|
||||
GameModule.gd_fontct = GameDescs[game_n].gd_fontct;
|
||||
GameModule.gd_fontdescs = GameDescs[game_n].gd_fontdescs;
|
||||
|
||||
/* Finish initialization
|
||||
* \*------------------------------------------------------------- */
|
||||
// Finish initialization
|
||||
GameModule.game_number = game_n;
|
||||
GameModule.gamedesc = &GameDescs[game_n];
|
||||
|
||||
GameModule.game_init = 1;
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_GetResourceInfo(R_GAME_RESOURCEDESC * rsc_desc)
|
||||
{
|
||||
int GAME_GetResourceInfo(R_GAME_RESOURCEDESC *rsc_desc) {
|
||||
assert(rsc_desc != NULL);
|
||||
|
||||
*rsc_desc = *GameModule.gamedesc->gd_resource_desc;
|
||||
@ -678,8 +490,7 @@ int GAME_GetResourceInfo(R_GAME_RESOURCEDESC * rsc_desc)
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_GetSoundInfo(R_GAME_SOUNDINFO * snd_info)
|
||||
{
|
||||
int GAME_GetSoundInfo(R_GAME_SOUNDINFO *snd_info) {
|
||||
assert(snd_info != NULL);
|
||||
|
||||
*snd_info = *GameModule.gamedesc->gd_soundinfo;
|
||||
@ -687,9 +498,7 @@ int GAME_GetSoundInfo(R_GAME_SOUNDINFO * snd_info)
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_GetDisplayInfo(R_GAME_DISPLAYINFO * disp_info)
|
||||
{
|
||||
|
||||
int GAME_GetDisplayInfo(R_GAME_DISPLAYINFO *disp_info) {
|
||||
int game_n;
|
||||
|
||||
assert(disp_info != NULL);
|
||||
@ -707,9 +516,7 @@ int GAME_GetDisplayInfo(R_GAME_DISPLAYINFO * disp_info)
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_GetFontInfo(R_GAME_FONTDESC ** gf_desc, int *font_n)
|
||||
{
|
||||
|
||||
int GAME_GetFontInfo(R_GAME_FONTDESC **gf_desc, int *font_n) {
|
||||
assert((gf_desc != NULL) && (font_n != NULL));
|
||||
|
||||
*gf_desc = GameModule.gd_fontdescs;
|
||||
@ -718,69 +525,51 @@ int GAME_GetFontInfo(R_GAME_FONTDESC ** gf_desc, int *font_n)
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_GetSceneInfo(R_GAME_SCENEDESC * gs_desc)
|
||||
{
|
||||
|
||||
int GAME_GetSceneInfo(R_GAME_SCENEDESC *gs_desc) {
|
||||
assert(gs_desc != NULL);
|
||||
|
||||
gs_desc->first_scene = GameModule.gamedesc->gd_startscene;
|
||||
gs_desc->scene_lut_rn =
|
||||
GameModule.gamedesc->gd_resource_desc->scene_lut_rn;
|
||||
gs_desc->scene_lut_rn = GameModule.gamedesc->gd_resource_desc->scene_lut_rn;
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int GAME_GetGame(void)
|
||||
{
|
||||
|
||||
int GAME_GetGame() {
|
||||
return GameModule.gamedesc->gd_game_id;
|
||||
}
|
||||
|
||||
int GAME_GetGameType(void)
|
||||
{
|
||||
|
||||
int GAME_GetGameType() {
|
||||
return GameModule.gamedesc->gd_game_type;
|
||||
}
|
||||
|
||||
int Verify_ITEDEMO(const char *game_dir)
|
||||
{
|
||||
|
||||
int Verify_ITEDEMO(const char *game_dir) {
|
||||
YS_IGNORE_PARAM(game_dir);
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int Verify_ITEDISK(const char *game_dir)
|
||||
{
|
||||
|
||||
int Verify_ITEDISK(const char *game_dir) {
|
||||
R_RSCFILE_CONTEXT *test_ctx;
|
||||
|
||||
uint32 script_lut_len;
|
||||
uint32 script_lut_rn;
|
||||
|
||||
int verified = 0;
|
||||
|
||||
test_ctx = RSC_CreateContext();
|
||||
|
||||
if (RSC_OpenContext(test_ctx, "ITE.RSC") != R_SUCCESS) {
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
script_lut_rn =
|
||||
GameDescs[R_GAME_ITE_DISK].gd_resource_desc->script_lut_rn;
|
||||
|
||||
script_lut_rn = GameDescs[R_GAME_ITE_DISK].gd_resource_desc->script_lut_rn;
|
||||
if (RSC_GetResourceSize(test_ctx,
|
||||
script_lut_rn, &script_lut_len) != R_SUCCESS) {
|
||||
|
||||
RSC_DestroyContext(test_ctx);
|
||||
|
||||
return R_FAILURE;
|
||||
}
|
||||
|
||||
RSC_DestroyContext(test_ctx);
|
||||
|
||||
if (script_lut_len % R_SCR_LUT_ENTRYLEN_ITEDISK == 0) {
|
||||
|
||||
verified = 1;
|
||||
}
|
||||
|
||||
@ -791,25 +580,19 @@ int Verify_ITEDISK(const char *game_dir)
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int Verify_ITECD(const char *game_dir)
|
||||
{
|
||||
|
||||
int Verify_ITECD(const char *game_dir) {
|
||||
YS_IGNORE_PARAM(game_dir);
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int Verify_IHNMDEMO(const char *game_dir)
|
||||
{
|
||||
|
||||
int Verify_IHNMDEMO(const char *game_dir) {
|
||||
YS_IGNORE_PARAM(game_dir);
|
||||
|
||||
return R_SUCCESS;
|
||||
}
|
||||
|
||||
int Verify_IHNMCD(const char *game_dir)
|
||||
{
|
||||
|
||||
int Verify_IHNMCD(const char *game_dir) {
|
||||
YS_IGNORE_PARAM(game_dir);
|
||||
|
||||
return R_SUCCESS;
|
||||
|
42
saga/game.h
42
saga/game.h
@ -20,13 +20,8 @@
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
/*
|
||||
Description:
|
||||
|
||||
Game detection, general game parameters
|
||||
|
||||
Notes:
|
||||
*/
|
||||
// Game detection, general game parameters
|
||||
|
||||
#ifndef SAGA_GAME_H_
|
||||
#define SAGA_GAME_H_
|
||||
@ -39,88 +34,60 @@ namespace Saga {
|
||||
#define R_GAME_ITE_LANG_PREFIX "ite_"
|
||||
#define R_GAME_LANG_EXT "lng"
|
||||
|
||||
/* Script lookup table entry sizes for game verification */
|
||||
// Script lookup table entry sizes for game verification
|
||||
#define R_SCR_LUT_ENTRYLEN_ITECD 22
|
||||
#define R_SCR_LUT_ENTRYLEN_ITEDISK 16
|
||||
|
||||
typedef int (*R_GAME_VERIFYFUNC) (const char *);
|
||||
|
||||
struct R_GAME_FILEDESC {
|
||||
|
||||
const char *gf_fname;
|
||||
uint16 gf_type;
|
||||
|
||||
};
|
||||
|
||||
struct R_GAMEDESC {
|
||||
|
||||
int gd_game_type;
|
||||
int gd_game_id;
|
||||
|
||||
const char *gd_title;
|
||||
|
||||
int gd_logical_w;
|
||||
int gd_logical_h;
|
||||
int gd_scene_h;
|
||||
|
||||
int gd_startscene;
|
||||
|
||||
R_GAME_RESOURCEDESC *gd_resource_desc;
|
||||
|
||||
int gd_filect;
|
||||
R_GAME_FILEDESC *gd_filedescs;
|
||||
|
||||
int gd_fontct;
|
||||
R_GAME_FONTDESC *gd_fontdescs;
|
||||
|
||||
R_GAME_SOUNDINFO *gd_soundinfo;
|
||||
|
||||
R_GAME_VERIFYFUNC gd_verifyf;
|
||||
|
||||
int gd_supported;
|
||||
|
||||
};
|
||||
|
||||
struct R_GAME_FILEDATA {
|
||||
|
||||
R_RSCFILE_CONTEXT *file_ctxt;
|
||||
|
||||
uint16 file_types;
|
||||
uint16 file_flags;
|
||||
|
||||
};
|
||||
|
||||
struct R_GAMEMODULE {
|
||||
|
||||
int game_init;
|
||||
int game_number;
|
||||
|
||||
R_GAMEDESC *gamedesc;
|
||||
|
||||
int g_skipintro;
|
||||
|
||||
char game_dir[R_MAXPATH];
|
||||
char data_dir[R_MAXPATH];
|
||||
|
||||
char game_language[R_GAME_LANGSTR_LIMIT];
|
||||
|
||||
uint16 gfile_n;
|
||||
R_GAME_FILEDATA *gfile_data;
|
||||
|
||||
uint16 gd_fontct;
|
||||
R_GAME_FONTDESC *gd_fontdescs;
|
||||
|
||||
int err_n;
|
||||
const char *err_str;
|
||||
|
||||
};
|
||||
|
||||
int LoadLanguage(void);
|
||||
|
||||
int LoadLanguage();
|
||||
int DetectGame(const char *game_dir, uint16 * game_n_p);
|
||||
|
||||
int LoadGame(const char *game_dir, uint16 game_n_p);
|
||||
|
||||
int Verify_ITEDEMO(const char *game_dir);
|
||||
int Verify_ITEDISK(const char *game_dir);
|
||||
int Verify_ITECD(const char *game_dir);
|
||||
@ -129,5 +96,4 @@ int Verify_IHNMCD(const char *game_dit);
|
||||
|
||||
} // End of namespace Saga
|
||||
|
||||
#endif /* R_GAME_H_ */
|
||||
/* end "r_game.h" */
|
||||
#endif
|
||||
|
@ -20,13 +20,8 @@
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
/*
|
||||
Description:
|
||||
|
||||
Game detection, general game parameters - module header
|
||||
|
||||
Notes:
|
||||
*/
|
||||
// Game detection, general game parameters - module header
|
||||
|
||||
#ifndef SAGA_GAME_MOD_H__
|
||||
#define SAGA_GAME_MOD_H__
|
||||
@ -34,13 +29,11 @@
|
||||
namespace Saga {
|
||||
|
||||
enum R_GAME_BASETYPES {
|
||||
|
||||
R_GAMETYPE_ITE,
|
||||
R_GAMETYPE_IHNM
|
||||
};
|
||||
|
||||
enum R_GAME_IDS {
|
||||
|
||||
R_GAME_ITE_DEMO = 0,
|
||||
R_GAME_ITE_DISK = 1,
|
||||
R_GAME_ITE_CD = 2,
|
||||
@ -49,7 +42,6 @@ enum R_GAME_IDS {
|
||||
};
|
||||
|
||||
enum R_GAME_FILETYPES {
|
||||
|
||||
R_GAME_RESOURCEFILE = 0x01,
|
||||
R_GAME_SCRIPTFILE = 0x02,
|
||||
R_GAME_SOUNDFILE = 0x04,
|
||||
@ -59,14 +51,12 @@ enum R_GAME_FILETYPES {
|
||||
};
|
||||
|
||||
enum R_GAME_SOUNDINFO_TYPES {
|
||||
|
||||
R_GAME_SOUND_PCM = 0,
|
||||
R_GAME_SOUND_VOC,
|
||||
R_GAME_SOUND_WAV
|
||||
};
|
||||
|
||||
enum R_GAME_FONT_IDS {
|
||||
|
||||
R_GAME_FONT_SMALL = 0,
|
||||
R_GAME_FONT_MEDIUM,
|
||||
R_GAME_FONT_LARGE,
|
||||
@ -77,72 +67,49 @@ enum R_GAME_FONT_IDS {
|
||||
};
|
||||
|
||||
struct R_GAME_DISPLAYINFO {
|
||||
|
||||
int logical_w;
|
||||
int logical_h;
|
||||
int scene_h;
|
||||
|
||||
};
|
||||
|
||||
struct R_GAME_SOUNDINFO {
|
||||
|
||||
int res_type;
|
||||
long freq;
|
||||
int sample_size;
|
||||
int stereo;
|
||||
|
||||
};
|
||||
|
||||
struct R_GAME_FONTDESC {
|
||||
|
||||
uint16 font_id;
|
||||
uint32 font_rn;
|
||||
|
||||
};
|
||||
|
||||
struct R_GAME_SCENEDESC {
|
||||
|
||||
uint32 scene_lut_rn;
|
||||
uint32 first_scene;
|
||||
|
||||
};
|
||||
|
||||
struct R_GAME_RESOURCEDESC {
|
||||
|
||||
uint32 scene_lut_rn;
|
||||
uint32 script_lut_rn;
|
||||
uint32 command_panel_rn;
|
||||
uint32 dialogue_panel_rn;
|
||||
|
||||
};
|
||||
|
||||
int GAME_Register(void);
|
||||
|
||||
int GAME_Init(void);
|
||||
|
||||
int GAME_GetFileContext(R_RSCFILE_CONTEXT ** ctxt_p, uint16 r_type, int param);
|
||||
|
||||
int GAME_Register();
|
||||
int GAME_Init();
|
||||
int GAME_GetFileContext(R_RSCFILE_CONTEXT **ctxt_p, uint16 r_type, int param);
|
||||
int GAME_GetFontInfo(R_GAME_FONTDESC **, int *);
|
||||
|
||||
int GAME_GetResourceInfo(R_GAME_RESOURCEDESC *);
|
||||
|
||||
int GAME_GetSoundInfo(R_GAME_SOUNDINFO *);
|
||||
|
||||
int GAME_GetDisplayInfo(R_GAME_DISPLAYINFO *);
|
||||
|
||||
int GAME_GetSceneInfo(R_GAME_SCENEDESC *);
|
||||
|
||||
int GAME_GetGame(void);
|
||||
|
||||
int GAME_GetGameType(void);
|
||||
|
||||
int GAME_GetErrN(void);
|
||||
|
||||
int GAME_GetGame();
|
||||
int GAME_GetGameType();
|
||||
int GAME_GetErrN();
|
||||
void GAME_setGameDirectory(const char *gamedir);
|
||||
|
||||
const char *GAME_GetErrS(void);
|
||||
const char *GAME_GetErrS();
|
||||
|
||||
} // End of namespace Saga
|
||||
|
||||
#endif /* R_GAME_MOD_H__ */
|
||||
/* end "r_game_mod.h" */
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user