Skip to content

Commit

Permalink
SAGA: Initial work on the DOS ITE demo
Browse files Browse the repository at this point in the history
  • Loading branch information
bluegr committed Jul 3, 2015
1 parent 5311191 commit a95d22a
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 20 deletions.
6 changes: 3 additions & 3 deletions engines/saga/detection_tables.h
Expand Up @@ -192,9 +192,9 @@ static const SAGAGameDescription gameDescriptions[] = {
ADGF_DEMO,
GUIO1(GUIO_NOSPEECH)
},
GID_ITE, // Game id
GF_OLD_ITE_DOS, // features
ITE_DEFAULT_SCENE, // Starting scene number
GID_ITE,
GF_ITE_DOS_DEMO,
ITE_DEFAULT_SCENE,
&ITEDemo_Resources,
ARRAYSIZE(ITEDEMO_GameFonts),
ITEDEMO_GameFonts,
Expand Down
70 changes: 62 additions & 8 deletions engines/saga/introproc_ite.cpp
Expand Up @@ -59,6 +59,11 @@ namespace Saga {
#define RID_ITE_FAIREPATH_SCENE 1564
#define RID_ITE_FAIRETENT_SCENE 1567

// Intro scenes - DOS demo
#define RID_ITE_INTRO_ANIM_SCENE_DOS_DEMO 298
#define RID_ITE_CAVE_SCENE_DOS_DEMO 302
#define RID_ITE_VALLEY_SCENE_DOS_DEMO 310

// ITE intro music
#define MUSIC_INTRO 9
#define MUSIC_TITLE_THEME 10
Expand All @@ -75,22 +80,24 @@ LoadSceneParams ITE_IntroList[] = {
{RID_ITE_FAIRETENT_SCENE, kLoadByResourceId, Scene::SC_ITEIntroFaireTentProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE}
};

int Scene::ITEStartProc() {
size_t scenesCount;
size_t i;
LoadSceneParams ITE_DOS_Demo_IntroList[] = {
{RID_ITE_INTRO_ANIM_SCENE_DOS_DEMO, kLoadByResourceId, Scene::SC_ITEIntroAnimProc, false, kTransitionNoFade, 0, NO_CHAPTER_CHANGE},
{RID_ITE_CAVE_SCENE_DOS_DEMO, kLoadByResourceId, Scene::SC_ITEIntroCaveDemoProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE},
{RID_ITE_VALLEY_SCENE_DOS_DEMO, kLoadByResourceId, Scene::SC_ITEIntroValleyProc, false, kTransitionFade, 0, NO_CHAPTER_CHANGE},
};

int Scene::ITEStartProc() {
LoadSceneParams firstScene;
LoadSceneParams tempScene;
bool dosDemo = (_vm->getFeatures() & GF_ITE_DOS_DEMO);
int scenesCount = (!dosDemo) ? ARRAYSIZE(ITE_IntroList) : ARRAYSIZE(ITE_DOS_Demo_IntroList);

scenesCount = ARRAYSIZE(ITE_IntroList);

for (i = 0; i < scenesCount; i++) {
tempScene = ITE_IntroList[i];
for (int i = 0; i < scenesCount; i++) {
tempScene = (!dosDemo) ? ITE_IntroList[i] : ITE_DOS_Demo_IntroList[i];
tempScene.sceneDescriptor = _vm->_resource->convertResourceId(tempScene.sceneDescriptor);
_vm->_scene->queueScene(tempScene);
}


firstScene.loadFlag = kLoadBySceneNumber;
firstScene.sceneDescriptor = _vm->getStartSceneNumber();
firstScene.sceneSkipTarget = true;
Expand Down Expand Up @@ -437,6 +444,53 @@ int Scene::ITEIntroCaveCommonProc(int param, int caveScene) {
return 0;
}

int Scene::ITEIntroCaveDemoProc(int param) {
Event event;
EventColumns *eventColumns = NULL;

switch (param) {
case SCENE_BEGIN:
// Begin palette cycling animation for candles
event.type = kEvTOneshot;
event.code = kPalAnimEvent;
event.op = kEventCycleStart;
event.time = 0;
eventColumns = _vm->_events->chain(eventColumns, event);

// Queue narrator dialogue list
for (int i = 0; i < 11; i++) {
// Play voice
event.type = kEvTOneshot;
event.code = kVoiceEvent;
event.op = kEventPlay;
event.param = i;
event.time = _vm->_sndRes->getVoiceLength(i);
_vm->_events->chain(eventColumns, event);
}

// End scene after last dialogue over
event.type = kEvTOneshot;
event.code = kSceneEvent;
event.op = kEventEnd;
event.time = INTRO_VOICE_PAD;
_vm->_events->chain(eventColumns, event);

break;
case SCENE_END:
break;

default:
warning("Illegal scene procedure parameter");
break;
}

return 0;
}

int Scene::SC_ITEIntroCaveDemoProc(int param, void *refCon) {
return ((Scene *)refCon)->ITEIntroCaveDemoProc(param);
}

// Handles first introductory cave painting scene
int Scene::SC_ITEIntroCave1Proc(int param, void *refCon) {
return ((Scene *)refCon)->ITEIntroCaveCommonProc(param, 1);
Expand Down
6 changes: 5 additions & 1 deletion engines/saga/music.cpp
Expand Up @@ -273,7 +273,11 @@ void Music::play(uint32 resourceId, MusicFlags flags) {

debug(2, "Music::play %d, %d", resourceId, flags);

if (isPlaying() && _trackNumber == resourceId) {
if (isPlaying() && _trackNumber == resourceId)
return;

if (_vm->getFeatures() & GF_ITE_DOS_DEMO) {
warning("TODO: Music::play %d, %d for ITE DOS demo", resourceId, flags);
return;
}

Expand Down
4 changes: 1 addition & 3 deletions engines/saga/saga.h
Expand Up @@ -137,9 +137,7 @@ enum GameFileTypes {

enum GameFeatures {
GF_ITE_FLOPPY = 1 << 0,
#if 0
GF_OLD_ITE_DOS = 1 << 1, // Currently unused
#endif
GF_ITE_DOS_DEMO = 1 << 1,
GF_EXTRA_ITE_CREDITS = 1 << 2,
GF_8BIT_UNSIGNED_PCM = 1 << 3
};
Expand Down
2 changes: 2 additions & 0 deletions engines/saga/scene.h
Expand Up @@ -400,12 +400,14 @@ class Scene {
static int SC_ITEIntroTreeHouseProc(int param, void *refCon);
static int SC_ITEIntroFairePathProc(int param, void *refCon);
static int SC_ITEIntroFaireTentProc(int param, void *refCon);
static int SC_ITEIntroCaveDemoProc(int param, void *refCon);

private:
EventColumns *queueIntroDialogue(EventColumns *eventColumns, int n_dialogues, const IntroDialogue dialogue[]);
EventColumns *queueCredits(int delta_time, int duration, int n_credits, const IntroCredit credits[]);
int ITEIntroAnimProc(int param);
int ITEIntroCaveCommonProc(int param, int caveScene);
int ITEIntroCaveDemoProc(int param);
int ITEIntroValleyProc(int param);
int ITEIntroTreeHouseProc(int param);
int ITEIntroFairePathProc(int param);
Expand Down
6 changes: 1 addition & 5 deletions engines/saga/script.cpp
Expand Up @@ -977,19 +977,15 @@ void Script::opSpeak(SCRIPTOP_PARAMS) {

// now data contains last string index

#if 0
if (_vm->getFeatures() & GF_OLD_ITE_DOS) { // special ITE dos
if (_vm->getFeatures() & GF_ITE_DOS_DEMO) {
if ((_vm->_scene->currentSceneNumber() == ITE_DEFAULT_SCENE) &&
(iparam1 >= 288) && (iparam1 <= (RID_SCENE1_VOICE_END - RID_SCENE1_VOICE_START + 288))) {
sampleResourceId = RID_SCENE1_VOICE_START + iparam1 - 288;
}
} else {
#endif
if (thread->_voiceLUT->size() > uint16(first))
sampleResourceId = (*thread->_voiceLUT)[uint16(first)];
#if 0
}
#endif

if (sampleResourceId < 0 || sampleResourceId > 4000)
sampleResourceId = -1;
Expand Down

0 comments on commit a95d22a

Please sign in to comment.