[Scummvm-git-logs] scummvm master -> 89c71ebaa71246cf6a554cd597d59ef0adca7b2b
bluegr
noreply at scummvm.org
Tue Nov 15 20:46:27 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
89c71ebaa7 SAGA: Move extra tables out of the detection plugin
Commit: 89c71ebaa71246cf6a554cd597d59ef0adca7b2b
https://github.com/scummvm/scummvm/commit/89c71ebaa71246cf6a554cd597d59ef0adca7b2b
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2022-11-15T22:46:23+02:00
Commit Message:
SAGA: Move extra tables out of the detection plugin
Changed paths:
engines/saga/detection.h
engines/saga/detection_tables.h
engines/saga/font.cpp
engines/saga/metaengine.cpp
engines/saga/resource.cpp
engines/saga/saga.cpp
engines/saga/saga.h
diff --git a/engines/saga/detection.h b/engines/saga/detection.h
index d3ba1757465..56eb60d33ad 100644
--- a/engines/saga/detection.h
+++ b/engines/saga/detection.h
@@ -26,35 +26,6 @@
namespace Saga {
-struct GameResourceDescription {
- uint32 sceneLUTResourceId;
- uint32 moduleLUTResourceId;
- uint32 mainPanelResourceId;
- uint32 conversePanelResourceId;
- uint32 optionPanelResourceId;
- uint32 mainSpritesResourceId;
- uint32 mainPanelSpritesResourceId;
- uint32 mainStringsResourceId;
- // ITE specific resources
- uint32 actorsStringsResourceId;
- uint32 defaultPortraitsResourceId;
- // IHNM specific resources
- uint32 optionPanelSpritesResourceId;
- uint32 warningPanelResourceId;
- uint32 warningPanelSpritesResourceId;
- uint32 psychicProfileResourceId;
-};
-
-struct GameFontDescription {
- uint32 fontResourceId;
-};
-
-struct GamePatchDescription {
- const char *fileName;
- uint16 fileType;
- uint32 resourceId;
-};
-
enum GameIds {
GID_ITE = 0,
GID_IHNM = 1
@@ -88,7 +59,39 @@ enum GameFileTypes {
GAME_PATCHFILE = 1 << 10 // IHNM patch file (patch.re_/patch.res)
};
-// Make sure to update ITE_IntroLists if this enum is reordered.
+// Make sure to update ResourceLists in saga.cpp if this enum is reordered.
+enum GameResourceList : uint8 {
+ RESOURCELIST_NONE = 0,
+ RESOURCELIST_ITE,
+ RESOURCELIST_ITE_ENGLISH_ECS_CD,
+ RESOURCELIST_ITE_GERMAN_AGA_CD,
+ RESOURCELIST_ITE_GERMAN_ECS_CD,
+ RESOURCELIST_ITE_DEMO,
+ RESOURCELIST_IHNM,
+ RESOURCELIST_IHNM_DEMO,
+ RESOURCELIST_MAX
+};
+
+// Make sure to update FontLists in font.cpp if this enum is reordered.
+enum GameFontList : uint8 {
+ FONTLIST_NONE = 0,
+ FONTLIST_ITE,
+ FONTLIST_ITE_DEMO,
+ FONTLIST_ITE_WIN_DEMO,
+ FONTLIST_IHNM_DEMO,
+ FONTLIST_IHNM_CD,
+ FONTLIST_MAX
+};
+
+// Make sure to update PatchLists in resource.cpp if this enum is reordered.
+enum GamePatchList : uint8 {
+ PATCHLIST_NONE = 0,
+ PATCHLIST_ITE,
+ PATCHLIST_ITE_MAC,
+ PATCHLIST_MAX
+};
+
+// Make sure to update ITE_IntroLists in introproc_ite.cpp if this enum is reordered.
enum GameIntroList : uint8 {
INTROLIST_NONE = 0,
INTROLIST_ITE_DEFAULT,
@@ -106,10 +109,9 @@ struct SAGAGameDescription {
int gameId;
uint32 features;
int startSceneNumber;
- const GameResourceDescription *resourceDescription;
- int fontsCount;
- const GameFontDescription *fontDescriptions;
- const GamePatchDescription *patchDescriptions;
+ GameResourceList resourceList;
+ GameFontList fontList;
+ GamePatchList patchList;
GameIntroList introList;
};
diff --git a/engines/saga/detection_tables.h b/engines/saga/detection_tables.h
index 287056c815a..cea8316fcf8 100644
--- a/engines/saga/detection_tables.h
+++ b/engines/saga/detection_tables.h
@@ -29,203 +29,6 @@
namespace Saga {
-static const GameResourceDescription ITE_Resources_GermanAGACD = {
- 1810, // Scene lookup table RN
- 216, // Script lookup table RN
- 3, // Main panel
- 4, // Converse panel
- 5, // Option panel
- 6, // Main sprites
- 7, // Main panel sprites
- 35, // Main strings
- // ITE specific resources
- 36, // Actor names
- 125, // Default portraits
- // IHNM specific resources
- 0, // Option panel sprites
- 0, // Warning panel
- 0, // Warning panel sprites
- 0 // Psychic profile background
-};
-
-static const GameResourceDescription ITE_Resources_GermanECSCD = {
- 1816, // Scene lookup table RN
- 216, // Script lookup table RN
- 3, // Main panel
- 4, // Converse panel
- 5, // Option panel
- 6, // Main sprites
- 7, // Main panel sprites
- 35, // Main strings
- // ITE specific resources
- 36, // Actor names
- 125, // Default portraits
- // IHNM specific resources
- 0, // Option panel sprites
- 0, // Warning panel
- 0, // Warning panel sprites
- 0 // Psychic profile background
-};
-
-static const GameResourceDescription ITE_Resources = {
- 1806, // Scene lookup table RN
- 216, // Script lookup table RN
- 3, // Main panel
- 4, // Converse panel
- 5, // Option panel
- 6, // Main sprites
- 7, // Main panel sprites
- 35, // Main strings
- // ITE specific resources
- 36, // Actor names
- 125, // Default portraits
- // IHNM specific resources
- 0, // Option panel sprites
- 0, // Warning panel
- 0, // Warning panel sprites
- 0 // Psychic profile background
-};
-
-static const GameResourceDescription ITE_Resources_EnglishECSCD = {
- 1812, // Scene lookup table RN
- 216, // Script lookup table RN
- 3, // Main panel
- 4, // Converse panel
- 5, // Option panel
- 6, // Main sprites
- 7, // Main panel sprites
- 35, // Main strings
- // ITE specific resources
- 36, // Actor names
- 125, // Default portraits
- // IHNM specific resources
- 0, // Option panel sprites
- 0, // Warning panel
- 0, // Warning panel sprites
- 0 // Psychic profile background
-};
-
-// FIXME: Option panel should be 4 but it is an empty resource.
-// Proper fix would be to not load the options panel when the demo is running
-static const GameResourceDescription ITEDemo_Resources = {
- 318, // Scene lookup table RN
- 146, // Script lookup table RN
- 2, // Main panel
- 3, // Converse panel
- 3, // Option panel
- 5, // Main sprites
- 6, // Main panel sprites
- 8, // Main strings
- // ITE specific resources
- 9, // Actor names
- 80, // Default portraits
- // IHNM specific resources
- 0, // Option panel sprites
- 0, // Warning panel
- 0, // Warning panel sprites
- 0 // Psychic profile background
-};
-
-static const GameResourceDescription IHNM_Resources = {
- 1272, // Scene lookup table RN
- 29, // Script lookup table RN
- 9, // Main panel
- 10, // Converse panel
- 15, // Option panel
- 12, // Main sprites
- 12, // Main panel sprites
- 21, // Main strings
- // ITE specific resources
- 0, // Actor names
- 0, // Default portraits
- // IHNM specific resources
- 16, // Option panel sprites
- 17, // Warning panel
- 18, // Warning panel sprites
- 20 // Psychic profile background
-};
-
-static const GameResourceDescription IHNMDEMO_Resources = {
- 286, // Scene lookup table RN
- 18, // Script lookup table RN
- 5, // Main panel
- 6, // Converse panel
- 10, // Option panel
- 7, // Main sprites
- 7, // Main panel sprites
- 16, // Main strings
- // ITE specific resources
- 0, // Actor names
- 0, // Default portraits
- // IHNM specific resources
- 11, // Option panel sprites
- 12, // Warning panel
- 13, // Warning panel sprites
- 15 // Psychic profile background
-};
-
-static const GameFontDescription ITEDEMO_GameFonts[] = { {0}, {1} };
-static const GameFontDescription ITEWINDEMO_GameFonts[] = { {2}, {0} };
-static const GameFontDescription ITE_GameFonts[] = { {2}, {0}, {1} };
-static const GameFontDescription IHNMDEMO_GameFonts[] = { {2}, {3}, {4} };
-// Font 6 is kIHNMFont8, font 8 is kIHNMMainFont
-static const GameFontDescription IHNMCD_GameFonts[] = { {2}, {3}, {4}, {5}, {6}, {7}, {8} };
-
-// Patch files. Files not found will be ignored
-static const GamePatchDescription ITEPatch_Files[] = {
- { "cave.mid", GAME_RESOURCEFILE, 9},
- { "intro.mid", GAME_RESOURCEFILE, 10},
- { "fvillage.mid", GAME_RESOURCEFILE, 11},
- { "elkhall.mid", GAME_RESOURCEFILE, 12},
- { "mouse.mid", GAME_RESOURCEFILE, 13},
- { "darkclaw.mid", GAME_RESOURCEFILE, 14},
- { "birdchrp.mid", GAME_RESOURCEFILE, 15},
- { "orbtempl.mid", GAME_RESOURCEFILE, 16},
- { "spooky.mid", GAME_RESOURCEFILE, 17},
- { "catfest.mid", GAME_RESOURCEFILE, 18},
- { "elkfanfare.mid", GAME_RESOURCEFILE, 19},
- { "bcexpl.mid", GAME_RESOURCEFILE, 20},
- { "boargtnt.mid", GAME_RESOURCEFILE, 21},
- { "boarking.mid", GAME_RESOURCEFILE, 22},
- { "explorea.mid", GAME_RESOURCEFILE, 23},
- { "exploreb.mid", GAME_RESOURCEFILE, 24},
- { "explorec.mid", GAME_RESOURCEFILE, 25},
- { "sunstatm.mid", GAME_RESOURCEFILE, 26},
- { "nitstrlm.mid", GAME_RESOURCEFILE, 27},
- { "humruinm.mid", GAME_RESOURCEFILE, 28},
- { "damexplm.mid", GAME_RESOURCEFILE, 29},
- { "tychom.mid", GAME_RESOURCEFILE, 30},
- { "kitten.mid", GAME_RESOURCEFILE, 31},
- { "sweet.mid", GAME_RESOURCEFILE, 32},
- { "brutalmt.mid", GAME_RESOURCEFILE, 33},
- { "shiala.mid", GAME_RESOURCEFILE, 34},
-
- { "wyrm.pak", GAME_RESOURCEFILE, 1529},
- { "wyrm1.dlt", GAME_RESOURCEFILE, 1530},
- { "wyrm2.dlt", GAME_RESOURCEFILE, 1531},
- { "wyrm3.dlt", GAME_RESOURCEFILE, 1532},
- { "wyrm4.dlt", GAME_RESOURCEFILE, 1533},
- { "credit3n.dlt", GAME_RESOURCEFILE, 1796}, // PC
- { "credit3m.dlt", GAME_RESOURCEFILE, 1796}, // Macintosh
- { "credit4n.dlt", GAME_RESOURCEFILE, 1797}, // PC
- { "credit4m.dlt", GAME_RESOURCEFILE, 1797}, // Macintosh
- { "p2_a.voc", GAME_VOICEFILE, 4},
- { "p2_a.iaf", GAME_VOICEFILE, 4},
- { NULL, 0, 0}
-};
-
-static const GamePatchDescription ITEMacPatch_Files[] = {
- { "wyrm.pak", GAME_RESOURCEFILE, 1529},
- { "wyrm1.dlt", GAME_RESOURCEFILE, 1530},
- { "wyrm2.dlt", GAME_RESOURCEFILE, 1531},
- { "wyrm3.dlt", GAME_RESOURCEFILE, 1532},
- { "wyrm4.dlt", GAME_RESOURCEFILE, 1533},
- { "credit3m.dlt", GAME_RESOURCEFILE, 1796},
- { "credit4m.dlt", GAME_RESOURCEFILE, 1797},
- { "p2_a.iaf", GAME_VOICEFILE, 4},
- { NULL, 0, 0}
-};
-
static const SAGAGameDescription gameDescriptions[] = {
// ITE Section ////////////////////////////////////////////////////////////////////////////////////////////
@@ -256,10 +59,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_ITE_DOS_DEMO,
ITE_DEFAULT_SCENE,
- &ITEDemo_Resources,
- ARRAYSIZE(ITEDEMO_GameFonts),
- ITEDEMO_GameFonts,
- NULL,
+ RESOURCELIST_ITE_DEMO,
+ FONTLIST_ITE_DEMO,
+ PATCHLIST_NONE,
INTROLIST_ITE_DOS_DEMO,
},
@@ -281,10 +83,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITEWINDEMO_GameFonts),
- ITEWINDEMO_GameFonts,
- ITEMacPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE_WIN_DEMO,
+ PATCHLIST_ITE_MAC,
INTROLIST_ITE_DEFAULT,
},
@@ -308,10 +109,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITEWINDEMO_GameFonts),
- ITEWINDEMO_GameFonts,
- ITEMacPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE_WIN_DEMO,
+ PATCHLIST_ITE_MAC,
INTROLIST_ITE_DEFAULT,
},
@@ -335,10 +135,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITEWINDEMO_GameFonts),
- ITEWINDEMO_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE_WIN_DEMO,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -362,10 +161,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_8BIT_UNSIGNED_PCM,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITEWINDEMO_GameFonts),
- ITEWINDEMO_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE_WIN_DEMO,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -396,10 +194,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_8BIT_UNSIGNED_PCM,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITEWINDEMO_GameFonts),
- ITEWINDEMO_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE_WIN_DEMO,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -424,10 +221,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_8BIT_UNSIGNED_PCM,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITEWINDEMO_GameFonts),
- ITEWINDEMO_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE_WIN_DEMO,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -449,10 +245,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITEWINDEMO_GameFonts),
- ITEWINDEMO_GameFonts,
- ITEMacPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE_WIN_DEMO,
+ PATCHLIST_ITE_MAC,
INTROLIST_ITE_DEFAULT,
},
@@ -474,10 +269,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_SOME_MAC_RESOURCES,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -507,10 +301,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -535,10 +328,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -567,10 +359,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -594,10 +385,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_EXTRA_ITE_CREDITS,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -621,10 +411,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_EXTRA_ITE_CREDITS,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -647,10 +436,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_EXTRA_ITE_CREDITS,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -673,10 +461,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -699,10 +486,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -724,10 +510,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -750,10 +535,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -776,10 +560,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -801,10 +584,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -826,10 +608,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -851,10 +632,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -877,10 +657,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -905,10 +684,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -932,10 +710,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -959,10 +736,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -984,10 +760,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_ITE_FLOPPY, // Even it that game version comes on a CD it behaves like a DOS floppy version
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -1009,10 +784,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
0,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -1036,10 +810,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_ITE_FLOPPY,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- NULL,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_NONE,
INTROLIST_ITE_DEFAULT,
},
@@ -1061,10 +834,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_ITE_FLOPPY,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -1086,10 +858,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_ITE_FLOPPY,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -1111,10 +882,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_ITE_FLOPPY,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -1136,10 +906,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_ITE_FLOPPY,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_DEFAULT,
},
@@ -1162,10 +931,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_EXTRA_ITE_CREDITS | GF_AGA_GRAPHICS,
ITE_DEFAULT_SCENE,
- &ITE_Resources_GermanAGACD,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE_GERMAN_AGA_CD,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_AMIGA_GERMAN_AGA,
},
// This is on the same disk as previous but it's for ECS systems
@@ -1185,10 +953,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_EXTRA_ITE_CREDITS | GF_ECS_GRAPHICS,
ITE_DEFAULT_SCENE,
- &ITE_Resources_GermanECSCD,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE_GERMAN_ECS_CD,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_AMIGA_GERMAN_ECS,
},
// Amiga Future coverdisk/Wyrmkeep English edition
@@ -1208,10 +975,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_EXTRA_ITE_CREDITS | GF_AGA_GRAPHICS,
ITE_DEFAULT_SCENE,
- &ITE_Resources,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_AMIGA_ENGLISH_AGA_CD,
},
// This is on the same disk as previous but it's for ECS systems
@@ -1231,10 +997,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_ITE,
GF_EXTRA_ITE_CREDITS | GF_ECS_GRAPHICS,
ITE_DEFAULT_SCENE,
- &ITE_Resources_EnglishECSCD,
- ARRAYSIZE(ITE_GameFonts),
- ITE_GameFonts,
- ITEPatch_Files,
+ RESOURCELIST_ITE_ENGLISH_ECS_CD,
+ FONTLIST_ITE,
+ PATCHLIST_ITE,
INTROLIST_ITE_AMIGA_ENGLISH_ECS_CD,
},
@@ -1262,10 +1027,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNMDEMO_DEFAULT_SCENE,
- &IHNMDEMO_Resources,
- ARRAYSIZE(IHNMDEMO_GameFonts),
- IHNMDEMO_GameFonts,
- NULL,
+ RESOURCELIST_IHNM_DEMO,
+ FONTLIST_IHNM_DEMO,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1295,10 +1059,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1326,10 +1089,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
GF_IHNM_COLOR_FIX,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1357,10 +1119,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1388,10 +1149,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1417,10 +1177,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
GF_IHNM_COLOR_FIX,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1447,10 +1206,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
GF_IHNM_COLOR_FIX,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1477,10 +1235,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
GF_IHNM_COLOR_FIX,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1507,10 +1264,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1536,10 +1292,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1569,10 +1324,9 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
@@ -1596,14 +1350,13 @@ static const SAGAGameDescription gameDescriptions[] = {
GID_IHNM,
0,
IHNM_DEFAULT_SCENE,
- &IHNM_Resources,
- ARRAYSIZE(IHNMCD_GameFonts),
- IHNMCD_GameFonts,
- NULL,
+ RESOURCELIST_IHNM,
+ FONTLIST_IHNM_CD,
+ PATCHLIST_NONE,
INTROLIST_NONE,
},
- { AD_TABLE_END_MARKER, 0, 0, 0, NULL, 0, NULL, NULL, INTROLIST_NONE }
+ { AD_TABLE_END_MARKER, 0, 0, 0, RESOURCELIST_NONE, FONTLIST_MAX, PATCHLIST_MAX, INTROLIST_NONE }
};
} // End of namespace Saga
diff --git a/engines/saga/font.cpp b/engines/saga/font.cpp
index 59d62a2d806..bf1468c06c1 100644
--- a/engines/saga/font.cpp
+++ b/engines/saga/font.cpp
@@ -33,6 +33,25 @@
namespace Saga {
+static const GameFontDescription ITEDEMO_GameFonts[] = { {0}, {1} };
+static const GameFontDescription ITEWINDEMO_GameFonts[] = { {2}, {0} };
+static const GameFontDescription ITE_GameFonts[] = { {2}, {0}, {1} };
+static const GameFontDescription IHNMDEMO_GameFonts[] = { {2}, {3}, {4} };
+// Font 6 is kIHNMFont8, font 8 is kIHNMMainFont
+static const GameFontDescription IHNMCD_GameFonts[] = { {2}, {3}, {4}, {5}, {6}, {7}, {8} };
+
+static struct {
+ const GameFontDescription *list;
+ int count;
+} FontLists[FONTLIST_MAX] = {
+ /* FONTLIST_NONE */ { nullptr, 0 },
+ /* FONTLIST_ITE */ { ITE_GameFonts, ARRAYSIZE(ITE_GameFonts) },
+ /* FONTLIST_ITE_DEMO */ { ITEDEMO_GameFonts, ARRAYSIZE(ITEDEMO_GameFonts) },
+ /* FONTLIST_ITE_WIN_DEMO */ { ITEWINDEMO_GameFonts, ARRAYSIZE(ITEWINDEMO_GameFonts) },
+ /* FONTLIST_IHNM_DEMO */ { IHNMDEMO_GameFonts, ARRAYSIZE(IHNMDEMO_GameFonts) },
+ /* FONTLIST_IHNM_CD */ { IHNMCD_GameFonts, ARRAYSIZE(IHNMCD_GameFonts) },
+};
+
Font::FontId Font::knownFont2FontIdx(KnownFont font) {
FontId fontId = kSmallFont;
@@ -138,19 +157,23 @@ void Font::textDraw(FontId fontId, const char *text, const Common::Point &point,
}
DefaultFont::DefaultFont(SagaEngine *vm) : Font(vm), _fontMapping(0), _chineseFont(nullptr), _chineseFontWidth(0), _chineseFontHeight(0) {
- int i;
+ uint i;
// Load font module resource context
- assert(_vm->getFontsCount() > 0);
+ GameFontList index = _vm->getFontList();
+ assert(index < FONTLIST_MAX && index > FONTLIST_NONE);
+ assert(FontLists[index].list);
+ assert(FontLists[index].count > 0);
+
+ _fonts.resize(FontLists[index].count);
- _fonts.resize(_vm->getFontsCount());
- for (i = 0; i < _vm->getFontsCount(); i++) {
+ for (i = 0; i < _fonts.size(); i++) {
#ifdef __DS__
_fonts[i].outline.font = NULL;
_fonts[i].normal.font = NULL;
#endif
- loadFont(&_fonts[i], _vm->getFontDescription(i)->fontResourceId);
+ loadFont(&_fonts[i], FontLists[index].list[i].fontResourceId);
}
if (_vm->getGameId() == GID_ITE && _vm->getLanguage() == Common::ZH_TWN)
@@ -161,7 +184,7 @@ DefaultFont::~DefaultFont() {
debug(8, "DefaultFont::~DefaultFont(): Freeing fonts.");
#ifdef __DS__
- for (int i = 0; i < _vm->getFontsCount(); i++) {
+ for (uint i = 0; i < _fonts.size(); i++) {
if (_fonts[i].outline.font) {
free(_fonts[i].outline.font);
}
diff --git a/engines/saga/metaengine.cpp b/engines/saga/metaengine.cpp
index 043f69700f4..d20589fd07f 100644
--- a/engines/saga/metaengine.cpp
+++ b/engines/saga/metaengine.cpp
@@ -43,13 +43,10 @@ namespace Saga {
bool SagaEngine::isBigEndian() const { return (isMacResources() || (getPlatform() == Common::kPlatformAmiga)) && getGameId() == GID_ITE; }
bool SagaEngine::isMacResources() const { return (getPlatform() == Common::kPlatformMacintosh); }
-const GameResourceDescription *SagaEngine::getResourceDescription() const { return _gameDescription->resourceDescription; }
-const GameFontDescription *SagaEngine::getFontDescription(int index) const {
- assert(index < _gameDescription->fontsCount);
- return &_gameDescription->fontDescriptions[index];
-}
-int SagaEngine::getFontsCount() const { return _gameDescription->fontsCount; }
+GameResourceList SagaEngine::getResourceList() const { return _gameDescription->resourceList; }
+GameFontList SagaEngine::getFontList() const { return _gameDescription->fontList; }
+GamePatchList SagaEngine::getPatchList() const { return _gameDescription->patchList; }
int SagaEngine::getGameId() const { return _gameDescription->gameId; }
@@ -64,7 +61,6 @@ Common::Platform SagaEngine::getPlatform() const { return _gameDescription->desc
int SagaEngine::getGameNumber() const { return _gameNumber; }
int SagaEngine::getStartSceneNumber() const { return _gameDescription->startSceneNumber; }
-const GamePatchDescription *SagaEngine::getPatchDescriptions() const { return _gameDescription->patchDescriptions; }
const ADGameFileDescription *SagaEngine::getFilesDescriptions() const { return _gameDescription->desc.filesDescriptions; }
} // End of namespace Saga
diff --git a/engines/saga/resource.cpp b/engines/saga/resource.cpp
index 6374d839b77..2c6bce59d77 100644
--- a/engines/saga/resource.cpp
+++ b/engines/saga/resource.cpp
@@ -35,6 +35,67 @@
namespace Saga {
+// Patch files. Files not found will be ignored
+static const GamePatchDescription ITEPatch_Files[] = {
+ { "cave.mid", GAME_RESOURCEFILE, 9},
+ { "intro.mid", GAME_RESOURCEFILE, 10},
+ { "fvillage.mid", GAME_RESOURCEFILE, 11},
+ { "elkhall.mid", GAME_RESOURCEFILE, 12},
+ { "mouse.mid", GAME_RESOURCEFILE, 13},
+ { "darkclaw.mid", GAME_RESOURCEFILE, 14},
+ { "birdchrp.mid", GAME_RESOURCEFILE, 15},
+ { "orbtempl.mid", GAME_RESOURCEFILE, 16},
+ { "spooky.mid", GAME_RESOURCEFILE, 17},
+ { "catfest.mid", GAME_RESOURCEFILE, 18},
+ { "elkfanfare.mid", GAME_RESOURCEFILE, 19},
+ { "bcexpl.mid", GAME_RESOURCEFILE, 20},
+ { "boargtnt.mid", GAME_RESOURCEFILE, 21},
+ { "boarking.mid", GAME_RESOURCEFILE, 22},
+ { "explorea.mid", GAME_RESOURCEFILE, 23},
+ { "exploreb.mid", GAME_RESOURCEFILE, 24},
+ { "explorec.mid", GAME_RESOURCEFILE, 25},
+ { "sunstatm.mid", GAME_RESOURCEFILE, 26},
+ { "nitstrlm.mid", GAME_RESOURCEFILE, 27},
+ { "humruinm.mid", GAME_RESOURCEFILE, 28},
+ { "damexplm.mid", GAME_RESOURCEFILE, 29},
+ { "tychom.mid", GAME_RESOURCEFILE, 30},
+ { "kitten.mid", GAME_RESOURCEFILE, 31},
+ { "sweet.mid", GAME_RESOURCEFILE, 32},
+ { "brutalmt.mid", GAME_RESOURCEFILE, 33},
+ { "shiala.mid", GAME_RESOURCEFILE, 34},
+
+ { "wyrm.pak", GAME_RESOURCEFILE, 1529},
+ { "wyrm1.dlt", GAME_RESOURCEFILE, 1530},
+ { "wyrm2.dlt", GAME_RESOURCEFILE, 1531},
+ { "wyrm3.dlt", GAME_RESOURCEFILE, 1532},
+ { "wyrm4.dlt", GAME_RESOURCEFILE, 1533},
+ { "credit3n.dlt", GAME_RESOURCEFILE, 1796}, // PC
+ { "credit3m.dlt", GAME_RESOURCEFILE, 1796}, // Macintosh
+ { "credit4n.dlt", GAME_RESOURCEFILE, 1797}, // PC
+ { "credit4m.dlt", GAME_RESOURCEFILE, 1797}, // Macintosh
+ { "p2_a.voc", GAME_VOICEFILE, 4},
+ { "p2_a.iaf", GAME_VOICEFILE, 4},
+ { NULL, 0, 0}
+};
+
+static const GamePatchDescription ITEMacPatch_Files[] = {
+ { "wyrm.pak", GAME_RESOURCEFILE, 1529},
+ { "wyrm1.dlt", GAME_RESOURCEFILE, 1530},
+ { "wyrm2.dlt", GAME_RESOURCEFILE, 1531},
+ { "wyrm3.dlt", GAME_RESOURCEFILE, 1532},
+ { "wyrm4.dlt", GAME_RESOURCEFILE, 1533},
+ { "credit3m.dlt", GAME_RESOURCEFILE, 1796},
+ { "credit4m.dlt", GAME_RESOURCEFILE, 1797},
+ { "p2_a.iaf", GAME_VOICEFILE, 4},
+ { NULL, 0, 0}
+};
+
+static const GamePatchDescription *PatchLists[PATCHLIST_MAX] = {
+ /* PATCHLIST_NONE */ nullptr,
+ /* PATCHLIST_ITE */ ITEPatch_Files,
+ /* PATCHLIST_ITE_MAC */ ITEMacPatch_Files
+};
+
bool ResourceContext::loadResIteAmiga(uint32 contextOffset, uint32 contextSize, int type) {
_file.seek(contextOffset);
uint16 resourceCount = _file.readUint16BE();
@@ -148,7 +209,9 @@ bool ResourceContext::load(SagaEngine *vm, Resource *resource) {
if (!loadRes(0, _fileSize, _fileType))
return false;
- processPatches(resource, vm->getPatchDescriptions());
+ GamePatchList index = vm->getPatchList();
+ if (index < PATCHLIST_MAX && index > PATCHLIST_NONE)
+ processPatches(resource, PatchLists[index]);
// Close the file if it's part of a series of files.
// This prevents having all voice files open in IHNM for no reason, as each chapter uses
diff --git a/engines/saga/saga.cpp b/engines/saga/saga.cpp
index 6a1f9e9a0d4..3ab19174f6e 100644
--- a/engines/saga/saga.cpp
+++ b/engines/saga/saga.cpp
@@ -52,6 +52,153 @@
namespace Saga {
+static const GameResourceDescription ITE_Resources_GermanAGACD = {
+ 1810, // Scene lookup table RN
+ 216, // Script lookup table RN
+ 3, // Main panel
+ 4, // Converse panel
+ 5, // Option panel
+ 6, // Main sprites
+ 7, // Main panel sprites
+ 35, // Main strings
+ // ITE specific resources
+ 36, // Actor names
+ 125, // Default portraits
+ // IHNM specific resources
+ 0, // Option panel sprites
+ 0, // Warning panel
+ 0, // Warning panel sprites
+ 0 // Psychic profile background
+};
+
+static const GameResourceDescription ITE_Resources_GermanECSCD = {
+ 1816, // Scene lookup table RN
+ 216, // Script lookup table RN
+ 3, // Main panel
+ 4, // Converse panel
+ 5, // Option panel
+ 6, // Main sprites
+ 7, // Main panel sprites
+ 35, // Main strings
+ // ITE specific resources
+ 36, // Actor names
+ 125, // Default portraits
+ // IHNM specific resources
+ 0, // Option panel sprites
+ 0, // Warning panel
+ 0, // Warning panel sprites
+ 0 // Psychic profile background
+};
+
+static const GameResourceDescription ITE_Resources = {
+ 1806, // Scene lookup table RN
+ 216, // Script lookup table RN
+ 3, // Main panel
+ 4, // Converse panel
+ 5, // Option panel
+ 6, // Main sprites
+ 7, // Main panel sprites
+ 35, // Main strings
+ // ITE specific resources
+ 36, // Actor names
+ 125, // Default portraits
+ // IHNM specific resources
+ 0, // Option panel sprites
+ 0, // Warning panel
+ 0, // Warning panel sprites
+ 0 // Psychic profile background
+};
+
+static const GameResourceDescription ITE_Resources_EnglishECSCD = {
+ 1812, // Scene lookup table RN
+ 216, // Script lookup table RN
+ 3, // Main panel
+ 4, // Converse panel
+ 5, // Option panel
+ 6, // Main sprites
+ 7, // Main panel sprites
+ 35, // Main strings
+ // ITE specific resources
+ 36, // Actor names
+ 125, // Default portraits
+ // IHNM specific resources
+ 0, // Option panel sprites
+ 0, // Warning panel
+ 0, // Warning panel sprites
+ 0 // Psychic profile background
+};
+
+// FIXME: Option panel should be 4 but it is an empty resource.
+// Proper fix would be to not load the options panel when the demo is running
+static const GameResourceDescription ITEDemo_Resources = {
+ 318, // Scene lookup table RN
+ 146, // Script lookup table RN
+ 2, // Main panel
+ 3, // Converse panel
+ 3, // Option panel
+ 5, // Main sprites
+ 6, // Main panel sprites
+ 8, // Main strings
+ // ITE specific resources
+ 9, // Actor names
+ 80, // Default portraits
+ // IHNM specific resources
+ 0, // Option panel sprites
+ 0, // Warning panel
+ 0, // Warning panel sprites
+ 0 // Psychic profile background
+};
+
+static const GameResourceDescription IHNM_Resources = {
+ 1272, // Scene lookup table RN
+ 29, // Script lookup table RN
+ 9, // Main panel
+ 10, // Converse panel
+ 15, // Option panel
+ 12, // Main sprites
+ 12, // Main panel sprites
+ 21, // Main strings
+ // ITE specific resources
+ 0, // Actor names
+ 0, // Default portraits
+ // IHNM specific resources
+ 16, // Option panel sprites
+ 17, // Warning panel
+ 18, // Warning panel sprites
+ 20 // Psychic profile background
+};
+
+static const GameResourceDescription IHNMDEMO_Resources = {
+ 286, // Scene lookup table RN
+ 18, // Script lookup table RN
+ 5, // Main panel
+ 6, // Converse panel
+ 10, // Option panel
+ 7, // Main sprites
+ 7, // Main panel sprites
+ 16, // Main strings
+ // ITE specific resources
+ 0, // Actor names
+ 0, // Default portraits
+ // IHNM specific resources
+ 11, // Option panel sprites
+ 12, // Warning panel
+ 13, // Warning panel sprites
+ 15 // Psychic profile background
+};
+
+static const GameResourceDescription *ResourceLists[RESOURCELIST_MAX] = {
+ /* RESOURCELIST_NONE */ nullptr,
+ /* RESOURCELIST_ITE */ &ITE_Resources,
+ /* RESOURCELIST_ITE_ENGLISH_ECS_CD */ &ITE_Resources_EnglishECSCD,
+ /* RESOURCELIST_ITE_GERMAN_AGA_CD */ &ITE_Resources_GermanAGACD,
+ /* RESOURCELIST_ITE_GERMAN_ECS_CD */ &ITE_Resources_GermanECSCD,
+ /* RESOURCELIST_ITE_DEMO */ &ITEDemo_Resources,
+ /* RESOURCELIST_IHNM */ &IHNM_Resources,
+ /* RESOURCELIST_IHNM_DEMO */ &IHNMDEMO_Resources
+};
+
+
#define MAX_TIME_DELTA 100
SagaEngine::SagaEngine(OSystem *syst, const SAGAGameDescription *gameDesc)
@@ -370,6 +517,12 @@ Common::Error SagaEngine::run() {
return Common::kNoError;
}
+const GameResourceDescription *SagaEngine::getResourceDescription() const {
+ GameResourceList index = getResourceList();
+ assert(index < RESOURCELIST_MAX && index > RESOURCELIST_NONE);
+ return ResourceLists[index];
+}
+
void SagaEngine::loadStrings(StringsTable &stringsTable, const ByteArray &stringsData, bool isBigEndian) {
uint16 stringsCount;
size_t offset;
diff --git a/engines/saga/saga.h b/engines/saga/saga.h
index a01c0babdd0..35932f0712e 100644
--- a/engines/saga/saga.h
+++ b/engines/saga/saga.h
@@ -220,8 +220,37 @@ enum TextStringIds {
kTextLoadSavedGame
};
+struct GameResourceDescription {
+ uint32 sceneLUTResourceId;
+ uint32 moduleLUTResourceId;
+ uint32 mainPanelResourceId;
+ uint32 conversePanelResourceId;
+ uint32 optionPanelResourceId;
+ uint32 mainSpritesResourceId;
+ uint32 mainPanelSpritesResourceId;
+ uint32 mainStringsResourceId;
+ // ITE specific resources
+ uint32 actorsStringsResourceId;
+ uint32 defaultPortraitsResourceId;
+ // IHNM specific resources
+ uint32 optionPanelSpritesResourceId;
+ uint32 warningPanelResourceId;
+ uint32 warningPanelSpritesResourceId;
+ uint32 psychicProfileResourceId;
+};
+
+struct GameFontDescription {
+ uint32 fontResourceId;
+};
+
struct GameDisplayInfo;
+struct GamePatchDescription {
+ const char *fileName;
+ uint16 fileType;
+ uint32 resourceId;
+};
+
enum GameObjectTypes {
kGameObjectNone = 0,
kGameObjectActor = 1,
@@ -543,8 +572,9 @@ public:
bool isMacResources() const;
const GameResourceDescription *getResourceDescription() const;
- const GameFontDescription *getFontDescription(int index) const;
- int getFontsCount() const;
+ GameResourceList getResourceList() const;
+ GameFontList getFontList() const;
+ GamePatchList getPatchList() const;
int getGameId() const;
uint32 getFeatures() const;
@@ -553,8 +583,6 @@ public:
int getGameNumber() const;
int getStartSceneNumber() const;
- const GamePatchDescription *getPatchDescriptions() const;
-
const ADGameFileDescription *getFilesDescriptions() const;
const Common::Rect &getDisplayClip() const { return _displayClip;}
More information about the Scummvm-git-logs
mailing list