cleanup
svn-id: r10169
This commit is contained in:
parent
a3bb9f81e0
commit
81f10baa68
17 changed files with 272 additions and 227 deletions
|
@ -32,8 +32,6 @@
|
|||
#include "sound.h"
|
||||
#include "usage_bits.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
byte Actor::kInvalidBox = 0;
|
||||
Scumm *Actor::_vm = 0;
|
||||
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#include "boxes.h"
|
||||
#include "common/util.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
#if !defined(__GNUC__)
|
||||
#pragma START_PACK_STRUCTS
|
||||
#endif
|
||||
|
|
|
@ -19,15 +19,18 @@
|
|||
*
|
||||
*/
|
||||
#include "stdafx.h"
|
||||
#include "scumm.h"
|
||||
#include "sound.h"
|
||||
#include "actor.h"
|
||||
#include "boxes.h"
|
||||
#include "imuse.h"
|
||||
#include "player_v2.h"
|
||||
#include "debugger.h"
|
||||
#include "common/util.h"
|
||||
|
||||
#include "common/file.h"
|
||||
#include "common/util.h"
|
||||
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/boxes.h"
|
||||
#include "scumm/debugger.h"
|
||||
#include "scumm/imuse.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/player_v2.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
|
||||
#if USE_CONSOLE
|
||||
#include "gui/console.h"
|
||||
|
|
|
@ -21,6 +21,22 @@
|
|||
#ifndef OBJECT_H
|
||||
#define OBJECT_H
|
||||
|
||||
struct ObjectData {
|
||||
uint32 OBIMoffset;
|
||||
uint32 OBCDoffset;
|
||||
int16 walk_x, walk_y;
|
||||
uint16 obj_nr;
|
||||
int16 x_pos;
|
||||
int16 y_pos;
|
||||
uint16 width;
|
||||
uint16 height;
|
||||
byte actordir;
|
||||
byte parent;
|
||||
byte parentstate;
|
||||
byte state;
|
||||
byte fl_object_index;
|
||||
};
|
||||
|
||||
#if !defined(__GNUC__)
|
||||
#pragma START_PACK_STRUCTS
|
||||
#endif
|
||||
|
|
|
@ -21,17 +21,18 @@
|
|||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "imuse.h"
|
||||
#include "scumm.h"
|
||||
#include "resource.h"
|
||||
#include "bundle.h"
|
||||
#include "verbs.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "common/map.h"
|
||||
#include "common/str.h"
|
||||
#include "sound/mididrv.h" // Need MD_ enum values
|
||||
#include "gui/message.h"
|
||||
#include "dialogs.h"
|
||||
#include "scumm/bundle.h"
|
||||
#include "scumm/dialogs.h"
|
||||
#include "scumm/imuse.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/resource.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "scumm/verbs.h"
|
||||
#include "sound/mididrv.h" // Need MD_ enum values
|
||||
|
||||
static uint16 newTag2Old(uint32 oldTag);
|
||||
static const char *resTypeFromId(int id);
|
||||
|
@ -238,9 +239,8 @@ void Scumm::askForDisk(const char *filename, int disknum) {
|
|||
error("Cannot find file: '%s'", filename);
|
||||
} else {
|
||||
sprintf(buf, "Cannot find file: '%s'", filename);
|
||||
InfoDialog* dialog = new InfoDialog(_newgui, this, (char*)buf);
|
||||
runDialog (dialog);
|
||||
delete dialog;
|
||||
InfoDialog dialog(_newgui, this, (char*)buf);
|
||||
runDialog(dialog);
|
||||
error("Cannot find file: '%s'", filename);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,6 +50,15 @@ enum {
|
|||
};
|
||||
|
||||
|
||||
#define ARRAY_HDR_SIZE 6
|
||||
struct ArrayHeader {
|
||||
int16 dim1_size;
|
||||
int16 type;
|
||||
int16 dim2_size;
|
||||
byte data[1];
|
||||
};
|
||||
|
||||
|
||||
const byte *findResource(uint32 tag, const byte *searchin);
|
||||
const byte *findResourceSmall(uint32 tag, const byte *searchin);
|
||||
|
||||
|
|
|
@ -21,18 +21,23 @@
|
|||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "actor.h"
|
||||
#include "charset.h"
|
||||
#include "imuse.h"
|
||||
#include "imuse_digi.h"
|
||||
#include "resource.h"
|
||||
#include "saveload.h"
|
||||
#include "scumm.h"
|
||||
#include "sound.h"
|
||||
#include "verbs.h"
|
||||
|
||||
#include "common/config-file.h"
|
||||
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/charset.h"
|
||||
#include "scumm/imuse_digi.h"
|
||||
#include "scumm/imuse.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/resource.h"
|
||||
#include "scumm/saveload.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "scumm/verbs.h"
|
||||
|
||||
#include "sound/mixer.h"
|
||||
|
||||
|
||||
struct SaveGameHeader {
|
||||
uint32 type;
|
||||
uint32 size;
|
||||
|
@ -394,7 +399,7 @@ void Scumm::saveOrLoad(Serializer *s, uint32 savegameVersion) {
|
|||
MKARRAY(Scumm, vm.cutSceneData[0], sleInt16, 5, VER(8)),
|
||||
MKLINE(Scumm, vm.cutSceneScriptIndex, sleInt16, VER(8)),
|
||||
|
||||
MKLINE(Scumm, _numNestedScripts, sleByte, VER(8)),
|
||||
MKLINE(Scumm, vm.numNestedScripts, sleByte, VER(8)),
|
||||
MKLINE(Scumm, _userPut, sleByte, VER(8)),
|
||||
MKLINE(Scumm, _userState, sleUint16, VER(17)),
|
||||
MKLINE(Scumm, _cursor.state, sleByte, VER(8)),
|
||||
|
|
|
@ -21,18 +21,13 @@
|
|||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "scumm.h"
|
||||
#include "actor.h"
|
||||
#include "resource.h"
|
||||
|
||||
#include "common/util.h"
|
||||
|
||||
/* Script status type (slot.status) */
|
||||
enum {
|
||||
ssDead = 0,
|
||||
ssPaused = 1,
|
||||
ssRunning = 2
|
||||
};
|
||||
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/resource.h"
|
||||
#include "scumm/scumm.h"
|
||||
|
||||
/* Start executing script 'script' with the given parameters */
|
||||
void Scumm::runScript(int script, bool freezeResistant, bool recursive, int *lvarptr) {
|
||||
|
@ -221,7 +216,7 @@ void Scumm::stopScript(int script) {
|
|||
}
|
||||
|
||||
nest = vm.nest;
|
||||
num = _numNestedScripts;
|
||||
num = vm.numNestedScripts;
|
||||
|
||||
while (num > 0) {
|
||||
if (nest->number == script &&
|
||||
|
@ -258,7 +253,7 @@ void Scumm::stopObjectScript(int script) {
|
|||
}
|
||||
|
||||
nest = vm.nest;
|
||||
num = _numNestedScripts;
|
||||
num = vm.numNestedScripts;
|
||||
|
||||
while (num > 0) {
|
||||
if (nest->number == script &&
|
||||
|
@ -293,7 +288,7 @@ void Scumm::runScriptNested(int script) {
|
|||
|
||||
updateScriptPtr();
|
||||
|
||||
nest = &vm.nest[_numNestedScripts];
|
||||
nest = &vm.nest[vm.numNestedScripts];
|
||||
|
||||
if (_currentScript == 0xFF) {
|
||||
nest->number = 0xFF;
|
||||
|
@ -306,9 +301,9 @@ void Scumm::runScriptNested(int script) {
|
|||
nest->slot = _currentScript;
|
||||
}
|
||||
|
||||
_numNestedScripts++;
|
||||
vm.numNestedScripts++;
|
||||
|
||||
if (_numNestedScripts > ARRAYSIZE(vm.nest))
|
||||
if (vm.numNestedScripts > ARRAYSIZE(vm.nest))
|
||||
error("Too many nested scripts");
|
||||
|
||||
_currentScript = script;
|
||||
|
@ -316,7 +311,7 @@ void Scumm::runScriptNested(int script) {
|
|||
getScriptEntryPoint();
|
||||
executeScript();
|
||||
|
||||
_numNestedScripts--;
|
||||
vm.numNestedScripts--;
|
||||
|
||||
if (nest->number != 0xFF) {
|
||||
// Try to resume the script which called us, if its status has not changed
|
||||
|
@ -360,7 +355,7 @@ void Scumm::getScriptBaseAddress() {
|
|||
_lastCodePtr = &_baseInventoryItems[idx];
|
||||
break;
|
||||
|
||||
case 3:
|
||||
case WIO_LOCAL:
|
||||
case WIO_ROOM: /* room script */
|
||||
if (_version == 8) {
|
||||
_scriptOrgPointer = getResourceAddress(rtRoomScripts, _roomResource);
|
||||
|
@ -865,6 +860,7 @@ void Scumm::doSentence(int verb, int objectA, int objectB) {
|
|||
|
||||
void Scumm::checkAndRunSentenceScript() {
|
||||
int i;
|
||||
int localParamList[16];
|
||||
const ScriptSlot *ss;
|
||||
int sentenceScript;
|
||||
if (_version <= 2)
|
||||
|
@ -872,7 +868,7 @@ void Scumm::checkAndRunSentenceScript() {
|
|||
else
|
||||
sentenceScript = VAR(VAR_SENTENCE_SCRIPT);
|
||||
|
||||
memset(_localParamList, 0, sizeof(_localParamList));
|
||||
memset(localParamList, 0, sizeof(localParamList));
|
||||
if (isScriptInUse(sentenceScript)) {
|
||||
ss = vm.slot;
|
||||
for (i = 0; i < NUM_SCRIPT_SLOT; i++, ss++)
|
||||
|
@ -895,13 +891,13 @@ void Scumm::checkAndRunSentenceScript() {
|
|||
_scummVars[VAR_ACTIVE_OBJECT2] = _sentence[_sentenceNum].objectB;
|
||||
_scummVars[VAR_VERB_ALLOWED] = (0 != getVerbEntrypoint(_sentence[_sentenceNum].objectA, _sentence[_sentenceNum].verb));
|
||||
} else {
|
||||
_localParamList[0] = _sentence[_sentenceNum].verb;
|
||||
_localParamList[1] = _sentence[_sentenceNum].objectA;
|
||||
_localParamList[2] = _sentence[_sentenceNum].objectB;
|
||||
localParamList[0] = _sentence[_sentenceNum].verb;
|
||||
localParamList[1] = _sentence[_sentenceNum].objectA;
|
||||
localParamList[2] = _sentence[_sentenceNum].objectB;
|
||||
}
|
||||
_currentScript = 0xFF;
|
||||
if (sentenceScript)
|
||||
runScript(sentenceScript, 0, 0, _localParamList);
|
||||
runScript(sentenceScript, 0, 0, localParamList);
|
||||
}
|
||||
|
||||
void Scumm::runInputScript(int a, int cmd, int mode) {
|
||||
|
|
74
scumm/script.h
Normal file
74
scumm/script.h
Normal file
|
@ -0,0 +1,74 @@
|
|||
/* ScummVM - Scumm Interpreter
|
||||
* Copyright (C) 2001 Ludvig Strigeus
|
||||
* Copyright (C) 2001-2003 The ScummVM project
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Header$
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SCRIPT_H
|
||||
#define SCRIPT_H
|
||||
|
||||
#include "common/engine.h"
|
||||
|
||||
|
||||
/* System Wide Constants */
|
||||
enum {
|
||||
NUM_SCRIPT_SLOT = 80
|
||||
};
|
||||
|
||||
/* Script status type (slot.status) */
|
||||
enum {
|
||||
ssDead = 0,
|
||||
ssPaused = 1,
|
||||
ssRunning = 2
|
||||
};
|
||||
|
||||
struct ScriptSlot {
|
||||
uint32 offs;
|
||||
int32 delay;
|
||||
uint16 number;
|
||||
uint16 delayFrameCount;
|
||||
bool freezeResistant, recursive;
|
||||
bool didexec;
|
||||
byte status;
|
||||
byte where;
|
||||
byte freezeCount;
|
||||
byte cutsceneOverride;
|
||||
};
|
||||
|
||||
struct NestedScript {
|
||||
uint16 number;
|
||||
uint8 where;
|
||||
uint8 slot;
|
||||
};
|
||||
|
||||
struct VirtualMachineState {
|
||||
uint32 cutScenePtr[5];
|
||||
byte cutSceneScript[5];
|
||||
int16 cutSceneData[5];
|
||||
int16 cutSceneScriptIndex;
|
||||
byte cutSceneStackPointer;
|
||||
ScriptSlot slot[NUM_SCRIPT_SLOT];
|
||||
int32 localvar[NUM_SCRIPT_SLOT][26];
|
||||
|
||||
NestedScript nest[15];
|
||||
byte numNestedScripts;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -21,12 +21,13 @@
|
|||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "scumm.h"
|
||||
#include "actor.h"
|
||||
#include "charset.h"
|
||||
#include "intern.h"
|
||||
#include "sound.h"
|
||||
#include "verbs.h"
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/charset.h"
|
||||
#include "scumm/intern.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "scumm/verbs.h"
|
||||
|
||||
#define OPCODE(x) { &Scumm_v2::x, #x }
|
||||
|
||||
|
|
|
@ -21,12 +21,13 @@
|
|||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "scumm.h"
|
||||
#include "actor.h"
|
||||
#include "charset.h"
|
||||
#include "intern.h"
|
||||
#include "sound.h"
|
||||
#include "verbs.h"
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/charset.h"
|
||||
#include "scumm/intern.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "scumm/verbs.h"
|
||||
|
||||
#define OPCODE(x) { &Scumm_v5::x, #x }
|
||||
|
||||
|
@ -623,7 +624,7 @@ void Scumm_v5::o5_chainScript() {
|
|||
}
|
||||
|
||||
vm.slot[cur].number = 0;
|
||||
vm.slot[cur].status = 0;
|
||||
vm.slot[cur].status = ssDead;
|
||||
_currentScript = 0xFF;
|
||||
|
||||
runScript(script, vm.slot[cur].freezeResistant, vm.slot[cur].recursive, vars);
|
||||
|
@ -731,13 +732,13 @@ void Scumm_v5::o5_delay() {
|
|||
delay |= fetchScriptByte() << 8;
|
||||
delay |= fetchScriptByte() << 16;
|
||||
vm.slot[_currentScript].delay = delay;
|
||||
vm.slot[_currentScript].status = 1;
|
||||
vm.slot[_currentScript].status = ssPaused;
|
||||
o5_breakHere();
|
||||
}
|
||||
|
||||
void Scumm_v5::o5_delayVariable() {
|
||||
vm.slot[_currentScript].delay = getVar();
|
||||
vm.slot[_currentScript].status = 1;
|
||||
vm.slot[_currentScript].status = ssPaused;
|
||||
o5_breakHere();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,20 +22,22 @@
|
|||
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <time.h>
|
||||
|
||||
#include "actor.h"
|
||||
#include "charset.h"
|
||||
#include "imuse.h"
|
||||
#include "intern.h"
|
||||
#include "scumm.h"
|
||||
#include "sound.h"
|
||||
#include "verbs.h"
|
||||
#include "smush/smush_player.h"
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/charset.h"
|
||||
#include "scumm/imuse.h"
|
||||
#include "scumm/intern.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/resource.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "scumm/verbs.h"
|
||||
#include "scumm/smush/smush_player.h"
|
||||
|
||||
#include "sound/mididrv.h"
|
||||
#include "sound/mixer.h"
|
||||
|
||||
#include "dialogs.h" // FIXME: This is just for the FT-INSANE warning.
|
||||
#include "scumm/dialogs.h" // FIXME: This is just for the FT-INSANE warning.
|
||||
// Remove when INSANE is implemented
|
||||
|
||||
#define OPCODE(x) { &Scumm_v6::x, #x }
|
||||
|
@ -2184,7 +2186,7 @@ void Scumm_v6::o6_delay() {
|
|||
// CMI it would seem this should delay for 1/10th of a second...
|
||||
uint32 delay = (uint16)pop();
|
||||
vm.slot[_currentScript].delay = delay;
|
||||
vm.slot[_currentScript].status = 1;
|
||||
vm.slot[_currentScript].status = ssPaused;
|
||||
o6_breakHere();
|
||||
}
|
||||
|
||||
|
@ -2199,7 +2201,7 @@ void Scumm_v6::o6_delaySeconds() {
|
|||
delay = delay * 90;
|
||||
|
||||
vm.slot[_currentScript].delay = delay;
|
||||
vm.slot[_currentScript].status = 1;
|
||||
vm.slot[_currentScript].status = ssPaused;
|
||||
o6_breakHere();
|
||||
}
|
||||
|
||||
|
@ -2207,7 +2209,7 @@ void Scumm_v6::o6_delayMinutes() {
|
|||
// FIXME - are we really measuring minutes here?
|
||||
uint32 delay = (uint16)pop() * 3600;
|
||||
vm.slot[_currentScript].delay = delay;
|
||||
vm.slot[_currentScript].status = 1;
|
||||
vm.slot[_currentScript].status = ssPaused;
|
||||
o6_breakHere();
|
||||
}
|
||||
|
||||
|
@ -2422,29 +2424,26 @@ void Scumm_v6::o6_kernelSetFunctions() {
|
|||
case 2:
|
||||
sp->play("tovista1.san", getGameDataPath());
|
||||
break;
|
||||
case 3: {
|
||||
if (readArray(233,0,50) == 0) {
|
||||
InfoDialog *dialog = new InfoDialog(_newgui, this,
|
||||
"Set MineRoad - You can now jump the gorge.");
|
||||
runDialog (dialog);
|
||||
delete dialog;
|
||||
case 3:
|
||||
if (readArray(233,0,50) == 0) {
|
||||
InfoDialog info(_newgui, this, "Set MineRoad - You can now jump the gorge.");
|
||||
runDialog(info);
|
||||
|
||||
writeArray(233, 0, 50, 1); // INSANE callback: Chain
|
||||
writeArray(233, 0, 51, 1); // INSANE callback: Chainsaw
|
||||
writeArray(233, 0, 52, 1); // INSANE callback: Mace
|
||||
writeArray(233, 0, 53, 1); // INSANE callback: 2x4
|
||||
writeArray(233, 0, 54, 1); // INSANE callback: Wrench
|
||||
writeArray(233, 0, 55, 1); // INSANE callback: Dust
|
||||
writeArray(233, 0, 50, 1); // INSANE callback: Chain
|
||||
writeArray(233, 0, 51, 1); // INSANE callback: Chainsaw
|
||||
writeArray(233, 0, 52, 1); // INSANE callback: Mace
|
||||
writeArray(233, 0, 53, 1); // INSANE callback: 2x4
|
||||
writeArray(233, 0, 54, 1); // INSANE callback: Wrench
|
||||
writeArray(233, 0, 55, 1); // INSANE callback: Dust
|
||||
|
||||
writeArray(233, 0, 8, 1); // INSANE callback: Give Googles
|
||||
writeArray(233, 0, 7, 1); // INSANE callback: Give nitro fuel
|
||||
writeArray(233, 0, 8, 1); // INSANE callback: Give Googles
|
||||
writeArray(233, 0, 7, 1); // INSANE callback: Give nitro fuel
|
||||
|
||||
putState(235, 1); // Cheat and activate Ramp
|
||||
writeVar(142 | 0x8000, 1); // Cheat and activate auto-booster (fan)
|
||||
}
|
||||
// smush->play("minefite.san", getGameDataPath());
|
||||
putState(235, 1); // Cheat and activate Ramp
|
||||
writeVar(142 | 0x8000, 1); // Cheat and activate auto-booster (fan)
|
||||
}
|
||||
// sp->play("minefite.san", getGameDataPath());
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
sp->play("rottopen.san", getGameDataPath());
|
||||
break;
|
||||
|
|
|
@ -20,19 +20,18 @@
|
|||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "scumm.h"
|
||||
#include "actor.h"
|
||||
#include "akos.h"
|
||||
#include "charset.h"
|
||||
#include "intern.h"
|
||||
#include "sound.h"
|
||||
#include "verbs.h"
|
||||
#include "smush/smush_player.h"
|
||||
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/akos.h"
|
||||
#include "scumm/charset.h"
|
||||
#include "scumm/intern.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/resource.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "scumm/verbs.h"
|
||||
#include "scumm/smush/smush_player.h"
|
||||
#include "sound/mixer.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
|
||||
#define OPCODE(x) { &Scumm_v8::x, #x }
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "common/str.h"
|
||||
|
||||
#include "scumm/gfx.h"
|
||||
#include "scumm/script.h"
|
||||
|
||||
class Actor;
|
||||
class BaseCostumeRenderer;
|
||||
|
@ -59,7 +60,6 @@ extern Scumm *g_scumm;
|
|||
|
||||
/* System Wide Constants */
|
||||
enum {
|
||||
NUM_SCRIPT_SLOT = 80,
|
||||
NUM_LOCALSCRIPT = 60,
|
||||
NUM_SENTENCE = 6,
|
||||
NUM_SHADOW_PALETTE = 8,
|
||||
|
@ -110,41 +110,7 @@ struct MemBlkHeader {
|
|||
};
|
||||
|
||||
struct VerbSlot;
|
||||
|
||||
struct ObjectData {
|
||||
uint32 OBIMoffset;
|
||||
uint32 OBCDoffset;
|
||||
int16 walk_x, walk_y;
|
||||
uint16 obj_nr;
|
||||
int16 x_pos;
|
||||
int16 y_pos;
|
||||
uint16 width;
|
||||
uint16 height;
|
||||
byte actordir;
|
||||
byte parent;
|
||||
byte parentstate;
|
||||
byte state;
|
||||
byte fl_object_index;
|
||||
};
|
||||
|
||||
struct ScriptSlot {
|
||||
uint32 offs;
|
||||
int32 delay;
|
||||
uint16 number;
|
||||
uint16 delayFrameCount;
|
||||
bool freezeResistant, recursive;
|
||||
bool didexec;
|
||||
byte status;
|
||||
byte where;
|
||||
byte freezeCount;
|
||||
byte cutsceneOverride;
|
||||
};
|
||||
|
||||
struct NestedScript {
|
||||
uint16 number;
|
||||
uint8 where;
|
||||
uint8 slot;
|
||||
};
|
||||
struct ObjectData;
|
||||
|
||||
struct BlastText {
|
||||
int16 xpos, ypos;
|
||||
|
@ -246,14 +212,6 @@ enum ScummGameId {
|
|||
|
||||
#define _roomFileOffsets res.roomoffs[rtRoom]
|
||||
|
||||
#define ARRAY_HDR_SIZE 6
|
||||
struct ArrayHeader {
|
||||
int16 dim1_size;
|
||||
int16 type;
|
||||
int16 dim2_size;
|
||||
byte data[1];
|
||||
};
|
||||
|
||||
struct SentenceTab {
|
||||
byte verb;
|
||||
byte preposition;
|
||||
|
@ -286,11 +244,6 @@ enum WhereIsObject {
|
|||
WIO_FLOBJECT = 4
|
||||
};
|
||||
|
||||
enum MouseButtonStatus {
|
||||
msDown = 1,
|
||||
msClicked = 2
|
||||
};
|
||||
|
||||
struct LangIndexNode {
|
||||
char tag[12+1];
|
||||
int32 offset;
|
||||
|
@ -332,16 +285,7 @@ public:
|
|||
} res;
|
||||
|
||||
protected:
|
||||
struct {
|
||||
uint32 cutScenePtr[5];
|
||||
byte cutSceneScript[5];
|
||||
int16 cutSceneData[5];
|
||||
int16 cutSceneScriptIndex;
|
||||
byte cutSceneStackPointer;
|
||||
ScriptSlot slot[NUM_SCRIPT_SLOT];
|
||||
NestedScript nest[15];
|
||||
int32 localvar[NUM_SCRIPT_SLOT][26];
|
||||
} vm;
|
||||
VirtualMachineState vm;
|
||||
|
||||
public:
|
||||
// Constructor / Destructor
|
||||
|
@ -405,7 +349,7 @@ public:
|
|||
ConsoleDialog *_debuggerDialog;
|
||||
|
||||
protected:
|
||||
int runDialog(Dialog *dialog);
|
||||
int runDialog(Dialog &dialog);
|
||||
void confirmexitDialog();
|
||||
void pauseDialog();
|
||||
void saveloadDialog();
|
||||
|
@ -540,11 +484,11 @@ protected:
|
|||
/* Script VM - should be in Script class */
|
||||
uint32 _localScriptList[NUM_LOCALSCRIPT];
|
||||
const byte *_scriptPointer, *_scriptOrgPointer;
|
||||
byte _opcode, _numNestedScripts, _currentScript;
|
||||
byte _opcode, _currentScript;
|
||||
uint16 _curExecScript;
|
||||
byte **_lastCodePtr;
|
||||
int _resultVarNumber, _scummStackPos;
|
||||
int _localParamList[16], _scummStack[150];
|
||||
int _scummStack[150];
|
||||
int _keyScriptKey, _keyScriptNo;
|
||||
|
||||
virtual void setupOpcodes() = 0;
|
||||
|
|
|
@ -21,33 +21,35 @@
|
|||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "scumm.h"
|
||||
#include "actor.h"
|
||||
#include "boxes.h"
|
||||
#include "charset.h"
|
||||
#include "debugger.h"
|
||||
#include "dialogs.h"
|
||||
#include "imuse.h"
|
||||
#include "imuse_digi.h"
|
||||
#include "intern.h"
|
||||
#include "object.h"
|
||||
#include "player_v3a.h"
|
||||
#include "player_v2.h"
|
||||
#include "player_v1.h"
|
||||
#include "resource.h"
|
||||
#include "sound.h"
|
||||
#include "string.h"
|
||||
#include "verbs.h"
|
||||
#include "common/gameDetector.h"
|
||||
#include "common/config-file.h"
|
||||
#include "gui/console.h"
|
||||
#include "gui/newgui.h"
|
||||
#include "gui/message.h"
|
||||
#include "sound/mixer.h"
|
||||
#include "sound/mididrv.h"
|
||||
|
||||
#include "akos.h"
|
||||
#include "costume.h"
|
||||
#include "common/config-file.h"
|
||||
#include "common/gameDetector.h"
|
||||
|
||||
#include "gui/console.h"
|
||||
#include "gui/message.h"
|
||||
#include "gui/newgui.h"
|
||||
|
||||
#include "scumm/actor.h"
|
||||
#include "scumm/akos.h"
|
||||
#include "scumm/boxes.h"
|
||||
#include "scumm/charset.h"
|
||||
#include "scumm/costume.h"
|
||||
#include "scumm/debugger.h"
|
||||
#include "scumm/dialogs.h"
|
||||
#include "scumm/imuse_digi.h"
|
||||
#include "scumm/imuse.h"
|
||||
#include "scumm/intern.h"
|
||||
#include "scumm/object.h"
|
||||
#include "scumm/player_v1.h"
|
||||
#include "scumm/player_v2.h"
|
||||
#include "scumm/player_v3a.h"
|
||||
#include "scumm/resource.h"
|
||||
#include "scumm/scumm.h"
|
||||
#include "scumm/sound.h"
|
||||
#include "scumm/verbs.h"
|
||||
|
||||
#include "sound/mididrv.h"
|
||||
#include "sound/mixer.h"
|
||||
|
||||
#ifdef MACOSX
|
||||
#include <sys/types.h>
|
||||
|
@ -58,6 +60,11 @@
|
|||
extern bool isSmartphone(void);
|
||||
#endif
|
||||
|
||||
enum MouseButtonStatus {
|
||||
msDown = 1,
|
||||
msClicked = 2
|
||||
};
|
||||
|
||||
// Use g_scumm from error() ONLY
|
||||
Scumm *g_scumm = 0;
|
||||
ScummDebugger *g_debugger;
|
||||
|
@ -368,13 +375,12 @@ Scumm::Scumm (GameDetector *detector, OSystem *syst)
|
|||
_scriptPointer = NULL;
|
||||
_scriptOrgPointer = NULL;
|
||||
_opcode = 0;
|
||||
_numNestedScripts = 0;
|
||||
vm.numNestedScripts = 0;
|
||||
_currentScript = 0;
|
||||
_curExecScript = 0;
|
||||
_lastCodePtr = NULL;
|
||||
_resultVarNumber = 0;
|
||||
_scummStackPos = 0;
|
||||
memset(_localParamList, 0, sizeof(_localParamList));
|
||||
memset(_scummStack, 0, sizeof(_scummStack));
|
||||
_keyScriptKey = 0;
|
||||
_keyScriptNo = 0;
|
||||
|
@ -1007,7 +1013,7 @@ void Scumm::scummInit() {
|
|||
_actors[i].setActorCostume(i);
|
||||
}
|
||||
|
||||
_numNestedScripts = 0;
|
||||
vm.numNestedScripts = 0;
|
||||
vm.cutSceneStackPointer = 0;
|
||||
|
||||
memset(vm.cutScenePtr, 0, sizeof(vm.cutScenePtr));
|
||||
|
@ -1368,9 +1374,8 @@ load_game:
|
|||
#endif
|
||||
sprintf(buf, "Successfully saved game state in file:\n\n%s", filename);
|
||||
|
||||
Dialog *dialog = new MessageDialog(_newgui, buf, 1500, false);
|
||||
MessageDialog dialog(_newgui, buf, 1500, false);
|
||||
runDialog(dialog);
|
||||
delete dialog;
|
||||
}
|
||||
if (success && _saveLoadFlag != 1)
|
||||
clearClickedStatus();
|
||||
|
@ -2392,8 +2397,8 @@ void Scumm::restart() {
|
|||
setShake(0);
|
||||
_sound->stopAllSounds();
|
||||
|
||||
// Empty variables
|
||||
for (i=0;i<255;i++)
|
||||
// Clear the script variables
|
||||
for (i = 0; i < 255; i++)
|
||||
_scummVars[i] = 0;
|
||||
|
||||
// Empty inventory
|
||||
|
@ -2419,7 +2424,7 @@ void Scumm::startManiac() {
|
|||
#pragma mark --- GUI ---
|
||||
#pragma mark -
|
||||
|
||||
int Scumm::runDialog(Dialog *dialog) {
|
||||
int Scumm::runDialog(Dialog &dialog) {
|
||||
// Pause sound put
|
||||
bool old_soundsPaused = _sound->_soundsPaused;
|
||||
_sound->pauseSounds(true);
|
||||
|
@ -2429,7 +2434,7 @@ int Scumm::runDialog(Dialog *dialog) {
|
|||
_smushPlay = false;
|
||||
|
||||
// Open & run the dialog
|
||||
int result = dialog->runModal();
|
||||
int result = dialog.runModal();
|
||||
|
||||
// Restore old cursor
|
||||
updateCursor();
|
||||
|
@ -2447,35 +2452,35 @@ int Scumm::runDialog(Dialog *dialog) {
|
|||
void Scumm::pauseDialog() {
|
||||
if (!_pauseDialog)
|
||||
_pauseDialog = new PauseDialog(_newgui, this);
|
||||
runDialog(_pauseDialog);
|
||||
runDialog(*_pauseDialog);
|
||||
}
|
||||
|
||||
void Scumm::saveloadDialog() {
|
||||
if (!_saveLoadDialog)
|
||||
_saveLoadDialog = new SaveLoadDialog(_newgui, this);
|
||||
runDialog(_saveLoadDialog);
|
||||
runDialog(*_saveLoadDialog);
|
||||
}
|
||||
|
||||
void Scumm::optionsDialog() {
|
||||
if (!_optionsDialog)
|
||||
_optionsDialog = new OptionsDialog(_newgui, this);
|
||||
runDialog(_optionsDialog);
|
||||
runDialog(*_optionsDialog);
|
||||
}
|
||||
|
||||
void Scumm::confirmexitDialog() {
|
||||
if (!_confirmExitDialog)
|
||||
_confirmExitDialog = new ConfirmExitDialog(_newgui, this);
|
||||
|
||||
if (runDialog(_confirmExitDialog)) {
|
||||
if (runDialog(*_confirmExitDialog)) {
|
||||
_quit = true;
|
||||
}
|
||||
}
|
||||
|
||||
char Scumm::displayError(bool showCancel, const char *message, ...) {
|
||||
#ifdef __PALM_OS__
|
||||
char buf[256], result; // 1024 is too big overflow the stack
|
||||
char buf[256]; // 1024 is too big overflow the stack
|
||||
#else
|
||||
char buf[1024], result;
|
||||
char buf[1024];
|
||||
#endif
|
||||
va_list va;
|
||||
|
||||
|
@ -2483,11 +2488,8 @@ char Scumm::displayError(bool showCancel, const char *message, ...) {
|
|||
vsprintf(buf, message, va);
|
||||
va_end(va);
|
||||
|
||||
Dialog *dialog = new MessageDialog(_newgui, buf, 0, true, showCancel);
|
||||
result = runDialog(dialog);
|
||||
delete dialog;
|
||||
|
||||
return result;
|
||||
MessageDialog dialog(_newgui, buf, 0, true, showCancel);
|
||||
return runDialog(dialog);
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
|
|
@ -23,9 +23,10 @@
|
|||
#define SMUSH_PLAYER_H
|
||||
|
||||
#include "common/util.h"
|
||||
#include "chunk.h"
|
||||
#include "codec37.h"
|
||||
#include "codec47.h"
|
||||
#include "scumm/smush/chunk.h"
|
||||
#include "scumm/smush/codec37.h"
|
||||
#include "scumm/smush/codec47.h"
|
||||
#include "sound/mixer.h"
|
||||
|
||||
class SmushFont;
|
||||
class SmushMixer;
|
||||
|
|
|
@ -76,11 +76,10 @@ void Scumm::unkMessage2() {
|
|||
if (_string[3].color == 0)
|
||||
_string[3].color = 4;
|
||||
|
||||
InfoDialog* dialog = new InfoDialog(_newgui, this, (char*)buf);
|
||||
// FIXME: I know this is the right thing to do for MI1 and MI2. For
|
||||
// all other games it's just a guess.
|
||||
VAR(VAR_KEYPRESS) = runDialog (dialog);
|
||||
delete dialog;
|
||||
InfoDialog dialog(_newgui, this, (char*)buf);
|
||||
VAR(VAR_KEYPRESS) = runDialog(dialog);
|
||||
|
||||
_messagePtr = tmp;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue