mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-04 08:17:40 +00:00
KYRA: move HOF sequence player into its own class
(also cleaning up and fixing things while doing that)
This commit is contained in:
parent
e016e7dfc2
commit
9840744acc
@ -52,13 +52,6 @@ KyraEngine_HoF::KyraEngine_HoF(OSystem *system, const GameFlags &flags) : KyraEn
|
|||||||
_screen = 0;
|
_screen = 0;
|
||||||
_text = 0;
|
_text = 0;
|
||||||
|
|
||||||
_seqProcessedString = 0;
|
|
||||||
_activeWSA = 0;
|
|
||||||
_activeText = 0;
|
|
||||||
_seqWsa = 0;
|
|
||||||
_sequences = 0;
|
|
||||||
_sequenceSoundList = 0;
|
|
||||||
|
|
||||||
_gamePlayBuffer = 0;
|
_gamePlayBuffer = 0;
|
||||||
_cCodeBuffer = _optionsBuffer = _chapterBuffer = 0;
|
_cCodeBuffer = _optionsBuffer = _chapterBuffer = 0;
|
||||||
|
|
||||||
@ -89,7 +82,6 @@ KyraEngine_HoF::KyraEngine_HoF(OSystem *system, const GameFlags &flags) : KyraEn
|
|||||||
|
|
||||||
memset(&_invWsa, 0, sizeof(_invWsa));
|
memset(&_invWsa, 0, sizeof(_invWsa));
|
||||||
_itemAnimDefinition = 0;
|
_itemAnimDefinition = 0;
|
||||||
_demoAnimData = 0;
|
|
||||||
_nextAnimItem = 0;
|
_nextAnimItem = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 15; i++)
|
for (int i = 0; i < 15; i++)
|
||||||
@ -136,7 +128,6 @@ KyraEngine_HoF::KyraEngine_HoF(OSystem *system, const GameFlags &flags) : KyraEn
|
|||||||
memset(_cauldronStateTables, 0, sizeof(_cauldronStateTables));
|
memset(_cauldronStateTables, 0, sizeof(_cauldronStateTables));
|
||||||
|
|
||||||
_menuDirectlyToLoad = false;
|
_menuDirectlyToLoad = false;
|
||||||
_menu = 0;
|
|
||||||
_chatIsNote = false;
|
_chatIsNote = false;
|
||||||
memset(&_npcScriptData, 0, sizeof(_npcScriptData));
|
memset(&_npcScriptData, 0, sizeof(_npcScriptData));
|
||||||
|
|
||||||
@ -148,7 +139,6 @@ KyraEngine_HoF::KyraEngine_HoF(OSystem *system, const GameFlags &flags) : KyraEn
|
|||||||
|
|
||||||
KyraEngine_HoF::~KyraEngine_HoF() {
|
KyraEngine_HoF::~KyraEngine_HoF() {
|
||||||
cleanup();
|
cleanup();
|
||||||
seq_uninit();
|
|
||||||
|
|
||||||
delete _screen;
|
delete _screen;
|
||||||
delete _text;
|
delete _text;
|
||||||
@ -157,15 +147,6 @@ KyraEngine_HoF::~KyraEngine_HoF() {
|
|||||||
_text = 0;
|
_text = 0;
|
||||||
delete _invWsa.wsa;
|
delete _invWsa.wsa;
|
||||||
|
|
||||||
if (_sequenceSoundList) {
|
|
||||||
for (int i = 0; i < _sequenceSoundListSize; i++) {
|
|
||||||
if (_sequenceSoundList[i])
|
|
||||||
delete[] _sequenceSoundList[i];
|
|
||||||
}
|
|
||||||
delete[] _sequenceSoundList;
|
|
||||||
_sequenceSoundList = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] _dlgBuffer;
|
delete[] _dlgBuffer;
|
||||||
for (int i = 0; i < 19; i++)
|
for (int i = 0; i < 19; i++)
|
||||||
delete[] _conversationState[i];
|
delete[] _conversationState[i];
|
||||||
@ -179,41 +160,13 @@ KyraEngine_HoF::~KyraEngine_HoF() {
|
|||||||
void KyraEngine_HoF::pauseEngineIntern(bool pause) {
|
void KyraEngine_HoF::pauseEngineIntern(bool pause) {
|
||||||
KyraEngine_v2::pauseEngineIntern(pause);
|
KyraEngine_v2::pauseEngineIntern(pause);
|
||||||
|
|
||||||
|
seq_pausePlayer(pause);
|
||||||
|
|
||||||
if (!pause) {
|
if (!pause) {
|
||||||
uint32 pausedTime = _system->getMillis() - _pauseStart;
|
uint32 pausedTime = _system->getMillis() - _pauseStart;
|
||||||
_pauseStart = 0;
|
_pauseStart = 0;
|
||||||
|
|
||||||
// sequence player
|
|
||||||
//
|
|
||||||
// Timers in KyraEngine_HoF::seq_cmpFadeFrame() and KyraEngine_HoF::seq_animatedSubFrame()
|
|
||||||
// have been left out for now. I think we don't need them here.
|
|
||||||
|
|
||||||
_seqStartTime += pausedTime;
|
|
||||||
_seqSubFrameStartTime += pausedTime;
|
|
||||||
_seqEndTime += pausedTime;
|
|
||||||
_seqSubFrameEndTimeInternal += pausedTime;
|
|
||||||
_seqWsaChatTimeout += pausedTime;
|
|
||||||
_seqWsaChatFrameTimeout += pausedTime;
|
|
||||||
|
|
||||||
if (_activeText) {
|
|
||||||
for (int x = 0; x < 10; x++) {
|
|
||||||
if (_activeText[x].duration != -1)
|
|
||||||
_activeText[x].startTime += pausedTime;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_activeWSA) {
|
|
||||||
for (int x = 0; x < 8; x++) {
|
|
||||||
if (_activeWSA[x].flags != -1)
|
|
||||||
_activeWSA[x].nextFrame += pausedTime;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_nextIdleAnim += pausedTime;
|
_nextIdleAnim += pausedTime;
|
||||||
|
|
||||||
for (int x = 0; x < _itemAnimDefinitionSize; x++)
|
|
||||||
_activeItemAnim[x].nextFrameTime += pausedTime;
|
|
||||||
|
|
||||||
_tim->refreshTimersAfterPause(pausedTime);
|
_tim->refreshTimersAfterPause(pausedTime);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -254,13 +207,6 @@ Common::Error KyraEngine_HoF::init() {
|
|||||||
if (!_sound->init())
|
if (!_sound->init())
|
||||||
error("Couldn't init sound");
|
error("Couldn't init sound");
|
||||||
|
|
||||||
_abortIntroFlag = false;
|
|
||||||
|
|
||||||
if (_sequenceStrings) {
|
|
||||||
for (int i = 0; i < MIN(33, _sequenceStringsSize); i++)
|
|
||||||
_sequenceStringsDuration[i] = (int) strlen(_sequenceStrings[i]) * 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
// No mouse display in demo
|
// No mouse display in demo
|
||||||
if (_flags.isDemo && !_flags.isTalkie)
|
if (_flags.isDemo && !_flags.isTalkie)
|
||||||
return Common::kNoError;
|
return Common::kNoError;
|
||||||
@ -279,28 +225,24 @@ Common::Error KyraEngine_HoF::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Common::Error KyraEngine_HoF::go() {
|
Common::Error KyraEngine_HoF::go() {
|
||||||
|
int menuChoice = 0;
|
||||||
|
|
||||||
if (_gameToLoad == -1) {
|
if (_gameToLoad == -1) {
|
||||||
if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
|
if (_flags.platform == Common::kPlatformFMTowns || _flags.platform == Common::kPlatformPC98)
|
||||||
seq_showStarcraftLogo();
|
seq_showStarcraftLogo();
|
||||||
|
|
||||||
if (_flags.isDemo && !_flags.isTalkie) {
|
if (_flags.isDemo && !_flags.isTalkie) {
|
||||||
#ifdef ENABLE_LOL
|
menuChoice = seq_playDemo();
|
||||||
if (_flags.gameID == GI_LOL)
|
|
||||||
seq_playSequences(kSequenceLoLDemoScene1, kSequenceLoLDemoScene6);
|
|
||||||
else
|
|
||||||
#endif // ENABLE_LOL
|
|
||||||
seq_playSequences(kSequenceDemoVirgin, kSequenceDemoFisher);
|
|
||||||
_menuChoice = 4;
|
|
||||||
} else {
|
} else {
|
||||||
seq_playSequences(kSequenceVirgin, kSequenceZanfaun);
|
menuChoice = seq_playIntro();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_menuChoice = 1;
|
menuChoice = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
_res->unloadAllPakFiles();
|
_res->unloadAllPakFiles();
|
||||||
|
|
||||||
if (_menuChoice != 4) {
|
if (menuChoice != 4) {
|
||||||
// load just the pak files needed for ingame
|
// load just the pak files needed for ingame
|
||||||
_staticres->loadStaticResourceFile();
|
_staticres->loadStaticResourceFile();
|
||||||
|
|
||||||
@ -317,17 +259,17 @@ Common::Error KyraEngine_HoF::go() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_menuDirectlyToLoad = (_menuChoice == 3) ? true : false;
|
_menuDirectlyToLoad = (menuChoice == 3) ? true : false;
|
||||||
_menuDirectlyToLoad &= saveFileLoadable(0);
|
_menuDirectlyToLoad &= saveFileLoadable(0);
|
||||||
|
|
||||||
if (_menuChoice & 1) {
|
if (menuChoice & 1) {
|
||||||
startup();
|
startup();
|
||||||
if (!shouldQuit())
|
if (!shouldQuit())
|
||||||
runLoop();
|
runLoop();
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|
||||||
if (_showOutro)
|
if (_showOutro)
|
||||||
seq_playSequences(kSequenceFunters, kSequenceFrash);
|
seq_playOutro();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Common::kNoError;
|
return Common::kNoError;
|
||||||
|
@ -35,158 +35,13 @@
|
|||||||
|
|
||||||
namespace Kyra {
|
namespace Kyra {
|
||||||
|
|
||||||
enum Sequences {
|
//class WSAMovie_v2;
|
||||||
kSequenceVirgin = 0,
|
//class KyraEngine_HoF;
|
||||||
kSequenceWestwood,
|
|
||||||
kSequenceTitle,
|
|
||||||
kSequenceOverview,
|
|
||||||
kSequenceLibrary,
|
|
||||||
kSequenceHand,
|
|
||||||
kSequencePoint,
|
|
||||||
kSequenceZanfaun,
|
|
||||||
|
|
||||||
kSequenceFunters,
|
|
||||||
kSequenceFerb,
|
|
||||||
kSequenceFish,
|
|
||||||
kSequenceFheep,
|
|
||||||
kSequenceFarmer,
|
|
||||||
kSequenceFuards,
|
|
||||||
kSequenceFirates,
|
|
||||||
kSequenceFrash,
|
|
||||||
|
|
||||||
kSequenceArraySize
|
|
||||||
};
|
|
||||||
|
|
||||||
enum NestedSequences {
|
|
||||||
kSequenceFiggle = 0,
|
|
||||||
kSequenceOver1,
|
|
||||||
kSequenceOver2,
|
|
||||||
kSequenceForest,
|
|
||||||
kSequenceDragon,
|
|
||||||
kSequenceDarm,
|
|
||||||
kSequenceLibrary2,
|
|
||||||
kSequenceLibrary3,
|
|
||||||
kSequenceMarco,
|
|
||||||
kSequenceHand1a,
|
|
||||||
kSequenceHand1b,
|
|
||||||
kSequenceHand1c,
|
|
||||||
kSequenceHand2,
|
|
||||||
kSequenceHand3,
|
|
||||||
kSequenceHand4
|
|
||||||
};
|
|
||||||
|
|
||||||
enum SequencesDemo {
|
|
||||||
kSequenceDemoVirgin = 0,
|
|
||||||
kSequenceDemoWestwood,
|
|
||||||
kSequenceDemoTitle,
|
|
||||||
kSequenceDemoHill,
|
|
||||||
kSequenceDemoOuthome,
|
|
||||||
kSequenceDemoWharf,
|
|
||||||
kSequenceDemoDinob,
|
|
||||||
kSequenceDemoFisher
|
|
||||||
};
|
|
||||||
|
|
||||||
enum NestedSequencesDemo {
|
|
||||||
kSequenceDemoWharf2 = 0,
|
|
||||||
kSequenceDemoDinob2,
|
|
||||||
kSequenceDemoWater,
|
|
||||||
kSequenceDemoBail,
|
|
||||||
kSequenceDemoDig
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef ENABLE_LOL
|
|
||||||
enum SequencesLoLDemo {
|
|
||||||
kSequenceLoLDemoScene1 = 0,
|
|
||||||
kSequenceLoLDemoText1,
|
|
||||||
kSequenceLoLDemoScene2,
|
|
||||||
kSequenceLoLDemoText2,
|
|
||||||
kSequenceLoLDemoScene3,
|
|
||||||
kSequenceLoLDemoText3,
|
|
||||||
kSequenceLoLDemoScene4,
|
|
||||||
kSequenceLoLDemoText4,
|
|
||||||
kSequenceLoLDemoScene5,
|
|
||||||
kSequenceLoLDemoText5,
|
|
||||||
kSequenceLoLDemoScene6
|
|
||||||
};
|
|
||||||
#endif // ENABLE_LOL
|
|
||||||
|
|
||||||
class WSAMovie_v2;
|
|
||||||
class KyraEngine_HoF;
|
|
||||||
class TextDisplayer_HoF;
|
class TextDisplayer_HoF;
|
||||||
|
class SeqPlayer_HOF;
|
||||||
|
|
||||||
struct TIM;
|
struct TIM;
|
||||||
|
|
||||||
typedef int (KyraEngine_HoF::*SeqProc)(WSAMovie_v2 *, int, int, int);
|
|
||||||
|
|
||||||
struct ActiveWSA {
|
|
||||||
SeqProc callback;
|
|
||||||
WSAMovie_v2 *movie;
|
|
||||||
const FrameControl *control;
|
|
||||||
int16 flags;
|
|
||||||
uint16 startFrame;
|
|
||||||
uint16 endFrame;
|
|
||||||
uint16 frameDelay;
|
|
||||||
uint32 nextFrame;
|
|
||||||
uint16 currentFrame;
|
|
||||||
uint16 lastFrame;
|
|
||||||
uint16 x;
|
|
||||||
uint16 y;
|
|
||||||
uint16 startupCommand;
|
|
||||||
uint16 finalCommand;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ActiveText {
|
|
||||||
uint16 strIndex;
|
|
||||||
uint16 x;
|
|
||||||
uint16 y;
|
|
||||||
uint16 width;
|
|
||||||
int32 duration;
|
|
||||||
uint32 startTime;
|
|
||||||
int16 textcolor;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Sequence {
|
|
||||||
const char *wsaFile;
|
|
||||||
const char *cpsFile;
|
|
||||||
uint16 flags;
|
|
||||||
uint8 startupCommand;
|
|
||||||
uint8 finalCommand;
|
|
||||||
int16 stringIndex1;
|
|
||||||
int16 stringIndex2;
|
|
||||||
uint16 startFrame;
|
|
||||||
uint16 numFrames;
|
|
||||||
uint16 frameDelay;
|
|
||||||
uint16 xPos;
|
|
||||||
uint16 yPos;
|
|
||||||
uint16 duration;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct NestedSequence {
|
|
||||||
const char *wsaFile;
|
|
||||||
const FrameControl *wsaControl;
|
|
||||||
uint16 flags;
|
|
||||||
uint16 startframe;
|
|
||||||
uint16 endFrame;
|
|
||||||
uint16 frameDelay;
|
|
||||||
uint16 x;
|
|
||||||
uint16 y;
|
|
||||||
uint16 startupCommand;
|
|
||||||
uint16 finalCommand;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct HofSeqData {
|
|
||||||
const Sequence *seq;
|
|
||||||
int numSeq;
|
|
||||||
const NestedSequence *seqn;
|
|
||||||
int numSeqn;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ItemAnimData_v1 {
|
|
||||||
int16 itemIndex;
|
|
||||||
uint16 y;
|
|
||||||
const uint16 *frames;
|
|
||||||
};
|
|
||||||
|
|
||||||
class KyraEngine_HoF : public KyraEngine_v2 {
|
class KyraEngine_HoF : public KyraEngine_v2 {
|
||||||
friend class Debugger_HoF;
|
friend class Debugger_HoF;
|
||||||
friend class TextDisplayer_HoF;
|
friend class TextDisplayer_HoF;
|
||||||
@ -202,98 +57,19 @@ public:
|
|||||||
GUI *gui() const { return _gui; }
|
GUI *gui() const { return _gui; }
|
||||||
virtual TextDisplayer *text() { return _text; }
|
virtual TextDisplayer *text() { return _text; }
|
||||||
int language() const { return _lang; }
|
int language() const { return _lang; }
|
||||||
|
const AudioDataStruct *soundData(int index) { return &_soundData[index]; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static const EngineDesc _hofEngineDesc;
|
static const EngineDesc _hofEngineDesc;
|
||||||
|
|
||||||
// intro/outro
|
// intro/outro
|
||||||
void seq_playSequences(int startSeq, int endSeq = -1);
|
|
||||||
|
|
||||||
int seq_introWestwood(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introTitle(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introOverview(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introLibrary(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introHand(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introPoint(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introZanfaun(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
|
|
||||||
int seq_introOver1(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introOver2(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introForest(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introDragon(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introDarm(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introLibrary2(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introMarco(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introHand1a(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introHand1b(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introHand1c(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introHand2(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_introHand3(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
|
|
||||||
int seq_finaleFunters(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_finaleFerb(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_finaleFish(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_finaleFheep(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_finaleFarmer(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_finaleFuards(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_finaleFirates(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_finaleFrash(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
|
|
||||||
int seq_finaleFiggle(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
|
|
||||||
int seq_demoVirgin(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoWestwood(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoTitle(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoHill(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoOuthome(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoWharf(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoDinob(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoFisher(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
|
|
||||||
int seq_demoWharf2(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoDinob2(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoWater(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoBail(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_demoDig(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
|
|
||||||
#ifdef ENABLE_LOL
|
|
||||||
int seq_lolDemoScene1(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_lolDemoScene2(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_lolDemoScene3(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_lolDemoScene4(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_lolDemoScene5(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_lolDemoText5(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
int seq_lolDemoScene6(WSAMovie_v2 *wsaObj, int x, int y, int frm);
|
|
||||||
#endif // ENABLE_LOL
|
|
||||||
|
|
||||||
void seq_sequenceCommand(int command);
|
|
||||||
void seq_loadNestedSequence(int wsaNum, int seqNum);
|
|
||||||
void seq_nestedSequenceFrame(int command, int wsaNum);
|
|
||||||
void seq_animatedSubFrame(int srcPage, int dstPage, int delaytime,
|
|
||||||
int steps, int x, int y, int w, int h, int openClose, int directionFlags);
|
|
||||||
bool seq_processNextSubFrame(int wsaNum);
|
|
||||||
void seq_resetActiveWSA(int wsaNum);
|
|
||||||
void seq_unloadWSA(int wsaNum);
|
|
||||||
void seq_processWSAs();
|
|
||||||
void seq_cmpFadeFrame(const char *cmpFile);
|
|
||||||
void seq_playTalkText(uint8 chatNum);
|
|
||||||
void seq_resetAllTextEntries();
|
|
||||||
uint32 seq_activeTextsTimeLeft();
|
|
||||||
void seq_waitForTextsTimeout();
|
|
||||||
int seq_setTextEntry(uint16 strIndex, uint16 posX, uint16 posY, int duration, uint16 width);
|
|
||||||
void seq_processText();
|
|
||||||
char *seq_preprocessString(const char *str, int width);
|
|
||||||
void seq_printCreditsString(uint16 strIndex, int x, int y, const uint8 *colorMap, uint8 textcolor);
|
|
||||||
void seq_playWsaSyncDialogue(uint16 strIndex, uint16 vocIndex, int textColor, int x, int y, int width,
|
|
||||||
WSAMovie_v2 * wsa, int firstframe, int lastframe, int wsaXpos, int wsaYpos);
|
|
||||||
void seq_finaleActorScreen();
|
|
||||||
void seq_displayScrollText(uint8 *data, const ScreenDim *d, int tempPage1, int tempPage2, int speed, int step, Screen::FontId fid1, Screen::FontId fid2, const uint8 *shapeData = 0, const char *const *specialData = 0);
|
|
||||||
void seq_scrollPage(int bottom, int top);
|
|
||||||
void seq_showStarcraftLogo();
|
void seq_showStarcraftLogo();
|
||||||
|
|
||||||
MainMenu *_menu;
|
int seq_playIntro();
|
||||||
|
int seq_playOutro();
|
||||||
|
int seq_playDemo();
|
||||||
|
|
||||||
void seq_init();
|
void seq_pausePlayer(bool toggle);
|
||||||
void seq_uninit();
|
|
||||||
|
|
||||||
Common::Error init();
|
Common::Error init();
|
||||||
Common::Error go();
|
Common::Error go();
|
||||||
@ -312,6 +88,7 @@ protected:
|
|||||||
static const int _pcSpkSfxMapSize;
|
static const int _pcSpkSfxMapSize;
|
||||||
|
|
||||||
AudioDataStruct _soundData[3];
|
AudioDataStruct _soundData[3];
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// game initialization
|
// game initialization
|
||||||
void startup();
|
void startup();
|
||||||
@ -841,11 +618,11 @@ protected:
|
|||||||
bool _chatAltFlag;
|
bool _chatAltFlag;
|
||||||
|
|
||||||
// sequence player
|
// sequence player
|
||||||
ActiveWSA *_activeWSA;
|
/* ActiveWSA *_activeWSA;
|
||||||
ActiveText *_activeText;
|
ActiveText *_activeText;
|
||||||
|
*/
|
||||||
const char * const *_sequencePakList;
|
/*const char * const *_sequencePakList;
|
||||||
int _sequencePakListSize;
|
int _sequencePakListSize;*/
|
||||||
const char * const *_ingamePakList;
|
const char * const *_ingamePakList;
|
||||||
int _ingamePakListSize;
|
int _ingamePakListSize;
|
||||||
|
|
||||||
@ -861,34 +638,33 @@ protected:
|
|||||||
int _cdaTrackTableIngameSize;
|
int _cdaTrackTableIngameSize;
|
||||||
const uint8 *_cdaTrackTableFinale;
|
const uint8 *_cdaTrackTableFinale;
|
||||||
int _cdaTrackTableFinaleSize;
|
int _cdaTrackTableFinaleSize;
|
||||||
const char * const *_sequenceSoundList;
|
|
||||||
int _sequenceSoundListSize;
|
|
||||||
const char * const *_ingameSoundList;
|
const char * const *_ingameSoundList;
|
||||||
int _ingameSoundListSize;
|
int _ingameSoundListSize;
|
||||||
const uint16 *_ingameSoundIndex;
|
const uint16 *_ingameSoundIndex;
|
||||||
int _ingameSoundIndexSize;
|
int _ingameSoundIndexSize;
|
||||||
const char * const *_sequenceStrings;
|
|
||||||
int _sequenceStringsSize;
|
|
||||||
const uint16 *_ingameTalkObjIndex;
|
const uint16 *_ingameTalkObjIndex;
|
||||||
int _ingameTalkObjIndexSize;
|
int _ingameTalkObjIndexSize;
|
||||||
const char * const *_ingameTimJpStr;
|
const char * const *_ingameTimJpStr;
|
||||||
int _ingameTimJpStrSize;
|
int _ingameTimJpStrSize;
|
||||||
const HofSeqData *_sequences;
|
|
||||||
const ItemAnimDefinition *_itemAnimDefinition;
|
const ItemAnimDefinition *_itemAnimDefinition;
|
||||||
int _itemAnimDefinitionSize;
|
int _itemAnimDefinitionSize;
|
||||||
|
|
||||||
|
/*const HofSeqData *_sequences;
|
||||||
|
|
||||||
const ItemAnimData_v1 *_demoAnimData;
|
const ItemAnimData_v1 *_demoAnimData;
|
||||||
int _demoAnimSize;
|
int _demoAnimSize;
|
||||||
|
|
||||||
int _sequenceStringsDuration[33];
|
int _sequenceStringsDuration[33];*/
|
||||||
|
|
||||||
static const uint8 _seqTextColorPresets[];
|
/* static const uint8 _seqTextColorPresets[];
|
||||||
char *_seqProcessedString;
|
char *_seqProcessedString;
|
||||||
WSAMovie_v2 *_seqWsa;
|
WSAMovie_v2 *_seqWsa;
|
||||||
|
|
||||||
bool _abortIntroFlag;
|
bool _abortIntroFlag;
|
||||||
int _menuChoice;
|
int _menuChoice;*/
|
||||||
|
|
||||||
uint32 _seqFrameDelay;
|
/*uint32 _seqFrameDelay;
|
||||||
uint32 _seqStartTime;
|
uint32 _seqStartTime;
|
||||||
uint32 _seqSubFrameStartTime;
|
uint32 _seqSubFrameStartTime;
|
||||||
uint32 _seqEndTime;
|
uint32 _seqEndTime;
|
||||||
@ -902,10 +678,7 @@ protected:
|
|||||||
bool _seqSpecialFlag;
|
bool _seqSpecialFlag;
|
||||||
bool _seqSubframePlaying;
|
bool _seqSubframePlaying;
|
||||||
uint8 _seqTextColor[2];
|
uint8 _seqTextColor[2];
|
||||||
uint8 _seqTextColorMap[16];
|
uint8 _seqTextColorMap[16];*/
|
||||||
|
|
||||||
const SeqProc *_callbackS;
|
|
||||||
const SeqProc *_callbackN;
|
|
||||||
|
|
||||||
static const uint8 _rainbowRoomData[];
|
static const uint8 _rainbowRoomData[];
|
||||||
|
|
||||||
|
@ -134,6 +134,8 @@ public:
|
|||||||
const uint8 * const *palTable1() { return &_specialPalettes[0]; }
|
const uint8 * const *palTable1() { return &_specialPalettes[0]; }
|
||||||
const uint8 * const *palTable2() { return &_specialPalettes[29]; }
|
const uint8 * const *palTable2() { return &_specialPalettes[29]; }
|
||||||
|
|
||||||
|
const AudioDataStruct *soundData(int index) { return &_soundData[index]; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual Common::Error go();
|
virtual Common::Error go();
|
||||||
virtual Common::Error init();
|
virtual Common::Error init();
|
||||||
|
@ -172,19 +172,6 @@ Common::Error KyraEngine_v1::init() {
|
|||||||
assert(_res);
|
assert(_res);
|
||||||
_res->reset();
|
_res->reset();
|
||||||
|
|
||||||
if (_flags.isDemo) {
|
|
||||||
// HACK: check whether this is the HOF demo or the LOL demo.
|
|
||||||
// The LOL demo needs to be detected and run as KyraEngine_HoF,
|
|
||||||
// but the static resource loader and the sequence player will
|
|
||||||
// need correct IDs.
|
|
||||||
if (_res->exists("scene1.cps"))
|
|
||||||
#ifdef ENABLE_LOL
|
|
||||||
_flags.gameID = GI_LOL;
|
|
||||||
#else
|
|
||||||
error("Lands of Lore demo is not supported in this build");
|
|
||||||
#endif // !ENABLE_LOL
|
|
||||||
}
|
|
||||||
|
|
||||||
_staticres = new StaticResource(this);
|
_staticres = new StaticResource(this);
|
||||||
assert(_staticres);
|
assert(_staticres);
|
||||||
if (!_staticres->init())
|
if (!_staticres->init())
|
||||||
|
@ -242,6 +242,8 @@ public:
|
|||||||
virtual bool snd_voiceIsPlaying();
|
virtual bool snd_voiceIsPlaying();
|
||||||
virtual void snd_stopVoice();
|
virtual void snd_stopVoice();
|
||||||
|
|
||||||
|
virtual const AudioDataStruct *soundData(int index) { return 0; }
|
||||||
|
|
||||||
// delay functionallity
|
// delay functionallity
|
||||||
virtual void delayUntil(uint32 timestamp, bool updateGameTimers = false, bool update = false, bool isMainLoop = false);
|
virtual void delayUntil(uint32 timestamp, bool updateGameTimers = false, bool update = false, bool isMainLoop = false);
|
||||||
virtual void delay(uint32 millis, bool update = false, bool isMainLoop = false);
|
virtual void delay(uint32 millis, bool update = false, bool isMainLoop = false);
|
||||||
|
@ -499,6 +499,11 @@ void LoLEngine::initKeymap() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LoLEngine::pauseEngineIntern(bool pause) {
|
||||||
|
KyraEngine_v1::pauseEngineIntern(pause);
|
||||||
|
pauseDemoPlayer(pause);
|
||||||
|
}
|
||||||
|
|
||||||
Common::Error LoLEngine::go() {
|
Common::Error LoLEngine::go() {
|
||||||
int action = -1;
|
int action = -1;
|
||||||
|
|
||||||
@ -2361,7 +2366,7 @@ int LoLEngine::processMagicIce(int charNum, int spellLevel) {
|
|||||||
|
|
||||||
playSpellAnimation(0, 0, 0, 2, 0, 0, 0, s.getData(), tpal.getData(), 40, false);
|
playSpellAnimation(0, 0, 0, 2, 0, 0, 0, s.getData(), tpal.getData(), 40, false);
|
||||||
|
|
||||||
_screen->fadePaletteStep(s.getData(), tpal.getData(), _system->getMillis(), _tickLength);
|
_screen->timedPaletteFadeStep(s.getData(), tpal.getData(), _system->getMillis(), _tickLength);
|
||||||
if (mov->opened()) {
|
if (mov->opened()) {
|
||||||
int r = true;
|
int r = true;
|
||||||
if (spellLevel > 2) {
|
if (spellLevel > 2) {
|
||||||
@ -2430,7 +2435,7 @@ int LoLEngine::processMagicIce(int charNum, int spellLevel) {
|
|||||||
|
|
||||||
playSpellAnimation(0, 0, 0, 2, 0, 0, 0, tpal.getData(), swampCol.getData(), 40, 0);
|
playSpellAnimation(0, 0, 0, 2, 0, 0, 0, tpal.getData(), swampCol.getData(), 40, 0);
|
||||||
|
|
||||||
_screen->fadePaletteStep(tpal.getData(), swampCol.getData(), _system->getMillis(), _tickLength);
|
_screen->timedPaletteFadeStep(tpal.getData(), swampCol.getData(), _system->getMillis(), _tickLength);
|
||||||
|
|
||||||
if (breakWall)
|
if (breakWall)
|
||||||
breakIceWall(tpal.getData(), swampCol.getData());
|
breakIceWall(tpal.getData(), swampCol.getData());
|
||||||
@ -2886,7 +2891,7 @@ int LoLEngine::processMagicVaelansCube() {
|
|||||||
uint32 endTime = _system->getMillis() + 70 * _tickLength;
|
uint32 endTime = _system->getMillis() + 70 * _tickLength;
|
||||||
|
|
||||||
while (_system->getMillis() < endTime) {
|
while (_system->getMillis() < endTime) {
|
||||||
_screen->fadePaletteStep(tmpPal1, tmpPal2, _system->getMillis() - ctime, 70 * _tickLength);
|
_screen->timedPaletteFadeStep(tmpPal1, tmpPal2, _system->getMillis() - ctime, 70 * _tickLength);
|
||||||
updateInput();
|
updateInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2915,7 +2920,7 @@ int LoLEngine::processMagicVaelansCube() {
|
|||||||
endTime = _system->getMillis() + 70 * _tickLength;
|
endTime = _system->getMillis() + 70 * _tickLength;
|
||||||
|
|
||||||
while (_system->getMillis() < endTime) {
|
while (_system->getMillis() < endTime) {
|
||||||
_screen->fadePaletteStep(tmpPal2, tmpPal1, _system->getMillis() - ctime, 70 * _tickLength);
|
_screen->timedPaletteFadeStep(tmpPal2, tmpPal1, _system->getMillis() - ctime, 70 * _tickLength);
|
||||||
updateInput();
|
updateInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3244,7 +3249,7 @@ void LoLEngine::playSpellAnimation(WSAMovie_v2 *mov, int firstFrame, int lastFra
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_screen->fadePaletteStep(pal1, pal2, _system->getMillis() - startTime, _tickLength * fadeDelay) && !mov)
|
if (!_screen->timedPaletteFadeStep(pal1, pal2, _system->getMillis() - startTime, _tickLength * fadeDelay) && !mov)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (del) {
|
if (del) {
|
||||||
|
@ -270,9 +270,13 @@ public:
|
|||||||
|
|
||||||
virtual void initKeymap();
|
virtual void initKeymap();
|
||||||
|
|
||||||
|
void pauseEngineIntern(bool pause);
|
||||||
|
|
||||||
Screen *screen();
|
Screen *screen();
|
||||||
GUI *gui() const;
|
GUI *gui() const;
|
||||||
|
|
||||||
|
const AudioDataStruct *soundData(int index) { return &_soundData[index]; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Screen_LoL *_screen;
|
Screen_LoL *_screen;
|
||||||
GUI_LoL *_gui;
|
GUI_LoL *_gui;
|
||||||
@ -400,6 +404,10 @@ private:
|
|||||||
static const int _outroMonsterScaleTableX[];
|
static const int _outroMonsterScaleTableX[];
|
||||||
static const int _outroMonsterScaleTableY[];
|
static const int _outroMonsterScaleTableY[];
|
||||||
|
|
||||||
|
// Non-interactive demo
|
||||||
|
int playDemo();
|
||||||
|
void pauseDemoPlayer(bool toggle);
|
||||||
|
|
||||||
// timers
|
// timers
|
||||||
void setupTimers();
|
void setupTimers();
|
||||||
|
|
||||||
|
@ -742,6 +742,8 @@ enum KyraResources {
|
|||||||
struct Shape;
|
struct Shape;
|
||||||
struct Room;
|
struct Room;
|
||||||
struct AmigaSfxTable;
|
struct AmigaSfxTable;
|
||||||
|
struct HoFSeqData;
|
||||||
|
struct HoFSeqItemAnimData;
|
||||||
|
|
||||||
class StaticResource {
|
class StaticResource {
|
||||||
public:
|
public:
|
||||||
@ -760,8 +762,8 @@ public:
|
|||||||
const Shape *loadShapeTable(int id, int &entries);
|
const Shape *loadShapeTable(int id, int &entries);
|
||||||
const AmigaSfxTable *loadAmigaSfxTable(int id, int &entries);
|
const AmigaSfxTable *loadAmigaSfxTable(int id, int &entries);
|
||||||
const Room *loadRoomTable(int id, int &entries);
|
const Room *loadRoomTable(int id, int &entries);
|
||||||
const HofSeqData *loadHofSequenceData(int id, int &entries);
|
const HoFSeqData *loadHoFSequenceData(int id, int &entries);
|
||||||
const ItemAnimData_v1 *loadShapeAnimData_v1(int id, int &entries);
|
const HoFSeqItemAnimData *loadHoFSeqItemAnimData(int id, int &entries);
|
||||||
const ItemAnimDefinition *loadItemAnimDefinition(int id, int &entries);
|
const ItemAnimDefinition *loadItemAnimDefinition(int id, int &entries);
|
||||||
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
|
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
|
||||||
const uint16 *loadRawDataBe16(int id, int &entries);
|
const uint16 *loadRawDataBe16(int id, int &entries);
|
||||||
@ -803,8 +805,8 @@ private:
|
|||||||
bool loadShapeTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
bool loadShapeTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
||||||
bool loadAmigaSfxTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
bool loadAmigaSfxTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
||||||
bool loadRoomTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
bool loadRoomTable(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
||||||
bool loadHofSequenceData(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
bool loadHoFSequenceData(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
||||||
bool loadShapeAnimData_v1(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
bool loadHoFSeqItemAnimData(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
||||||
bool loadItemAnimDefinition(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
bool loadItemAnimDefinition(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
||||||
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
|
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
|
||||||
bool loadRawDataBe16(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
bool loadRawDataBe16(Common::SeekableReadStream &stream, void *&ptr, int &size);
|
||||||
@ -829,8 +831,8 @@ private:
|
|||||||
void freeShapeTable(void *&ptr, int &size);
|
void freeShapeTable(void *&ptr, int &size);
|
||||||
void freeAmigaSfxTable(void *&ptr, int &size);
|
void freeAmigaSfxTable(void *&ptr, int &size);
|
||||||
void freeRoomTable(void *&ptr, int &size);
|
void freeRoomTable(void *&ptr, int &size);
|
||||||
void freeHofSequenceData(void *&ptr, int &size);
|
void freeHoFSequenceData(void *&ptr, int &size);
|
||||||
void freeHofShapeAnimDataV1(void *&ptr, int &size);
|
void freeHoFSeqItemAnimData(void *&ptr, int &size);
|
||||||
void freeItemAnimDefinition(void *&ptr, int &size);
|
void freeItemAnimDefinition(void *&ptr, int &size);
|
||||||
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
|
#if defined(ENABLE_EOB) || defined(ENABLE_LOL)
|
||||||
void freeRawDataBe16(void *&ptr, int &size);
|
void freeRawDataBe16(void *&ptr, int &size);
|
||||||
@ -857,7 +859,7 @@ private:
|
|||||||
kAmigaSfxTable = 4,
|
kAmigaSfxTable = 4,
|
||||||
|
|
||||||
k2SeqData = 5,
|
k2SeqData = 5,
|
||||||
k2ShpAnimDataV1 = 6,
|
k2SeqItemAnimData = 6,
|
||||||
k2ItemAnimDefinition = 7,
|
k2ItemAnimDefinition = 7,
|
||||||
|
|
||||||
kLoLCharData = 8,
|
kLoLCharData = 8,
|
||||||
|
@ -1183,11 +1183,11 @@ void LoLEngine::processGasExplosion(int soundId) {
|
|||||||
p2[i * 3] = 0x3f;
|
p2[i * 3] = 0x3f;
|
||||||
|
|
||||||
uint32 ctime = _system->getMillis();
|
uint32 ctime = _system->getMillis();
|
||||||
while (_screen->fadePaletteStep(_screen->getPalette(0).getData(), p2, _system->getMillis() - ctime, 10))
|
while (_screen->timedPaletteFadeStep(_screen->getPalette(0).getData(), p2, _system->getMillis() - ctime, 10))
|
||||||
updateInput();
|
updateInput();
|
||||||
|
|
||||||
ctime = _system->getMillis();
|
ctime = _system->getMillis();
|
||||||
while (_screen->fadePaletteStep(p2, _screen->getPalette(0).getData(), _system->getMillis() - ctime, 50))
|
while (_screen->timedPaletteFadeStep(p2, _screen->getPalette(0).getData(), _system->getMillis() - ctime, 50))
|
||||||
updateInput();
|
updateInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,12 +93,6 @@ void Screen_HoF::cmpFadeFrameStep(int srcPage, int srcW, int srcH, int srcX, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Screen_HoF::copyPageMemory(int srcPage, int srcPos, int dstPage, int dstPos, int numBytes) {
|
|
||||||
const uint8 *src = getPagePtr(srcPage) + srcPos;
|
|
||||||
uint8 *dst = getPagePtr(dstPage) + dstPos;
|
|
||||||
memcpy(dst, src, numBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Screen_HoF::copyRegionEx(int srcPage, int srcW, int srcH, int dstPage, int dstX, int dstY, int dstW, int dstH, const ScreenDim *dim, bool flag) {
|
void Screen_HoF::copyRegionEx(int srcPage, int srcW, int srcH, int dstPage, int dstX, int dstY, int dstW, int dstH, const ScreenDim *dim, bool flag) {
|
||||||
int x0 = dim->sx << 3;
|
int x0 = dim->sx << 3;
|
||||||
int y0 = dim->sy;
|
int y0 = dim->sy;
|
||||||
|
@ -37,7 +37,7 @@ public:
|
|||||||
// sequence player
|
// sequence player
|
||||||
void generateGrayOverlay(const Palette &pal, uint8 *grayOverlay, int factor, int addR, int addG, int addB, int lastColor, bool flag);
|
void generateGrayOverlay(const Palette &pal, uint8 *grayOverlay, int factor, int addR, int addG, int addB, int lastColor, bool flag);
|
||||||
void cmpFadeFrameStep(int srcPage, int srcW, int srcH, int srcX, int srcY, int dstPage, int dstW, int dstH, int dstX, int dstY, int cmpW, int cmpH, int cmpPage);
|
void cmpFadeFrameStep(int srcPage, int srcW, int srcH, int srcX, int srcY, int dstPage, int dstW, int dstH, int dstX, int dstY, int cmpW, int cmpH, int cmpPage);
|
||||||
void copyPageMemory(int srcPage, int srcPos, int dstPage, int dstPos, int numBytes);
|
|
||||||
void copyRegionEx(int srcPage, int srcW, int srcH, int dstPage, int dstX,int dstY, int dstW, int dstH, const ScreenDim *d, bool flag = false);
|
void copyRegionEx(int srcPage, int srcW, int srcH, int dstPage, int dstX,int dstY, int dstW, int dstH, const ScreenDim *d, bool flag = false);
|
||||||
private:
|
private:
|
||||||
KyraEngine_HoF *_vm;
|
KyraEngine_HoF *_vm;
|
||||||
|
@ -808,34 +808,6 @@ bool Screen_LoL::fadeColor(int dstColorIndex, int srcColorIndex, uint32 elapsedT
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Screen_LoL::fadePaletteStep(uint8 *pal1, uint8 *pal2, uint32 elapsedTime, uint32 targetTime) {
|
|
||||||
Palette &p1 = getPalette(1);
|
|
||||||
|
|
||||||
bool res = false;
|
|
||||||
for (int i = 0; i < p1.getNumColors() * 3; i++) {
|
|
||||||
uint8 out = 0;
|
|
||||||
|
|
||||||
if (elapsedTime < targetTime) {
|
|
||||||
int32 d = ((pal2[i] & 0x3f) - (pal1[i] & 0x3f));
|
|
||||||
if (d)
|
|
||||||
res = true;
|
|
||||||
|
|
||||||
int32 val = ((((d << 8) / (int32)targetTime) * (int32)elapsedTime) >> 8);
|
|
||||||
out = ((pal1[i] & 0x3f) + (int8)val);
|
|
||||||
} else {
|
|
||||||
out = p1[i] = (pal2[i] & 0x3f);
|
|
||||||
res = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*_internFadePalette)[i] = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
setScreenPalette(*_internFadePalette);
|
|
||||||
updateScreen();
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
Palette **Screen_LoL::generateFadeTable(Palette **dst, Palette *src1, Palette *src2, int numTabs) {
|
Palette **Screen_LoL::generateFadeTable(Palette **dst, Palette *src1, Palette *src2, int numTabs) {
|
||||||
int len = _use16ColorMode ? 48 : 768;
|
int len = _use16ColorMode ? 48 : 768;
|
||||||
if (!src1)
|
if (!src1)
|
||||||
|
@ -65,7 +65,6 @@ public:
|
|||||||
void loadSpecialColors(Palette &dst);
|
void loadSpecialColors(Palette &dst);
|
||||||
void copyColor(int dstColorIndex, int srcColorIndex);
|
void copyColor(int dstColorIndex, int srcColorIndex);
|
||||||
bool fadeColor(int dstColorIndex, int srcColorIndex, uint32 elapsedTicks, uint32 totalTicks);
|
bool fadeColor(int dstColorIndex, int srcColorIndex, uint32 elapsedTicks, uint32 totalTicks);
|
||||||
bool fadePaletteStep(uint8 *pal1, uint8 *pal2, uint32 elapsedTime, uint32 targetTime);
|
|
||||||
Palette **generateFadeTable(Palette **dst, Palette *src1, Palette *src2, int numTabs);
|
Palette **generateFadeTable(Palette **dst, Palette *src1, Palette *src2, int numTabs);
|
||||||
|
|
||||||
void generateGrayOverlay(const Palette &Pal, uint8 *grayOverlay, int factor, int addR, int addG, int addB, int lastColor, bool skipSpecialColors);
|
void generateGrayOverlay(const Palette &Pal, uint8 *grayOverlay, int factor, int addR, int addG, int addB, int lastColor, bool skipSpecialColors);
|
||||||
|
@ -162,6 +162,34 @@ void Screen_v2::getFadeParams(const Palette &pal, int delay, int &delayInc, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Screen_v2::timedPaletteFadeStep(uint8 *pal1, uint8 *pal2, uint32 elapsedTime, uint32 totalTime) {
|
||||||
|
Palette &p1 = getPalette(1);
|
||||||
|
|
||||||
|
bool res = false;
|
||||||
|
for (int i = 0; i < p1.getNumColors() * 3; i++) {
|
||||||
|
uint8 out = 0;
|
||||||
|
|
||||||
|
if (elapsedTime < totalTime) {
|
||||||
|
int32 d = ((pal2[i] & 0x3f) - (pal1[i] & 0x3f));
|
||||||
|
if (d)
|
||||||
|
res = true;
|
||||||
|
|
||||||
|
int32 val = ((((d << 8) / (int32)totalTime) * (int32)elapsedTime) >> 8);
|
||||||
|
out = ((pal1[i] & 0x3f) + (int8)val);
|
||||||
|
} else {
|
||||||
|
out = p1[i] = (pal2[i] & 0x3f);
|
||||||
|
res = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*_internFadePalette)[i] = out;
|
||||||
|
}
|
||||||
|
|
||||||
|
setScreenPalette(*_internFadePalette);
|
||||||
|
updateScreen();
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
const uint8 *Screen_v2::getPtrToShape(const uint8 *shpFile, int shape) {
|
const uint8 *Screen_v2::getPtrToShape(const uint8 *shpFile, int shape) {
|
||||||
uint16 shapes = READ_LE_UINT16(shpFile);
|
uint16 shapes = READ_LE_UINT16(shpFile);
|
||||||
|
|
||||||
@ -322,6 +350,12 @@ void Screen_v2::wsaFrameAnimationStep(int x1, int y1, int x2, int y2,
|
|||||||
addDirtyRect(x2, y2, w2, h2);
|
addDirtyRect(x2, y2, w2, h2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Screen_v2::copyPageMemory(int srcPage, int srcPos, int dstPage, int dstPos, int numBytes) {
|
||||||
|
const uint8 *src = getPagePtr(srcPage) + srcPos;
|
||||||
|
uint8 *dst = getPagePtr(dstPage) + dstPos;
|
||||||
|
memcpy(dst, src, numBytes);
|
||||||
|
}
|
||||||
|
|
||||||
bool Screen_v2::calcBounds(int w0, int h0, int &x1, int &y1, int &w1, int &h1, int &x2, int &y2, int &w2) {
|
bool Screen_v2::calcBounds(int w0, int h0, int &x1, int &y1, int &w1, int &h1, int &x2, int &y2, int &w2) {
|
||||||
x2 = 0;
|
x2 = 0;
|
||||||
y2 = 0;
|
y2 = 0;
|
||||||
|
@ -43,6 +43,8 @@ public:
|
|||||||
|
|
||||||
virtual void getFadeParams(const Palette &pal, int delay, int &delayInc, int &diff);
|
virtual void getFadeParams(const Palette &pal, int delay, int &delayInc, int &diff);
|
||||||
|
|
||||||
|
bool timedPaletteFadeStep(uint8 *pal1, uint8 *pal2, uint32 elapsedTime, uint32 totalTime);
|
||||||
|
|
||||||
// shape handling
|
// shape handling
|
||||||
uint8 *getPtrToShape(uint8 *shpFile, int shape);
|
uint8 *getPtrToShape(uint8 *shpFile, int shape);
|
||||||
const uint8 *getPtrToShape(const uint8 *shpFile, int shape);
|
const uint8 *getPtrToShape(const uint8 *shpFile, int shape);
|
||||||
@ -66,6 +68,9 @@ public:
|
|||||||
|
|
||||||
// special WSA handling
|
// special WSA handling
|
||||||
void wsaFrameAnimationStep(int x1, int y1, int x2, int y2, int w1, int h1, int w2, int h2, int srcPage, int dstPage, int dim);
|
void wsaFrameAnimationStep(int x1, int y1, int x2, int y2, int w1, int h1, int w2, int h2, int srcPage, int dstPage, int dim);
|
||||||
|
|
||||||
|
// used in non-interactive HoF/LoL demos
|
||||||
|
void copyPageMemory(int srcPage, int srcPos, int dstPage, int dstPos, int numBytes);
|
||||||
protected:
|
protected:
|
||||||
uint8 *_wsaFrameAnimBuffer;
|
uint8 *_wsaFrameAnimBuffer;
|
||||||
};
|
};
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -36,10 +36,15 @@ namespace Kyra {
|
|||||||
#pragma mark - Intro
|
#pragma mark - Intro
|
||||||
|
|
||||||
int LoLEngine::processPrologue() {
|
int LoLEngine::processPrologue() {
|
||||||
setupPrologueData(true);
|
// There are two non-interactive demos (one which plays the intro and another one) which plays a number of specific scenes.
|
||||||
|
// We try to identify the latter one by looking for a specific file.
|
||||||
if (!saveFileLoadable(0) || _flags.isDemo)
|
if (_flags.isDemo && _res->exists("scene1.cps")) {
|
||||||
showIntro();
|
return playDemo();
|
||||||
|
} else {
|
||||||
|
setupPrologueData(true);
|
||||||
|
if (!saveFileLoadable(0) || _flags.isDemo)
|
||||||
|
showIntro();
|
||||||
|
}
|
||||||
|
|
||||||
if (_flags.isDemo) {
|
if (_flags.isDemo) {
|
||||||
_screen->fadePalette(_screen->getPalette(1), 30, 0);
|
_screen->fadePalette(_screen->getPalette(1), 30, 0);
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "kyra/gui_lok.h"
|
#include "kyra/gui_lok.h"
|
||||||
#include "kyra/gui_hof.h"
|
#include "kyra/gui_hof.h"
|
||||||
#include "kyra/gui_mr.h"
|
#include "kyra/gui_mr.h"
|
||||||
|
#include "kyra/sequences_hof.h"
|
||||||
#include "kyra/sound_intern.h"
|
#include "kyra/sound_intern.h"
|
||||||
|
|
||||||
#include "common/endian.h"
|
#include "common/endian.h"
|
||||||
@ -245,8 +246,8 @@ bool StaticResource::init() {
|
|||||||
{ kAmigaSfxTable, proc(loadAmigaSfxTable), proc(freeAmigaSfxTable) },
|
{ kAmigaSfxTable, proc(loadAmigaSfxTable), proc(freeAmigaSfxTable) },
|
||||||
{ kRawData, proc(loadRawData), proc(freeRawData) },
|
{ kRawData, proc(loadRawData), proc(freeRawData) },
|
||||||
|
|
||||||
{ k2SeqData, proc(loadHofSequenceData), proc(freeHofSequenceData) },
|
{ k2SeqData, proc(loadHoFSequenceData), proc(freeHoFSequenceData) },
|
||||||
{ k2ShpAnimDataV1, proc(loadShapeAnimData_v1), proc(freeHofShapeAnimDataV1) },
|
{ k2SeqItemAnimData, proc(loadHoFSeqItemAnimData), proc(freeHoFSeqItemAnimData) },
|
||||||
{ k2ItemAnimDefinition, proc(loadItemAnimDefinition), proc(freeItemAnimDefinition) },
|
{ k2ItemAnimDefinition, proc(loadItemAnimDefinition), proc(freeItemAnimDefinition) },
|
||||||
|
|
||||||
#ifdef ENABLE_LOL
|
#ifdef ENABLE_LOL
|
||||||
@ -308,12 +309,12 @@ const Room *StaticResource::loadRoomTable(int id, int &entries) {
|
|||||||
return (const Room *)getData(id, StaticResource::kRoomList, entries);
|
return (const Room *)getData(id, StaticResource::kRoomList, entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
const HofSeqData *StaticResource::loadHofSequenceData(int id, int &entries) {
|
const HoFSeqData *StaticResource::loadHoFSequenceData(int id, int &entries) {
|
||||||
return (const HofSeqData *)getData(id, k2SeqData, entries);
|
return (const HoFSeqData *)getData(id, k2SeqData, entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemAnimData_v1 *StaticResource::loadShapeAnimData_v1(int id, int &entries) {
|
const HoFSeqItemAnimData *StaticResource::loadHoFSeqItemAnimData(int id, int &entries) {
|
||||||
return (const ItemAnimData_v1 *)getData(id, k2ShpAnimDataV1, entries);
|
return (const HoFSeqItemAnimData *)getData(id, k2SeqItemAnimData, entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemAnimDefinition *StaticResource::loadItemAnimDefinition(int id, int &entries) {
|
const ItemAnimDefinition *StaticResource::loadItemAnimDefinition(int id, int &entries) {
|
||||||
@ -513,12 +514,12 @@ bool StaticResource::loadRoomTable(Common::SeekableReadStream &stream, void *&pt
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StaticResource::loadHofSequenceData(Common::SeekableReadStream &stream, void *&ptr, int &size) {
|
bool StaticResource::loadHoFSequenceData(Common::SeekableReadStream &stream, void *&ptr, int &size) {
|
||||||
int numSeq = stream.readUint16BE();
|
int numSeq = stream.readUint16BE();
|
||||||
uint32 offset = 2;
|
uint32 offset = 2;
|
||||||
Sequence *tmp_s = new Sequence[numSeq];
|
HoFSequence *tmp_s = new HoFSequence[numSeq];
|
||||||
|
|
||||||
size = sizeof(HofSeqData) + numSeq * (sizeof(Sequence) + 28);
|
size = sizeof(HoFSeqData) + numSeq * (sizeof(HoFSequence) + 28);
|
||||||
|
|
||||||
for (int i = 0; i < numSeq; i++) {
|
for (int i = 0; i < numSeq; i++) {
|
||||||
stream.seek(offset, SEEK_SET); offset += 2;
|
stream.seek(offset, SEEK_SET); offset += 2;
|
||||||
@ -529,22 +530,22 @@ bool StaticResource::loadHofSequenceData(Common::SeekableReadStream &stream, voi
|
|||||||
stream.read(const_cast<char *>(tmp_s[i].wsaFile), 14);
|
stream.read(const_cast<char *>(tmp_s[i].wsaFile), 14);
|
||||||
tmp_s[i].cpsFile = new char[14];
|
tmp_s[i].cpsFile = new char[14];
|
||||||
stream.read(const_cast<char *>(tmp_s[i].cpsFile), 14);
|
stream.read(const_cast<char *>(tmp_s[i].cpsFile), 14);
|
||||||
tmp_s[i].startupCommand = stream.readByte();
|
tmp_s[i].fadeInTransitionType = stream.readByte();
|
||||||
tmp_s[i].finalCommand = stream.readByte();
|
tmp_s[i].fadeOutTransitionType = stream.readByte();
|
||||||
tmp_s[i].stringIndex1 = stream.readUint16BE();
|
tmp_s[i].stringIndex1 = stream.readUint16BE();
|
||||||
tmp_s[i].stringIndex2 = stream.readUint16BE();
|
tmp_s[i].stringIndex2 = stream.readUint16BE();
|
||||||
tmp_s[i].startFrame = stream.readUint16BE();
|
tmp_s[i].startFrame = stream.readUint16BE();
|
||||||
tmp_s[i].numFrames = stream.readUint16BE();
|
tmp_s[i].numFrames = stream.readUint16BE();
|
||||||
tmp_s[i].frameDelay = stream.readUint16BE();
|
tmp_s[i].duration = stream.readUint16BE();
|
||||||
tmp_s[i].xPos = stream.readUint16BE();
|
tmp_s[i].xPos = stream.readUint16BE();
|
||||||
tmp_s[i].yPos = stream.readUint16BE();
|
tmp_s[i].yPos = stream.readUint16BE();
|
||||||
tmp_s[i].duration = stream.readUint16BE();
|
tmp_s[i].timeout = stream.readUint16BE();
|
||||||
}
|
}
|
||||||
|
|
||||||
stream.seek(offset, SEEK_SET); offset += 2;
|
stream.seek(offset, SEEK_SET); offset += 2;
|
||||||
int numSeqN = stream.readUint16BE();
|
int numSeqN = stream.readUint16BE();
|
||||||
NestedSequence *tmp_n = new NestedSequence[numSeqN];
|
HoFNestedSequence *tmp_n = new HoFNestedSequence[numSeqN];
|
||||||
size += (numSeqN * (sizeof(NestedSequence) + 14));
|
size += (numSeqN * (sizeof(HoFNestedSequence) + 14));
|
||||||
|
|
||||||
for (int i = 0; i < numSeqN; i++) {
|
for (int i = 0; i < numSeqN; i++) {
|
||||||
stream.seek(offset, SEEK_SET); offset += 2;
|
stream.seek(offset, SEEK_SET); offset += 2;
|
||||||
@ -559,8 +560,8 @@ bool StaticResource::loadHofSequenceData(Common::SeekableReadStream &stream, voi
|
|||||||
tmp_n[i].x = stream.readUint16BE();
|
tmp_n[i].x = stream.readUint16BE();
|
||||||
tmp_n[i].y = stream.readUint16BE();
|
tmp_n[i].y = stream.readUint16BE();
|
||||||
uint16 ctrlOffs = stream.readUint16BE();
|
uint16 ctrlOffs = stream.readUint16BE();
|
||||||
tmp_n[i].startupCommand = stream.readUint16BE();
|
tmp_n[i].fadeInTransitionType = stream.readUint16BE();
|
||||||
tmp_n[i].finalCommand = stream.readUint16BE();
|
tmp_n[i].fadeOutTransitionType = stream.readUint16BE();
|
||||||
|
|
||||||
if (ctrlOffs) {
|
if (ctrlOffs) {
|
||||||
stream.seek(ctrlOffs, SEEK_SET);
|
stream.seek(ctrlOffs, SEEK_SET);
|
||||||
@ -580,21 +581,21 @@ bool StaticResource::loadHofSequenceData(Common::SeekableReadStream &stream, voi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HofSeqData *loadTo = new HofSeqData;
|
HoFSeqData *loadTo = new HoFSeqData;
|
||||||
assert(loadTo);
|
assert(loadTo);
|
||||||
|
|
||||||
loadTo->seq = tmp_s;
|
loadTo->seq = tmp_s;
|
||||||
loadTo->seqn = tmp_n;
|
loadTo->nestedSeq = tmp_n;
|
||||||
loadTo->numSeq = numSeq;
|
loadTo->numSeq = numSeq;
|
||||||
loadTo->numSeqn = numSeqN;
|
loadTo->numNestedSeq = numSeqN;
|
||||||
|
|
||||||
ptr = loadTo;
|
ptr = loadTo;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StaticResource::loadShapeAnimData_v1(Common::SeekableReadStream &stream, void *&ptr, int &size) {
|
bool StaticResource::loadHoFSeqItemAnimData(Common::SeekableReadStream &stream, void *&ptr, int &size) {
|
||||||
size = stream.readByte();
|
size = stream.readByte();
|
||||||
ItemAnimData_v1 *loadTo = new ItemAnimData_v1[size];
|
HoFSeqItemAnimData *loadTo = new HoFSeqItemAnimData[size];
|
||||||
assert(loadTo);
|
assert(loadTo);
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
@ -670,8 +671,8 @@ void StaticResource::freeRoomTable(void *&ptr, int &size) {
|
|||||||
size = 0;
|
size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StaticResource::freeHofSequenceData(void *&ptr, int &size) {
|
void StaticResource::freeHoFSequenceData(void *&ptr, int &size) {
|
||||||
HofSeqData *h = (HofSeqData *)ptr;
|
HoFSeqData *h = (HoFSeqData *)ptr;
|
||||||
|
|
||||||
for (int i = 0; i < h->numSeq; i++) {
|
for (int i = 0; i < h->numSeq; i++) {
|
||||||
delete[] h->seq[i].wsaFile;
|
delete[] h->seq[i].wsaFile;
|
||||||
@ -679,19 +680,19 @@ void StaticResource::freeHofSequenceData(void *&ptr, int &size) {
|
|||||||
}
|
}
|
||||||
delete[] h->seq;
|
delete[] h->seq;
|
||||||
|
|
||||||
for (int i = 0; i < h->numSeqn; i++) {
|
for (int i = 0; i < h->numNestedSeq; i++) {
|
||||||
delete[] h->seqn[i].wsaFile;
|
delete[] h->nestedSeq[i].wsaFile;
|
||||||
delete[] h->seqn[i].wsaControl;
|
delete[] h->nestedSeq[i].wsaControl;
|
||||||
}
|
}
|
||||||
delete[] h->seqn;
|
delete[] h->nestedSeq;
|
||||||
|
|
||||||
delete h;
|
delete h;
|
||||||
ptr = 0;
|
ptr = 0;
|
||||||
size = 0;
|
size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StaticResource::freeHofShapeAnimDataV1(void *&ptr, int &size) {
|
void StaticResource::freeHoFSeqItemAnimData(void *&ptr, int &size) {
|
||||||
ItemAnimData_v1 *d = (ItemAnimData_v1 *)ptr;
|
HoFSeqItemAnimData *d = (HoFSeqItemAnimData *)ptr;
|
||||||
for (int i = 0; i < size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
delete[] d[i].frames;
|
delete[] d[i].frames;
|
||||||
delete[] d;
|
delete[] d;
|
||||||
@ -994,9 +995,7 @@ void KyraEngine_LoK::loadMainScreen(int page) {
|
|||||||
void KyraEngine_HoF::initStaticResource() {
|
void KyraEngine_HoF::initStaticResource() {
|
||||||
int tmpSize = 0;
|
int tmpSize = 0;
|
||||||
|
|
||||||
_sequencePakList = _staticres->loadStrings(k2SeqplayPakFiles, _sequencePakListSize);
|
|
||||||
_ingamePakList = _staticres->loadStrings(k2IngamePakFiles, _ingamePakListSize);
|
_ingamePakList = _staticres->loadStrings(k2IngamePakFiles, _ingamePakListSize);
|
||||||
_sequenceStrings = _staticres->loadStrings(k2SeqplayStrings, _sequenceStringsSize);
|
|
||||||
_ingameSoundList = _staticres->loadStrings(k2IngameSfxFiles, _ingameSoundListSize);
|
_ingameSoundList = _staticres->loadStrings(k2IngameSfxFiles, _ingameSoundListSize);
|
||||||
_ingameSoundIndex = (const uint16 *)_staticres->loadRawData(k2IngameSfxIndex, _ingameSoundIndexSize);
|
_ingameSoundIndex = (const uint16 *)_staticres->loadRawData(k2IngameSfxIndex, _ingameSoundIndexSize);
|
||||||
_musicFileListIntro = _staticres->loadStrings(k2SeqplayIntroTracks, _musicFileListIntroSize);
|
_musicFileListIntro = _staticres->loadStrings(k2SeqplayIntroTracks, _musicFileListIntroSize);
|
||||||
@ -1009,33 +1008,6 @@ void KyraEngine_HoF::initStaticResource() {
|
|||||||
_ingameTimJpStr = _staticres->loadStrings(k2IngameTimJpStrings, _ingameTimJpStrSize);
|
_ingameTimJpStr = _staticres->loadStrings(k2IngameTimJpStrings, _ingameTimJpStrSize);
|
||||||
_itemAnimDefinition = _staticres->loadItemAnimDefinition(k2IngameShapeAnimData, _itemAnimDefinitionSize);
|
_itemAnimDefinition = _staticres->loadItemAnimDefinition(k2IngameShapeAnimData, _itemAnimDefinitionSize);
|
||||||
|
|
||||||
// replace sequence talkie files with localized versions
|
|
||||||
const char *const *seqSoundList = _staticres->loadStrings(k2SeqplaySfxFiles, _sequenceSoundListSize);
|
|
||||||
const char *const *tlkfiles = _staticres->loadStrings(k2SeqplayTlkFiles, tmpSize);
|
|
||||||
char **tmpSndLst = new char *[_sequenceSoundListSize];
|
|
||||||
|
|
||||||
for (int i = 0; i < _sequenceSoundListSize; i++) {
|
|
||||||
const int len = strlen(seqSoundList[i]);
|
|
||||||
|
|
||||||
tmpSndLst[i] = new char[len + 1];
|
|
||||||
tmpSndLst[i][0] = 0;
|
|
||||||
|
|
||||||
if (tlkfiles && len > 1) {
|
|
||||||
for (int ii = 0; ii < tmpSize; ii++) {
|
|
||||||
if (strlen(tlkfiles[ii]) > 1 && !scumm_stricmp(&seqSoundList[i][1], &tlkfiles[ii][1]))
|
|
||||||
strcpy(tmpSndLst[i], tlkfiles[ii]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tmpSndLst[i][0] == 0)
|
|
||||||
strcpy(tmpSndLst[i], seqSoundList[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
tlkfiles = seqSoundList = 0;
|
|
||||||
_staticres->unloadId(k2SeqplayTlkFiles);
|
|
||||||
_staticres->unloadId(k2SeqplaySfxFiles);
|
|
||||||
_sequenceSoundList = tmpSndLst;
|
|
||||||
|
|
||||||
// assign music data
|
// assign music data
|
||||||
static const char *const fmtMusicFileListIntro[] = { "intro%d.twn" };
|
static const char *const fmtMusicFileListIntro[] = { "intro%d.twn" };
|
||||||
static const char *const fmtMusicFileListFinale[] = { "finale%d.twn" };
|
static const char *const fmtMusicFileListFinale[] = { "finale%d.twn" };
|
||||||
@ -1074,66 +1046,6 @@ void KyraEngine_HoF::initStaticResource() {
|
|||||||
_soundData[2].fileList = pc98MusicFileListFinale;
|
_soundData[2].fileList = pc98MusicFileListFinale;
|
||||||
_soundData[2].fileListLen = 1;
|
_soundData[2].fileListLen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup sequence data
|
|
||||||
_sequences = _staticres->loadHofSequenceData(k2SeqplaySeqData, tmpSize);
|
|
||||||
|
|
||||||
static const SeqProc hofSequenceCallbacks[] = {
|
|
||||||
0, &KyraEngine_HoF::seq_introWestwood,
|
|
||||||
&KyraEngine_HoF::seq_introTitle, &KyraEngine_HoF::seq_introOverview,
|
|
||||||
&KyraEngine_HoF::seq_introLibrary, &KyraEngine_HoF::seq_introHand,
|
|
||||||
&KyraEngine_HoF::seq_introPoint, &KyraEngine_HoF::seq_introZanfaun,
|
|
||||||
&KyraEngine_HoF::seq_finaleFunters, &KyraEngine_HoF::seq_finaleFerb,
|
|
||||||
&KyraEngine_HoF::seq_finaleFish, &KyraEngine_HoF::seq_finaleFheep,
|
|
||||||
&KyraEngine_HoF::seq_finaleFarmer, &KyraEngine_HoF::seq_finaleFuards,
|
|
||||||
&KyraEngine_HoF::seq_finaleFirates, &KyraEngine_HoF::seq_finaleFrash
|
|
||||||
};
|
|
||||||
|
|
||||||
static const SeqProc hofNestedSequenceCallbacks[] = {
|
|
||||||
&KyraEngine_HoF::seq_finaleFiggle, &KyraEngine_HoF::seq_introOver1,
|
|
||||||
&KyraEngine_HoF::seq_introOver2, &KyraEngine_HoF::seq_introForest,
|
|
||||||
&KyraEngine_HoF::seq_introDragon, &KyraEngine_HoF::seq_introDarm,
|
|
||||||
&KyraEngine_HoF::seq_introLibrary2, &KyraEngine_HoF::seq_introLibrary2,
|
|
||||||
&KyraEngine_HoF::seq_introMarco, &KyraEngine_HoF::seq_introHand1a,
|
|
||||||
&KyraEngine_HoF::seq_introHand1b, &KyraEngine_HoF::seq_introHand1c,
|
|
||||||
&KyraEngine_HoF::seq_introHand2, &KyraEngine_HoF::seq_introHand3, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const SeqProc hofDemoSequenceCallbacks[] = {
|
|
||||||
&KyraEngine_HoF::seq_demoVirgin, &KyraEngine_HoF::seq_demoWestwood,
|
|
||||||
&KyraEngine_HoF::seq_demoTitle, &KyraEngine_HoF::seq_demoHill,
|
|
||||||
&KyraEngine_HoF::seq_demoOuthome, &KyraEngine_HoF::seq_demoWharf,
|
|
||||||
&KyraEngine_HoF::seq_demoDinob, &KyraEngine_HoF::seq_demoFisher, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const SeqProc hofDemoNestedSequenceCallbacks[] = {
|
|
||||||
&KyraEngine_HoF::seq_demoWharf2, &KyraEngine_HoF::seq_demoDinob2,
|
|
||||||
&KyraEngine_HoF::seq_demoWater, &KyraEngine_HoF::seq_demoBail,
|
|
||||||
&KyraEngine_HoF::seq_demoDig, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef ENABLE_LOL
|
|
||||||
static const SeqProc kLoLDemoSequenceCallbacks[] = {
|
|
||||||
&KyraEngine_HoF::seq_lolDemoScene1, 0, &KyraEngine_HoF::seq_lolDemoScene2, 0,
|
|
||||||
&KyraEngine_HoF::seq_lolDemoScene3, 0, &KyraEngine_HoF::seq_lolDemoScene4, 0,
|
|
||||||
&KyraEngine_HoF::seq_lolDemoScene5, &KyraEngine_HoF::seq_lolDemoText5,
|
|
||||||
&KyraEngine_HoF::seq_lolDemoScene6, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
static const SeqProc kLoLDemoNestedSequenceCallbacks[] = { 0 };
|
|
||||||
#endif // ENABLE_LOL
|
|
||||||
|
|
||||||
_callbackS =
|
|
||||||
#ifdef ENABLE_LOL
|
|
||||||
_flags.gameID == GI_LOL ? kLoLDemoSequenceCallbacks :
|
|
||||||
#endif // ENABLE_LOL
|
|
||||||
((_flags.isDemo && !_flags.isTalkie) ? hofDemoSequenceCallbacks : hofSequenceCallbacks);
|
|
||||||
|
|
||||||
_callbackN =
|
|
||||||
#ifdef ENABLE_LOL
|
|
||||||
_flags.gameID == GI_LOL ? kLoLDemoNestedSequenceCallbacks :
|
|
||||||
#endif // ENABLE_LOL
|
|
||||||
((_flags.isDemo && !_flags.isTalkie) ? hofDemoNestedSequenceCallbacks : hofNestedSequenceCallbacks);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void KyraEngine_MR::initStaticResource() {
|
void KyraEngine_MR::initStaticResource() {
|
||||||
@ -1412,8 +1324,6 @@ const int GUI_v2::_sliderBarsPosition[] = {
|
|||||||
|
|
||||||
// kyra 2 static res
|
// kyra 2 static res
|
||||||
|
|
||||||
const uint8 KyraEngine_HoF::_seqTextColorPresets[] = { 0x01, 0x01, 0x00, 0x3f, 0x3f, 0x3f };
|
|
||||||
|
|
||||||
const char *const KyraEngine_HoF::_languageExtension[] = {
|
const char *const KyraEngine_HoF::_languageExtension[] = {
|
||||||
"ENG",
|
"ENG",
|
||||||
"FRE",
|
"FRE",
|
||||||
|
Loading…
Reference in New Issue
Block a user