Fixed most bugs, so only cosmetic visual things left.
o Support transparency for characters. Needed for cockpit rendering o Fixed bug in NUT renderer which drawed transparent characters garbled o Fixed long-standing (and outstanding) bug with SAUD error o Previous fix fixed music in some cases (scene transitions) o Fixed bug with palette being reset when smush video is rewind o Made debug level for insane adjustable at compile time (maybe I will remove it later) svn-id: r12717
This commit is contained in:
parent
c40474322f
commit
8a2496d6c5
10 changed files with 113 additions and 94 deletions
|
@ -39,9 +39,8 @@
|
||||||
#include "scumm/insane/insane.h"
|
#include "scumm/insane/insane.h"
|
||||||
|
|
||||||
// TODO (in no particular order):
|
// TODO (in no particular order):
|
||||||
// o SAUD complaining again
|
// o Long TRS messages get rendered just in one line, so text overlaps
|
||||||
// o Insane::postCase16() has workaround. Cockpit is not transparent so it is
|
// o Approaching enemy animation is wrong sometimes
|
||||||
// disabled now
|
|
||||||
// o Code review/cleanup
|
// o Code review/cleanup
|
||||||
// o DOS demo INSANE
|
// o DOS demo INSANE
|
||||||
|
|
||||||
|
@ -149,8 +148,8 @@ void Insane::initvars(void) {
|
||||||
_posFatherTorque = 0;
|
_posFatherTorque = 0;
|
||||||
_posCave = 0;
|
_posCave = 0;
|
||||||
_posVista = 0;
|
_posVista = 0;
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_carIsBroken = false;
|
_carIsBroken = false;
|
||||||
_benHasGoggles = false;
|
_benHasGoggles = false;
|
||||||
_mineCaveIsNear = false;
|
_mineCaveIsNear = false;
|
||||||
|
@ -756,7 +755,7 @@ int32 Insane::idx2Tweak(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::smush_setToFinish(void) {
|
void Insane::smush_setToFinish(void) {
|
||||||
debug(5, "Video is set to finish");
|
debug(INSANE_DBG, "Video is set to finish");
|
||||||
_vm->_videoFinished = 1;
|
_vm->_videoFinished = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -800,7 +799,7 @@ void Insane::prepareScenePropScene(int32 scenePropNum, bool arg_4, bool arg_8) {
|
||||||
|
|
||||||
int tmp, idx = scenePropIdx[scenePropNum];
|
int tmp, idx = scenePropIdx[scenePropNum];
|
||||||
|
|
||||||
debug(5, "Insane::prepareScenePropScene(%d, %d, %d)", scenePropNum, arg_4, arg_8);
|
debug(INSANE_DBG, "Insane::prepareScenePropScene(%d, %d, %d)", scenePropNum, arg_4, arg_8);
|
||||||
|
|
||||||
if (!loadScenePropSounds(idx))
|
if (!loadScenePropSounds(idx))
|
||||||
return;
|
return;
|
||||||
|
@ -842,7 +841,7 @@ void Insane::queueSceneSwitch(int32 sceneId, byte *fluPtr, const char *filename,
|
||||||
int32 arg_C, int32 arg_10, int32 startFrame, int32 numFrames) {
|
int32 arg_C, int32 arg_10, int32 startFrame, int32 numFrames) {
|
||||||
int32 tmp;
|
int32 tmp;
|
||||||
|
|
||||||
debug(5, "queueSceneSwitch(%d, *, %s, %d, %d, %d, %d)", sceneId, filename, arg_C, arg_10,
|
debug(INSANE_DBG, "queueSceneSwitch(%d, *, %s, %d, %d, %d, %d)", sceneId, filename, arg_C, arg_10,
|
||||||
startFrame, numFrames);
|
startFrame, numFrames);
|
||||||
if (_needSceneSwitch || _sceneData1Loaded)
|
if (_needSceneSwitch || _sceneData1Loaded)
|
||||||
return;
|
return;
|
||||||
|
@ -861,7 +860,7 @@ void Insane::queueSceneSwitch(int32 sceneId, byte *fluPtr, const char *filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::smush_rewindCurrentSan(int arg_0, int arg_4, int arg_8) {
|
void Insane::smush_rewindCurrentSan(int arg_0, int arg_4, int arg_8) {
|
||||||
debug(5, "smush_rewindCurrentSan(%d, %d, %d)", arg_0, arg_4, arg_8);
|
debug(INSANE_DBG, "smush_rewindCurrentSan(%d, %d, %d)", arg_0, arg_4, arg_8);
|
||||||
_smush_setupsan2 = arg_0;
|
_smush_setupsan2 = arg_0;
|
||||||
|
|
||||||
smush_setupSanFile(0, 8, 0);
|
smush_setupSanFile(0, 8, 0);
|
||||||
|
@ -958,7 +957,7 @@ void Insane::escapeKeyHandler(void) {
|
||||||
if (_needSceneSwitch || _keyboardDisable)
|
if (_needSceneSwitch || _keyboardDisable)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
debug(5, "scene: %d", _currSceneId);
|
debug(INSANE_DBG, "scene: %d", _currSceneId);
|
||||||
switch (_currSceneId) {
|
switch (_currSceneId) {
|
||||||
case 1:
|
case 1:
|
||||||
queueSceneSwitch(1, _smush_minedrivFlu, "minedriv.san", 64, 0, _continueFrame1, 1300);
|
queueSceneSwitch(1, _smush_minedrivFlu, "minedriv.san", 64, 0, _continueFrame1, 1300);
|
||||||
|
@ -1184,7 +1183,6 @@ void Insane::smlayer_setActorLayer(int actornum, int actnum, int layer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::smlayer_setFluPalette(byte *pal, int shut_flag) {
|
void Insane::smlayer_setFluPalette(byte *pal, int shut_flag) {
|
||||||
// FIXME. We can't run it without SmushPlayer object
|
|
||||||
// if (shut_flag)
|
// if (shut_flag)
|
||||||
// // FIXME: shut colors and make picture appear smoothly
|
// // FIXME: shut colors and make picture appear smoothly
|
||||||
// SmushPlayer::setPalette(pal);
|
// SmushPlayer::setPalette(pal);
|
||||||
|
@ -1340,7 +1338,7 @@ void Insane::smlayer_setActorFacing(int actornum, int actnum, int frame, int dir
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *Insane::handleTrsTag(int32 trsId) {
|
const char *Insane::handleTrsTag(int32 trsId) {
|
||||||
debug(5, "Insane::handleTrsTag(%d)", trsId);
|
debug(INSANE_DBG, "Insane::handleTrsTag(%d)", trsId);
|
||||||
return _player->getString(trsId);
|
return _player->getString(trsId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1392,7 +1390,7 @@ void Insane::smush_setupSanWithFlu(const char *filename, int32 setupsan2, int32
|
||||||
byte *tmp = fluPtr;
|
byte *tmp = fluPtr;
|
||||||
int32 offset;
|
int32 offset;
|
||||||
|
|
||||||
debug(5, "smush_setupSanWithFlu(%s, %d, %d, %d, %d, %lx, %d)", filename, setupsan2,
|
debug(INSANE_DBG, "smush_setupSanWithFlu(%s, %d, %d, %d, %d, %lx, %d)", filename, setupsan2,
|
||||||
step1, step2, setupsan1, fluPtr, numFrames);
|
step1, step2, setupsan1, fluPtr, numFrames);
|
||||||
|
|
||||||
_smush_setupsan1 = setupsan1;
|
_smush_setupsan1 = setupsan1;
|
||||||
|
@ -1428,6 +1426,7 @@ void Insane::smush_setupSanWithFlu(const char *filename, int32 setupsan2, int32
|
||||||
|
|
||||||
void Insane::smush_setupSanFromStart(const char *filename, int32 setupsan2, int32 step1,
|
void Insane::smush_setupSanFromStart(const char *filename, int32 setupsan2, int32 step1,
|
||||||
int32 step2, int32 setupsan1) {
|
int32 step2, int32 setupsan1) {
|
||||||
|
debug(INSANE_DBG, "Insane::smush_setupFromStart(%s)", filename);
|
||||||
_smush_setupsan1 = setupsan1;
|
_smush_setupsan1 = setupsan1;
|
||||||
_smush_setupsan2 = setupsan2;
|
_smush_setupsan2 = setupsan2;
|
||||||
smush_setupSanFile(filename, 8, 0);
|
smush_setupSanFile(filename, 8, 0);
|
||||||
|
@ -1443,7 +1442,7 @@ void Insane::smush_setFrameSteps(int32 step1, int32 step2) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::smush_setupSanFile(const char *filename, int32 offset, int32 contFrame) {
|
void Insane::smush_setupSanFile(const char *filename, int32 offset, int32 contFrame) {
|
||||||
debug(5, "smush_setupSanFile(%s, %x, %d)", filename, offset, contFrame);
|
debug(INSANE_DBG, "Insane::smush_setupSanFile(%s, %x, %d)", filename, offset, contFrame);
|
||||||
|
|
||||||
_player->seekSan(filename, _vm->getGameDataPath(), offset, contFrame);
|
_player->seekSan(filename, _vm->getGameDataPath(), offset, contFrame);
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,8 @@ namespace Scumm {
|
||||||
#define EN_TORQUE 8 // Father Torque
|
#define EN_TORQUE 8 // Father Torque
|
||||||
#define EN_BEN 9 // used only with handler
|
#define EN_BEN 9 // used only with handler
|
||||||
|
|
||||||
|
#define INSANE_DBG 5
|
||||||
|
|
||||||
class Insane {
|
class Insane {
|
||||||
public:
|
public:
|
||||||
Insane(ScummEngine_v6 *scumm);
|
Insane(ScummEngine_v6 *scumm);
|
||||||
|
@ -163,8 +165,8 @@ class Insane {
|
||||||
int16 _posFatherTorque;
|
int16 _posFatherTorque;
|
||||||
int16 _posCave;
|
int16 _posCave;
|
||||||
int16 _posVista;
|
int16 _posVista;
|
||||||
bool _roadLeftBranch;
|
bool _roadBranch;
|
||||||
bool _roadRightBranch;
|
bool _roadStop;
|
||||||
bool _carIsBroken;
|
bool _carIsBroken;
|
||||||
bool _benHasGoggles;
|
bool _benHasGoggles;
|
||||||
bool _mineCaveIsNear;
|
bool _mineCaveIsNear;
|
||||||
|
@ -268,9 +270,6 @@ class Insane {
|
||||||
void readFileToMem(const char *name, byte **buf);
|
void readFileToMem(const char *name, byte **buf);
|
||||||
void startVideo(const char *filename, int num, int argC, int frameRate,
|
void startVideo(const char *filename, int num, int argC, int frameRate,
|
||||||
int doMainLoop, byte *fluPtr = 0, int32 numFrames = 0);
|
int doMainLoop, byte *fluPtr = 0, int32 numFrames = 0);
|
||||||
void smush_proc39(void);
|
|
||||||
void smush_proc40(void);
|
|
||||||
void smush_proc41(void);
|
|
||||||
void smush_warpMouse(int x, int y, int buttons);
|
void smush_warpMouse(int x, int y, int buttons);
|
||||||
void putActors(void);
|
void putActors(void);
|
||||||
void readState(void);
|
void readState(void);
|
||||||
|
|
|
@ -254,7 +254,7 @@ void Insane::mineChooseRoad(int32 buttons) {
|
||||||
smush_setToFinish();
|
smush_setToFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_roadLeftBranch && !_needSceneSwitch) {
|
if (_roadBranch && !_needSceneSwitch) {
|
||||||
_iactSceneId2 = _iactSceneId;
|
_iactSceneId2 = _iactSceneId;
|
||||||
queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
|
queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -275,7 +275,7 @@ void Insane::mineChooseRoad(int32 buttons) {
|
||||||
|
|
||||||
drawSpeedyActor(buttons);
|
drawSpeedyActor(buttons);
|
||||||
|
|
||||||
if ((buttons & 1) && _currSceneId == 1 && _roadLeftBranch && !_needSceneSwitch) {
|
if ((buttons & 1) && _currSceneId == 1 && _roadBranch && !_needSceneSwitch) {
|
||||||
_iactSceneId2 = _iactSceneId;
|
_iactSceneId2 = _iactSceneId;
|
||||||
queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
|
queueSceneSwitch(2, 0, "mineexit.san", 64, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -301,7 +301,7 @@ void Insane::mineChooseRoad(int32 buttons) {
|
||||||
if ((buttons & 1) == 0)
|
if ((buttons & 1) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_roadLeftBranch && !_needSceneSwitch) {
|
if (_roadBranch && !_needSceneSwitch) {
|
||||||
_iactSceneId2 = _iactSceneId;
|
_iactSceneId2 = _iactSceneId;
|
||||||
|
|
||||||
if (readArray(4) && _val211d < 3) {
|
if (readArray(4) && _val211d < 3) {
|
||||||
|
@ -312,7 +312,7 @@ void Insane::mineChooseRoad(int32 buttons) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_roadRightBranch) {
|
if (_roadStop) {
|
||||||
writeArray(1, _posBrokenTruck);
|
writeArray(1, _posBrokenTruck);
|
||||||
writeArray(3, _val57d);
|
writeArray(3, _val57d);
|
||||||
smush_setToFinish();
|
smush_setToFinish();
|
||||||
|
@ -338,7 +338,7 @@ void Insane::mineChooseRoad(int32 buttons) {
|
||||||
if ((buttons & 1) == 0)
|
if ((buttons & 1) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (_roadLeftBranch && !_needSceneSwitch) {
|
if (_roadBranch && !_needSceneSwitch) {
|
||||||
_iactSceneId2 = _iactSceneId;
|
_iactSceneId2 = _iactSceneId;
|
||||||
|
|
||||||
if (readArray(4) && _val211d < 3) {
|
if (readArray(4) && _val211d < 3) {
|
||||||
|
@ -349,7 +349,7 @@ void Insane::mineChooseRoad(int32 buttons) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_roadRightBranch) {
|
if (_roadStop) {
|
||||||
writeArray(1, _posBrokenTruck);
|
writeArray(1, _posBrokenTruck);
|
||||||
writeArray(3, _posVista);
|
writeArray(3, _posVista);
|
||||||
smush_setToFinish();
|
smush_setToFinish();
|
||||||
|
|
|
@ -133,20 +133,18 @@ void Insane::iactScene1(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
case 6:
|
case 6:
|
||||||
switch (par2) {
|
switch (par2) {
|
||||||
case 38:
|
case 38:
|
||||||
// left branch sign
|
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 50-19, 20-13, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 50-19, 20-13, 3,
|
||||||
_smush_iconsNut, 7, 0, 0);
|
_smush_iconsNut, 7, 0, 0);
|
||||||
_roadLeftBranch = true;
|
_roadBranch = true;
|
||||||
_iactSceneId = par4;
|
_iactSceneId = par4;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
if (readArray(4) != 0)
|
if (readArray(4) != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// right branch sign
|
smlayer_drawSomething(renderBitmap, codecparam, 160-13, 20-10, 3, // QW
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 160-19, 20-13, 3,
|
|
||||||
_smush_icons2Nut, 8, 0, 0);
|
_smush_icons2Nut, 8, 0, 0);
|
||||||
_roadRightBranch = true;
|
_roadStop = true;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
if (readArray(4) == 0 || readArray(6) == 0)
|
if (readArray(4) == 0 || readArray(6) == 0)
|
||||||
|
@ -437,16 +435,16 @@ void Insane::iactScene4(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 270-19, 20-13, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 270-19, 20-13, 3,
|
||||||
_smush_icons2Nut, 10, 0, 0);
|
_smush_icons2Nut, 10, 0, 0);
|
||||||
_roadLeftBranch = true;
|
_roadBranch = true;
|
||||||
_iactSceneId = par4;
|
_iactSceneId = par4;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
if (readArray(4) != 0)
|
if (readArray(4) != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 160-19, 20-13, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 160-13, 20-10, 3, // QW
|
||||||
_smush_icons2Nut, 8, 0, 0);
|
_smush_icons2Nut, 8, 0, 0);
|
||||||
_roadRightBranch = true;
|
_roadStop = true;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
if (readArray(4) == 0 || readArray(6) == 0)
|
if (readArray(4) == 0 || readArray(6) == 0)
|
||||||
|
@ -462,13 +460,13 @@ void Insane::iactScene4(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_carIsBroken = true;
|
_carIsBroken = true;
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 160-12, 20-10, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 160-13, 20-10, 3, // QW
|
||||||
_smush_icons2Nut, 8, 0, 0);
|
_smush_icons2Nut, 8, 0, 0);
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 50-19, 20-13, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 50-19, 20-13, 3,
|
||||||
_smush_icons2Nut, 9, 0, 0);
|
_smush_icons2Nut, 9, 0, 0);
|
||||||
_roadLeftBranch = true;
|
_roadBranch = true;
|
||||||
_iactSceneId = par4;
|
_iactSceneId = par4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -528,15 +526,15 @@ void Insane::iactScene6(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
case 38:
|
case 38:
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 270-19, 20-13, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 270-19, 20-13, 3,
|
||||||
_smush_icons2Nut, 10, 0, 0);
|
_smush_icons2Nut, 10, 0, 0);
|
||||||
_roadLeftBranch = true;
|
_roadBranch = true;
|
||||||
_iactSceneId = par4;
|
_iactSceneId = par4;
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
if (readArray(4) != 0)
|
if (readArray(4) != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_roadRightBranch = true;
|
_roadStop = true;
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 160-19, 20-13, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 160-13, 20-10, 3, //QW
|
||||||
_smush_icons2Nut, 8, 0, 0);
|
_smush_icons2Nut, 8, 0, 0);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
|
@ -553,13 +551,13 @@ void Insane::iactScene6(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_carIsBroken = true;
|
_carIsBroken = true;
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 160-12, 20-10, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 160-13, 20-10, 3, //QW
|
||||||
_smush_icons2Nut, 8, 0, 0);
|
_smush_icons2Nut, 8, 0, 0);
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 50-19, 20-13, 3,
|
smlayer_drawSomething(renderBitmap, codecparam, 50-19, 20-13, 3,
|
||||||
_smush_icons2Nut, 9, 0, 0);
|
_smush_icons2Nut, 9, 0, 0);
|
||||||
_roadLeftBranch = true;
|
_roadBranch = true;
|
||||||
_iactSceneId = par4;
|
_iactSceneId = par4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -591,7 +589,7 @@ void Insane::iactScene17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
case 38:
|
case 38:
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 28, 48, 1,
|
smlayer_drawSomething(renderBitmap, codecparam, 28, 48, 1,
|
||||||
_smush_iconsNut, 6, 0, 0);
|
_smush_iconsNut, 6, 0, 0);
|
||||||
_roadLeftBranch = true;
|
_roadBranch = true;
|
||||||
_iactSceneId = par4;
|
_iactSceneId = par4;
|
||||||
if (_counter1 <= 4) {
|
if (_counter1 <= 4) {
|
||||||
if (_counter1 == 4)
|
if (_counter1 == 4)
|
||||||
|
@ -602,7 +600,7 @@ void Insane::iactScene17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
_objectDetected = true;
|
_objectDetected = true;
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 10:
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 28, 48, 1,
|
smlayer_drawSomething(renderBitmap, codecparam, 28, 48, 1,
|
||||||
_smush_iconsNut, 6, 0, 0);
|
_smush_iconsNut, 6, 0, 0);
|
||||||
if (_counter1 <= 4) {
|
if (_counter1 <= 4) {
|
||||||
|
|
|
@ -55,7 +55,7 @@ void Insane::runScene(int arraynum) {
|
||||||
putActors();
|
putActors();
|
||||||
readState();
|
readState();
|
||||||
|
|
||||||
debug(5, "INSANE Arg: %d", readArray(0));
|
debug(INSANE_DBG, "INSANE Arg: %d", readArray(0));
|
||||||
|
|
||||||
switch (readArray(0)) {
|
switch (readArray(0)) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -164,7 +164,7 @@ void Insane::runScene(int arraynum) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int Insane::initScene(int sceneId) {
|
int Insane::initScene(int sceneId) {
|
||||||
debug(5, "initScene(%d)", sceneId);
|
debug(INSANE_DBG, "initScene(%d)", sceneId);
|
||||||
|
|
||||||
if (_needSceneSwitch)
|
if (_needSceneSwitch)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -186,7 +186,7 @@ int Insane::initScene(int sceneId) {
|
||||||
void Insane::stopSceneSounds(int sceneId) {
|
void Insane::stopSceneSounds(int sceneId) {
|
||||||
int flag = 0;
|
int flag = 0;
|
||||||
|
|
||||||
debug(5, "stopSceneSounds(%d)", sceneId);
|
debug(INSANE_DBG, "stopSceneSounds(%d)", sceneId);
|
||||||
|
|
||||||
switch (sceneId) {
|
switch (sceneId) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -278,7 +278,7 @@ void Insane::stopSceneSounds(int sceneId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::shutCurrentScene(void) {
|
void Insane::shutCurrentScene(void) {
|
||||||
debug(5, "shutCurrentScene()");
|
debug(INSANE_DBG, "shutCurrentScene()");
|
||||||
|
|
||||||
_currScenePropIdx = 0;
|
_currScenePropIdx = 0;
|
||||||
_currTrsMsg = 0;
|
_currTrsMsg = 0;
|
||||||
|
@ -307,7 +307,7 @@ void Insane::shutCurrentScene(void) {
|
||||||
int Insane::loadSceneData(int scene, int flag, int phase) {
|
int Insane::loadSceneData(int scene, int flag, int phase) {
|
||||||
int retvalue = 1;
|
int retvalue = 1;
|
||||||
|
|
||||||
debug(5, "Insane::loadSceneData(%d, %d, %d)", scene, flag, phase);
|
debug(INSANE_DBG, "Insane::loadSceneData(%d, %d, %d)", scene, flag, phase);
|
||||||
//if (phase == 1) /// FIXME
|
//if (phase == 1) /// FIXME
|
||||||
// insane_unlock();
|
// insane_unlock();
|
||||||
switch (scene) {
|
switch (scene) {
|
||||||
|
@ -601,7 +601,7 @@ int Insane::loadSceneData(int scene, int flag, int phase) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::setSceneCostumes(int sceneId) {
|
void Insane::setSceneCostumes(int sceneId) {
|
||||||
debug(5, "Insane::setSceneCostumes(%d)", sceneId);
|
debug(INSANE_DBG, "Insane::setSceneCostumes(%d)", sceneId);
|
||||||
|
|
||||||
switch (sceneId) {
|
switch (sceneId) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -651,7 +651,7 @@ void Insane::setSceneCostumes(int sceneId) {
|
||||||
void Insane::setEnemyCostumes(void) {
|
void Insane::setEnemyCostumes(void) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
debug(5, "setEnemyCostumes(%d)", _currEnemy);
|
debug(INSANE_DBG, "setEnemyCostumes(%d)", _currEnemy);
|
||||||
|
|
||||||
smlayer_setActorCostume(0, 2, readArray(12));
|
smlayer_setActorCostume(0, 2, readArray(12));
|
||||||
smlayer_setActorCostume(0, 0, readArray(14));
|
smlayer_setActorCostume(0, 0, readArray(14));
|
||||||
|
@ -987,8 +987,8 @@ void Insane::postCase11(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
_continueFrame, 1300);
|
_continueFrame, 1300);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase0(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase0(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1002,8 +1002,8 @@ void Insane::postCase0(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
smush_rewindCurrentSan(1088, -1, -1);
|
smush_rewindCurrentSan(1088, -1, -1);
|
||||||
|
|
||||||
_roadBumps = false;
|
_roadBumps = false;
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_benHasGoggles = false;
|
_benHasGoggles = false;
|
||||||
_mineCaveIsNear = false;
|
_mineCaveIsNear = false;
|
||||||
_continueFrame1 = curFrame;
|
_continueFrame1 = curFrame;
|
||||||
|
@ -1022,8 +1022,8 @@ void Insane::postCase17(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
writeArray(9, 0);
|
writeArray(9, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase16(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase16(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1043,11 +1043,10 @@ void Insane::postCase16(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
smlayer_showStatusMsg(-1, renderBitmap, codecparam, 202, 168, 1, 2, 0, "%s", buf);
|
smlayer_showStatusMsg(-1, renderBitmap, codecparam, 202, 168, 1, 2, 0, "%s", buf);
|
||||||
|
|
||||||
sprintf(buf, "^f01%02o", curFrame & 0xff);
|
sprintf(buf, "^f01%02o", curFrame & 0xff);
|
||||||
smlayer_showStatusMsg(-1, renderBitmap, codecparam, 140, 168, 1, 2, 0, "%s", buf);
|
smlayer_showStatusMsg(-1, renderBitmap, codecparam, 240, 168, 1, 2, 0, "%s", buf);
|
||||||
smlayer_showStatusMsg(-1, renderBitmap, codecparam, 170, 43, 1, 2, 0, "%s", buf);
|
smlayer_showStatusMsg(-1, renderBitmap, codecparam, 170, 43, 1, 2, 0, "%s", buf);
|
||||||
|
|
||||||
// FIXME: it should be transparent, so now it is disabled
|
smlayer_drawSomething(renderBitmap, codecparam, 0, 0, 1, _smush_bensgoggNut, 0, 0, 0);
|
||||||
//smlayer_drawSomething(renderBitmap, codecparam, 0, 0, 1, _smush_bensgoggNut, 0, 0, 0);
|
|
||||||
|
|
||||||
if (!_objectDetected)
|
if (!_objectDetected)
|
||||||
smlayer_drawSomething(renderBitmap, codecparam, 24, 170, 1,
|
smlayer_drawSomething(renderBitmap, codecparam, 24, 170, 1,
|
||||||
|
@ -1062,8 +1061,8 @@ void Insane::postCase16(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
_roadBumps = false;
|
_roadBumps = false;
|
||||||
_mineCaveIsNear = false;
|
_mineCaveIsNear = false;
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_objectDetected = false;
|
_objectDetected = false;
|
||||||
_counter1++;
|
_counter1++;
|
||||||
_continueFrame1 = curFrame;
|
_continueFrame1 = curFrame;
|
||||||
|
@ -1080,8 +1079,8 @@ void Insane::postCase1(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
queueSceneSwitch(flu->sceneId, *flu->fluPtr, flu->filenamePtr, 64, 0,
|
queueSceneSwitch(flu->sceneId, *flu->fluPtr, flu->filenamePtr, 64, 0,
|
||||||
flu->startFrame, flu->numFrames);
|
flu->startFrame, flu->numFrames);
|
||||||
}
|
}
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase2(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase2(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1096,8 +1095,8 @@ void Insane::postCase2(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
smush_rewindCurrentSan(1088, -1, -1);
|
smush_rewindCurrentSan(1088, -1, -1);
|
||||||
|
|
||||||
_roadBumps = false;
|
_roadBumps = false;
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_continueFrame = curFrame;
|
_continueFrame = curFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1110,8 +1109,8 @@ void Insane::postCase20(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
smush_rewindCurrentSan(1088, -1, -1);
|
smush_rewindCurrentSan(1088, -1, -1);
|
||||||
|
|
||||||
_roadBumps = false;
|
_roadBumps = false;
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_continueFrame = curFrame;
|
_continueFrame = curFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1154,8 +1153,8 @@ void Insane::postCase3(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
|
|
||||||
_carIsBroken = false;
|
_carIsBroken = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_iactSceneId = 0;
|
_iactSceneId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1186,8 +1185,8 @@ void Insane::postCase5(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
|
|
||||||
_carIsBroken = false;
|
_carIsBroken = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_iactSceneId = 0;
|
_iactSceneId = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1204,8 +1203,8 @@ void Insane::postCase6(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
queueSceneSwitch(flu->sceneId, *flu->fluPtr, flu->filenamePtr, 64, 0,
|
queueSceneSwitch(flu->sceneId, *flu->fluPtr, flu->filenamePtr, 64, 0,
|
||||||
flu->startFrame, flu->numFrames);
|
flu->startFrame, flu->numFrames);
|
||||||
}
|
}
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase8(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase8(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1226,8 +1225,8 @@ void Insane::postCase8(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase9(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase9(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1237,8 +1236,8 @@ void Insane::postCase9(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
queueSceneSwitch(1, _smush_minedrivFlu, "minedriv.san", 64, 0,
|
queueSceneSwitch(1, _smush_minedrivFlu, "minedriv.san", 64, 0,
|
||||||
_continueFrame1, 1300);
|
_continueFrame1, 1300);
|
||||||
}
|
}
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase10(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase10(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1287,8 +1286,8 @@ void Insane::postCase10(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase12(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase12(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1373,8 +1372,8 @@ void Insane::postCase12(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
if (curFrame >= maxFrame)
|
if (curFrame >= maxFrame)
|
||||||
smush_rewindCurrentSan(1088, -1, -1);
|
smush_rewindCurrentSan(1088, -1, -1);
|
||||||
|
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_continueFrame = curFrame;
|
_continueFrame = curFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1390,8 +1389,8 @@ void Insane::postCase23(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
queueSceneSwitch(5, 0, "tovista2.san", 64, 0, 0, 290);
|
queueSceneSwitch(5, 0, "tovista2.san", 64, 0, 0, 290);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCase14(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCase14(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1415,8 +1414,8 @@ void Insane::postCase14(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Insane::postCaseAll(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
void Insane::postCaseAll(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
|
@ -1462,8 +1461,8 @@ void Insane::postCaseAll(byte *renderBitmap, int32 codecparam, int32 setupsan12,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_roadLeftBranch = false;
|
_roadBranch = false;
|
||||||
_roadRightBranch = false;
|
_roadStop = false;
|
||||||
_continueFrame = curFrame;
|
_continueFrame = curFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,10 @@ bool NutRenderer::loadFont(const char *filename, const char *directory) {
|
||||||
_chars[l].width = READ_LE_UINT16(dataSrc + offset + 14);
|
_chars[l].width = READ_LE_UINT16(dataSrc + offset + 14);
|
||||||
_chars[l].height = READ_LE_UINT16(dataSrc + offset + 16);
|
_chars[l].height = READ_LE_UINT16(dataSrc + offset + 16);
|
||||||
_chars[l].src = new byte[(_chars[l].width + 2) * _chars[l].height + 1000];
|
_chars[l].src = new byte[(_chars[l].width + 2) * _chars[l].height + 1000];
|
||||||
|
// If characters have transparency, then bytes just get skipped and
|
||||||
|
// so there may appear some garbage. That's why we have to fill it
|
||||||
|
// with zeroes first.
|
||||||
|
memset(_chars[l].src, 0, (_chars[l].width + 2) * _chars[l].height + 1000);
|
||||||
if ((codec == 44) || (codec == 21))
|
if ((codec == 44) || (codec == 21))
|
||||||
decoded_length = decodeCodec44(_chars[l].src, dataSrc + offset + 22, READ_BE_UINT32(dataSrc + offset + 4) - 14);
|
decoded_length = decodeCodec44(_chars[l].src, dataSrc + offset + 22, READ_BE_UINT32(dataSrc + offset + 4) - 14);
|
||||||
else if (codec == 1) {
|
else if (codec == 1) {
|
||||||
|
@ -304,7 +308,7 @@ void NutRenderer::drawFrame(byte *dst, int c, int x, int y) {
|
||||||
for (int ty = minY; ty < height; ty++) {
|
for (int ty = minY; ty < height; ty++) {
|
||||||
for (int tx = minX; tx < width; tx++) {
|
for (int tx = minX; tx < width; tx++) {
|
||||||
bits = src[tx];
|
bits = src[tx];
|
||||||
if (bits != 231) {
|
if (bits != 231 && bits) {
|
||||||
dst[tx] = bits;
|
dst[tx] = bits;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ bool SaudChannel::processBuffer() {
|
||||||
} else if (_inData) {
|
} else if (_inData) {
|
||||||
if (_dataSize < _tbufferSize) {
|
if (_dataSize < _tbufferSize) {
|
||||||
int32 offset = _dataSize;
|
int32 offset = _dataSize;
|
||||||
while (handleSubTags(offset));
|
while (handleSubTags(offset)) ;
|
||||||
_sbufferSize = _dataSize;
|
_sbufferSize = _dataSize;
|
||||||
_sbuffer = _tbuffer;
|
_sbuffer = _tbuffer;
|
||||||
if (offset < _tbufferSize) {
|
if (offset < _tbufferSize) {
|
||||||
|
@ -171,12 +171,17 @@ SaudChannel::SaudChannel(int32 track, int32 freq) :
|
||||||
}
|
}
|
||||||
|
|
||||||
SaudChannel::~SaudChannel() {
|
SaudChannel::~SaudChannel() {
|
||||||
|
_dataSize = 0;
|
||||||
|
_tbufferSize = 0;
|
||||||
|
_sbufferSize = 0;
|
||||||
|
_markReached = true;
|
||||||
if (_tbuffer)
|
if (_tbuffer)
|
||||||
delete []_tbuffer;
|
delete []_tbuffer;
|
||||||
if (_sbuffer) {
|
if (_sbuffer) {
|
||||||
warning("this should never happen !!!! (_sbuffer not NULL here)");
|
// _sbuffer can be not empty here with insane when it seeks in video
|
||||||
delete []_sbuffer;
|
delete []_sbuffer;
|
||||||
}
|
}
|
||||||
|
_sbuffer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SaudChannel::isTerminated() const {
|
bool SaudChannel::isTerminated() const {
|
||||||
|
|
|
@ -139,6 +139,7 @@ bool SmushMixer::stop() {
|
||||||
delete _channels[i].chan;
|
delete _channels[i].chan;
|
||||||
_channels[i].id = -1;
|
_channels[i].id = -1;
|
||||||
_channels[i].chan = NULL;
|
_channels[i].chan = NULL;
|
||||||
|
_mixer->endStream(_channels[i].handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -236,6 +236,7 @@ SmushPlayer::SmushPlayer(ScummEngine_v6 *scumm, int speed) {
|
||||||
_speed = speed;
|
_speed = speed;
|
||||||
_insanity = false;
|
_insanity = false;
|
||||||
_middleAudio = false;
|
_middleAudio = false;
|
||||||
|
_skipPalette = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SmushPlayer::~SmushPlayer() {
|
SmushPlayer::~SmushPlayer() {
|
||||||
|
@ -657,6 +658,9 @@ void SmushPlayer::handleNewPalette(Chunk &b) {
|
||||||
checkBlock(b, TYPE_NPAL, 0x300);
|
checkBlock(b, TYPE_NPAL, 0x300);
|
||||||
debug(6, "SmushPlayer::handleNewPalette()");
|
debug(6, "SmushPlayer::handleNewPalette()");
|
||||||
|
|
||||||
|
if (_skipPalette)
|
||||||
|
return;
|
||||||
|
|
||||||
readPalette(_pal, b);
|
readPalette(_pal, b);
|
||||||
setPalette(_pal);
|
setPalette(_pal);
|
||||||
}
|
}
|
||||||
|
@ -786,7 +790,6 @@ void SmushPlayer::handleFrame(Chunk &b) {
|
||||||
delete sub;
|
delete sub;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Check either parameters are valid
|
|
||||||
if (_insanity) {
|
if (_insanity) {
|
||||||
_vm->_insane->procPostRendering(_dst, 0, 0, 0, _frame, _nbframes-1);
|
_vm->_insane->procPostRendering(_dst, 0, 0, 0, _frame, _nbframes-1);
|
||||||
}
|
}
|
||||||
|
@ -808,8 +811,10 @@ void SmushPlayer::handleAnimHeader(Chunk &b) {
|
||||||
_version = b.getWord();
|
_version = b.getWord();
|
||||||
_nbframes = b.getWord();
|
_nbframes = b.getWord();
|
||||||
b.getWord();
|
b.getWord();
|
||||||
|
if (!_skipPalette) {
|
||||||
readPalette(_pal, b);
|
readPalette(_pal, b);
|
||||||
setPalette(_pal);
|
setPalette(_pal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmushPlayer::setupAnim(const char *file, const char *directory) {
|
void SmushPlayer::setupAnim(const char *file, const char *directory) {
|
||||||
|
@ -972,9 +977,14 @@ void SmushPlayer::insanity(bool flag) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmushPlayer::seekSan(const char *file, const char *directory, int32 pos, int32 contFrame) {
|
void SmushPlayer::seekSan(const char *file, const char *directory, int32 pos, int32 contFrame) {
|
||||||
|
if(_smixer)
|
||||||
|
_smixer->stop();
|
||||||
|
|
||||||
if (file) {
|
if (file) {
|
||||||
if (_base)
|
if (_base) {
|
||||||
|
_base->seek(0, FileChunk::seek_end);
|
||||||
delete _base;
|
delete _base;
|
||||||
|
}
|
||||||
|
|
||||||
_base = new FileChunk(file, directory);
|
_base = new FileChunk(file, directory);
|
||||||
// In this case we need to get palette and number of frames
|
// In this case we need to get palette and number of frames
|
||||||
|
@ -986,8 +996,11 @@ void SmushPlayer::seekSan(const char *file, const char *directory, int32 pos, in
|
||||||
}
|
}
|
||||||
if (pos >= 8)
|
if (pos >= 8)
|
||||||
pos -= 8;
|
pos -= 8;
|
||||||
|
|
||||||
|
_skipPalette = false;
|
||||||
} else {
|
} else {
|
||||||
_base->reinit(pos);
|
_base->reinit(pos);
|
||||||
|
_skipPalette = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pos != 8 && pos) {
|
if (pos != 8 && pos) {
|
||||||
|
|
|
@ -68,6 +68,7 @@ private:
|
||||||
bool _updateNeeded;
|
bool _updateNeeded;
|
||||||
bool _insanity;
|
bool _insanity;
|
||||||
bool _middleAudio;
|
bool _middleAudio;
|
||||||
|
bool _skipPalette;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SmushPlayer(ScummEngine_v6 *scumm, int speed);
|
SmushPlayer(ScummEngine_v6 *scumm, int speed);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue