XEEN: Implemented dialogs for Who Will and YesNo

This commit is contained in:
Paul Gilbert 2015-01-22 22:05:36 -05:00
parent b597d71bcd
commit 2b51d324f3
18 changed files with 444 additions and 64 deletions

View File

@ -23,9 +23,6 @@
#ifndef XEEN_DIALOGS_ERROR_H
#define XEEN_DIALOGS_ERROR_H
#include "common/array.h"
#include "common/stack.h"
#include "common/rect.h"
#include "xeen/dialogs.h"
namespace Xeen {

View File

@ -0,0 +1,104 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "xeen/dialogs_whowill.h"
#include "xeen/resources.h"
#include "xeen/xeen.h"
namespace Xeen {
int WhoWill::show(XeenEngine *vm, int message, int action, bool type) {
WhoWill *dlg = new WhoWill(vm);
int result = dlg->execute(message, action, type);
delete dlg;
return result;
}
int WhoWill::execute(int message, int action, bool type) {
EventsManager &events = *_vm->_events;
Interface &intf = *_vm->_interface;
Map &map = *_vm->_map;
Party &party = *_vm->_party;
Screen &screen = *_vm->_screen;
Scripts &scripts = *_vm->_scripts;
int numFrames;
if (party._partyCount <= 1)
// Unless there's at least two characters, just return the first one
return 1;
screen._windows[38].close();
screen._windows[12].close();
Common::String actionStr = type ? map._events._text[action] : WHO_WILL_ACTIONS[action];
Common::String msg = Common::String::format(WHO_WILL, actionStr.c_str(),
WHO_ACTIONS[message], party._partyCount);
screen._windows[36].open();
screen._windows[36].writeString(msg);
screen._windows[36].update();
intf._face1State = map._headData[party._mazePosition.y][party._mazePosition.x]._left;
intf._face2State = map._headData[party._mazePosition.y][party._mazePosition.x]._right;
while (!_vm->shouldQuit()) {
events.updateGameCounter();
if (screen._windows[11]._enabled) {
intf.drawTownAnim(0);
screen._windows[36].frame();
numFrames = 3;
} else {
intf.draw3d(false);
screen._windows[36].frame();
screen._windows[3].update();
numFrames = 1;
}
events.wait(numFrames, true);
if (!_buttonValue)
continue;
if (_buttonValue == 27) {
_buttonValue = 0;
break;
} else if (_buttonValue >= 201 && _buttonValue <= 206) {
_buttonValue -= 201;
if (_buttonValue > party._partyCount)
continue;
if (party._activeParty[_buttonValue - 1].noActions())
continue;
scripts._whoWill = _buttonValue;
break;
}
}
intf._face1State = intf._face2State = 2;
screen._windows[36].close();
return _buttonValue;
}
} // End of namespace Xeen

View File

@ -0,0 +1,43 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef XEEN_DIALOGS_WHOWHILL_H
#define XEEN_DIALOGS_WHOWHILL_H
#include "xeen/dialogs.h"
namespace Xeen {
class WhoWill : public ButtonContainer {
private:
XeenEngine *_vm;
WhoWill(XeenEngine *vm) : ButtonContainer(), _vm(vm) {}
int execute(int message, int action, bool type);
public:
static int show(XeenEngine *vm, int message, int action, bool type);
};
} // End of namespace Xeen
#endif /* XEEN_DIALOGS_WHOWHILL_H */

View File

@ -0,0 +1,94 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "xeen/dialogs_yesno.h"
#include "xeen/xeen.h"
namespace Xeen {
bool YesNo::show(XeenEngine *vm, bool type, int v2) {
YesNo *dlg = new YesNo(vm);
bool result = dlg->execute(type, v2);
delete dlg;
return result;
}
bool YesNo::execute(bool type, int v2) {
Screen &screen = *_vm->_screen;
EventsManager &events = *_vm->_events;
Interface &intf = *_vm->_interface;
Map &map = *_vm->_map;
Party &party = *_vm->_party;
SpriteResource confirmSprites;
int numFrames;
bool result = false;
Mode oldMode = _vm->_mode;
_vm->_mode = oldMode == MODE_7 ? MODE_8 : MODE_7;
if (!type) {
confirmSprites.load("confirm.icn");
intf._globalSprites.draw(screen, 7, Common::Point(232, 74));
confirmSprites.draw(screen, 0, Common::Point(235, 75));
confirmSprites.draw(screen, 2, Common::Point(260, 75));
screen._windows[34].update();
addButton(Common::Rect(235, 75, 259, 95), 'Y', &confirmSprites);
addButton(Common::Rect(260, 75, 284, 95), 'N', &confirmSprites);
intf._face1State = map._headData[party._mazePosition.y][party._mazePosition.x]._left;
intf._face2State = map._headData[party._mazePosition.y][party._mazePosition.x]._right;
}
while (!_vm->shouldQuit()) {
events.updateGameCounter();
if (intf._townSprites[0].empty()) {
intf.draw3d(true);
numFrames = 1;
} else {
intf.drawTownAnim(v2);
numFrames = 3;
}
events.wait(3, true);
if (!_buttonValue)
continue;
if (type || _buttonValue == 'Y') {
result = true;
break;
} else if (_buttonValue == 'N' || _buttonValue == Common::KEYCODE_ESCAPE)
break;
}
intf._face1State = intf._face2State = 2;
_vm->_mode = oldMode;
if (!type)
intf.mainIconsPrint();
return result;
}
} // End of namespace Xeen

View File

@ -0,0 +1,43 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef XEEN_DIALOGS_YESNO_H
#define XEEN_DIALOGS_YESNO_H
#include "xeen/dialogs.h"
namespace Xeen {
class YesNo : public ButtonContainer {
private:
XeenEngine *_vm;
YesNo(XeenEngine *vm) : ButtonContainer(), _vm(vm) {}
bool execute(bool type, int v2);
public:
static bool show(XeenEngine *vm, bool type, int v2);
};
} // End of namespace Xeen
#endif /* XEEN_DIALOGS_YESNO_H */

View File

@ -76,6 +76,7 @@ private:
bool checkMoveDirection(int key);
public:
SpriteResource _townSprites[8];
int _intrIndex1;
public:
Interface(XeenEngine *vm);

View File

@ -393,6 +393,7 @@ InterfaceMap::InterfaceMap(XeenEngine *vm): _vm(vm) {
_tillMove = 0;
_flag1 = false;
_overallFrame = 0;
_face1State = _face2State = 0;
}
void InterfaceMap::setup() {
@ -3852,15 +3853,15 @@ void InterfaceMap::assembleBorder() {
// Handle the face UI elements for indicating clairvoyance status
_face1UIFrame = (_face1UIFrame + 1) % 4;
if (_vm->_face1State == 0)
if (_face1State == 0)
_face1UIFrame += 4;
else if (_vm->_face1State == 2)
else if (_face1State == 2)
_face1UIFrame = 0;
_face2UIFrame = (_face2UIFrame + 1) % 4 + 12;
if (_vm->_face2State == 0)
if (_face2State == 0)
_face2UIFrame += 252;
else if (_vm->_face2State == 2)
else if (_face2State == 2)
_face2UIFrame = 0;
if (!_vm->_party->_clairvoyanceActive) {
@ -4310,4 +4311,8 @@ void InterfaceMap::drawMiniMap() {
party._wizardEyeActive = eyeActive;
}
void InterfaceMap::drawTownAnim(int v) {
warning("TODO");
}
} // End of namespace Xeen

View File

@ -103,7 +103,6 @@ private:
void setMonsterSprite(DrawStruct &drawStruct, MazeMonster &monster,
SpriteResource *sprites, int frame, int defaultY);
protected:
SpriteResource _globalSprites;
int8 _wp[20];
byte _wo[308];
bool _flipWater;
@ -143,8 +142,11 @@ protected:
public:
OutdoorDrawList _outdoorList;
IndoorDrawList _indoorList;
SpriteResource _globalSprites;
bool _upDoorText;
Common::String _screenText;
int _face1State;
int _face2State;
public:
InterfaceMap(XeenEngine *vm);
@ -163,6 +165,8 @@ public:
void setOutdoorsMonsters();
void setOutdoorsObjects();
void drawTownAnim(int v);
};
} // End of namespace Xeen

View File

@ -309,6 +309,8 @@ public:
HeadData();
void synchronize(Common::SeekableReadStream &s);
HeadEntry *operator[](int y) { return &_data[y][0]; }
};
struct AnimationFrame { int _front, _left, _back, _right; };

View File

@ -10,6 +10,8 @@ MODULE_OBJS := \
dialogs.o \
dialogs_error.o \
dialogs_options.o \
dialogs_whowill.o \
dialogs_yesno.o \
events.o \
files.o \
font.o \

View File

@ -167,6 +167,12 @@ bool PlayerStruct::charSavingThrow() {
return false;
}
bool PlayerStruct::noActions() {
// TODO
return false;
}
/*------------------------------------------------------------------------*/
void Roster::synchronize(Common::Serializer &s) {

View File

@ -139,6 +139,8 @@ public:
int getStat(int statNum, int v2);
bool charSavingThrow();
bool noActions();
};
class Roster: public Common::Array<PlayerStruct> {

View File

@ -68,6 +68,9 @@ const char *const OPTIONS_TITLE =
const char *const THE_PARTY_NEEDS_REST = "\x0B""012The Party needs rest!";
const char *const WHO_WILL = "\X03""c\X0B""000\x09""000%s\x0A\x0A"
"Who will\x0A%s?\x0A\x0B""055F1 - F%d";
const char *const TERRAIN_TYPES[6] = {
"town", "cave", "towr", "cstl", "dung", "scfi"
};
@ -85,6 +88,17 @@ const char *const SURFACE_NAMES[16] = {
"space.srf"
};
const char *const WHO_ACTIONS[32] = {
"aSearch", "aOpen", "aDrink", "aMine", "aTouch", "aRead", "aLearn", "aTake",
"aBang", "aSteal", "aBribe", "aPay", "aSit", "aTry", "aTurn", "aBathe",
"aDestroy", "aPull", "aDescend", "aTossACoin", "aPray", "aJoin", "aAct",
"aPlay", "aPush", "aRub", "aPick", "aEat", "aSign", "aClose", "aLook", "aTry"
};
const char *const WHO_WILL_ACTIONS[4] = {
"Open Grate", "Open Door", "Open Scroll", "Select Char"
};
const byte SYMBOLS[20][64] = {
{ // 0
0x00, 0x00, 0xA8, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0x00, 0xA8, 0x9E, 0x9C, 0x9C, 0x9E, 0x9E, 0x9E,

View File

@ -34,12 +34,18 @@ extern const char *const OPTIONS_TITLE;
extern const char *const THE_PARTY_NEEDS_REST;
extern const char *const WHO_WILL;
extern const char *const TERRAIN_TYPES[6];
extern const char *const SURFACE_TYPE_NAMES[15];
extern const char *const SURFACE_NAMES[16];
extern const char *const WHO_ACTIONS[32];
extern const char *const WHO_WILL_ACTIONS[4];
extern const byte SYMBOLS[20][64];
extern const byte TEXT_COLORS[40][4];

View File

@ -21,6 +21,7 @@
*/
#include "xeen/scripts.h"
#include "xeen/dialogs_whowill.h"
#include "xeen/party.h"
#include "xeen/xeen.h"
@ -72,7 +73,8 @@ Scripts::Scripts(XeenEngine *vm) : _vm(vm) {
_treasureItems = 0;
_treasureGold = 0;
_treasureGems = 0;
_lineNum = 0;
_charIndex = 0;
_v2 = 0;
_nEdamageType = 0;
_animCounter = 0;
@ -85,7 +87,7 @@ void Scripts::checkEvents() {
Map &map = *_vm->_map;
Party &party = *_vm->_party;
int var18 = 0;
// int var18 = 0;
_itemType = 0;
_var4F = 0;
bool var50 = false;
@ -102,14 +104,14 @@ void Scripts::checkEvents() {
do {
_lineNum = 0;
int varA = 0;
// int varA = 0;
_animCounter = 0;
int var4E = 0;
// int var4E = 0;
const Common::Point pt = party._mazePosition;
int varC = 1;
_charIndex = 1;
_v2 = 1;
_nEdamageType = 0;
int var40 = -1;
// int var40 = -1;
while (_lineNum >= 0) {
// Break out of the events if there's an attacking monster
@ -232,6 +234,9 @@ void Scripts::cmdDoorTextLrg(Common::Array<byte> &params) {
cmdNoAction(params);
}
/**
* Show a sign text on-screen
*/
void Scripts::cmdSignText(Common::Array<byte> &params) {
Interface &intf = *_vm->_interface;
intf._screenText = Common::String::format("\f08\x03""c\t120\v088%s\x03""l\fd",
@ -247,6 +252,9 @@ void Scripts::cmdNPC(Common::Array<byte> &params) {
warning("TODO: cmdNPC");
}
/**
* Play a sound FX
*/
void Scripts::cmdPlayFX(Common::Array<byte> &params) {
_vm->_sound->playFX(params[0]);
@ -255,74 +263,118 @@ void Scripts::cmdPlayFX(Common::Array<byte> &params) {
}
void Scripts::cmdTeleport(Common::Array<byte> &params) {
error("TODO");
}
/**
* Do a conditional check
*/
void Scripts::cmdIf(Common::Array<byte> &params) {
switch (params[0]) {
case 16:
case 34:
case 100:
// TODO
break;
case 25:
case 35:
case 101:
case 106:
// TODO
break;
default:
break;
}
}
void Scripts::cmdMoveObj(Common::Array<byte> &params) {}
void Scripts::cmdTakeOrGive(Common::Array<byte> &params) {}
void Scripts::cmdMoveObj(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdTakeOrGive(Common::Array<byte> &params) { error("TODO"); }
/**
* Move to the next line of the script
*/
void Scripts::cmdNoAction(Common::Array<byte> &params) {
// Move to next line
_lineNum = _vm->_party->_partyDead ? -1 : _lineNum + 1;
}
void Scripts::cmdRemove(Common::Array<byte> &params) {}
void Scripts::cmdSetChar(Common::Array<byte> &params) {}
void Scripts::cmdSpawn(Common::Array<byte> &params) {}
void Scripts::cmdDoTownEvent(Common::Array<byte> &params) {}
void Scripts::cmdExit(Common::Array<byte> &params) {}
void Scripts::cmdAfterMap(Common::Array<byte> &params) {}
void Scripts::cmdGiveExtended(Common::Array<byte> &params) {}
void Scripts::cmdConfirmWord(Common::Array<byte> &params) {}
void Scripts::cmdDamage(Common::Array<byte> &params) {}
void Scripts::cmdJumpRnd(Common::Array<byte> &params) {}
void Scripts::cmdAfterEvent(Common::Array<byte> &params) {}
void Scripts::cmdCallEvent(Common::Array<byte> &params) {}
void Scripts::cmdReturn(Common::Array<byte> &params) {}
void Scripts::cmdSetVar(Common::Array<byte> &params) {}
void Scripts::cmdCutsceneEndClouds(Common::Array<byte> &params) {}
void Scripts::cmdWhoWill(Common::Array<byte> &params) {}
void Scripts::cmdRndDamage(Common::Array<byte> &params) {}
void Scripts::cmdMoveWallObj(Common::Array<byte> &params) {}
void Scripts::cmdAlterCellFlag(Common::Array<byte> &params) {}
void Scripts::cmdAlterHed(Common::Array<byte> &params) {}
void Scripts::cmdDisplayStat(Common::Array<byte> &params) {}
void Scripts::cmdSeatTextSml(Common::Array<byte> &params) {}
void Scripts::cmdPlayEventVoc(Common::Array<byte> &params) {}
void Scripts::cmdDisplayBottom(Common::Array<byte> &params) {}
void Scripts::cmdIfMapFlag(Common::Array<byte> &params) {}
void Scripts::cmdSelRndChar(Common::Array<byte> &params) {}
void Scripts::cmdGiveEnchanted(Common::Array<byte> &params) {}
void Scripts::cmdItemType(Common::Array<byte> &params) {}
void Scripts::cmdMakeNothingHere(Common::Array<byte> &params) {}
void Scripts::cmdNoAction2(Common::Array<byte> &params) {}
void Scripts::cmdChooseNumeric(Common::Array<byte> &params) {}
void Scripts::cmdDisplayBottomTwoLines(Common::Array<byte> &params) {}
void Scripts::cmdDisplayLarge(Common::Array<byte> &params) {}
void Scripts::cmdExchObj(Common::Array<byte> &params) {}
void Scripts::cmdFallToMap(Common::Array<byte> &params) {}
void Scripts::cmdDisplayMain(Common::Array<byte> &params) {}
void Scripts::cmdGoto(Common::Array<byte> &params) {}
void Scripts::cmdConfirmWord2(Common::Array<byte> &params) {}
void Scripts::cmdGotoRandom(Common::Array<byte> &params) {}
void Scripts::cmdCutsceneEndDarkside(Common::Array<byte> &params) {}
void Scripts::cmdCutsceneEdWorld(Common::Array<byte> &params) {}
void Scripts::cmdFlipWorld(Common::Array<byte> &params) {}
void Scripts::cmdPlayCD(Common::Array<byte> &params) {}
void Scripts::cmdRemove(Common::Array<byte> &params) { error("TODO"); }
/**
* Set the currently active character for other script operations
*/
void Scripts::cmdSetChar(Common::Array<byte> &params) {
if (params[0] != 7) {
_charIndex = WhoWill::show(_vm, 22, 3, false);
if (_charIndex == 0) {
cmdExit(params);
return;
}
} else {
_charIndex = _vm->getRandomNumber(1, _vm->_party->_partyCount);
}
_v2 = 1;
cmdNoAction(params);
}
void Scripts::cmdSpawn(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdDoTownEvent(Common::Array<byte> &params) { error("TODO"); }
/**
* Stop executing the script
*/
void Scripts::cmdExit(Common::Array<byte> &params) {
_lineNum = -1;
}
void Scripts::cmdAfterMap(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdGiveExtended(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdConfirmWord(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdDamage(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdJumpRnd(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdAfterEvent(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdCallEvent(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdReturn(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdSetVar(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdCutsceneEndClouds(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdWhoWill(Common::Array<byte> &params) {
_charIndex = WhoWill::show(_vm, params[0], params[1], true);
_var4F = true;
if (_charIndex == 0)
cmdExit(params);
else
cmdNoAction(params);
}
void Scripts::cmdRndDamage(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdMoveWallObj(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdAlterCellFlag(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdAlterHed(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdDisplayStat(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdSeatTextSml(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdPlayEventVoc(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdDisplayBottom(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdIfMapFlag(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdSelRndChar(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdGiveEnchanted(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdItemType(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdMakeNothingHere(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdNoAction2(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdChooseNumeric(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdDisplayBottomTwoLines(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdDisplayLarge(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdExchObj(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdFallToMap(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdDisplayMain(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdGoto(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdConfirmWord2(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdGotoRandom(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdCutsceneEndDarkside(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdCutsceneEdWorld(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdFlipWorld(Common::Array<byte> &params) { error("TODO"); }
void Scripts::cmdPlayCD(Common::Array<byte> &params) { error("TODO"); }
} // End of namespace Xeen

View File

@ -121,12 +121,12 @@ class Scripts {
private:
XeenEngine *_vm;
int _charFX[6];
int _whoWill;
int _itemType;
int _treasureItems;
int _treasureGold;
int _treasureGems;
int _lineNum;
int _charIndex;
int _v2;
int _var4F;
@ -134,6 +134,8 @@ private:
Common::String _paramText;
MazeEvent *_event;
int whoWill(int v1, int v2, int v3);
void doOpcode(MazeEvent &event);
void cmdDisplay1(Common::Array<byte> &params);
void cmdDoorTextSml(Common::Array<byte> &params);
@ -192,6 +194,7 @@ private:
public:
int _animCounter;
bool _eventSkipped;
int _whoWill;
public:
Scripts(XeenEngine *vm);

View File

@ -50,8 +50,6 @@ XeenEngine::XeenEngine(OSystem *syst, const XeenGameDescription *gameDesc)
_eventData = nullptr;
_loadDarkSide = 1;
_dangerSenseAllowed = false;
_face1State = 0;
_face2State = 0;
_noDirectionSense = false;
_moveMonsters = false;
_mode = MODE_0;
@ -128,6 +126,10 @@ int XeenEngine::getRandomNumber(int maxNumber) {
return _randomSource.getRandomNumber(maxNumber);
}
int XeenEngine::getRandomNumber(int minNumber, int maxNumber) {
return getRandomNumber(maxNumber - minNumber) + minNumber;
}
Common::Error XeenEngine::saveGameState(int slot, const Common::String &desc) {
Common::OutSaveFile *out = g_system->getSavefileManager()->openForSaving(
generateSaveName(slot));

View File

@ -145,8 +145,6 @@ public:
Roster _roster;
int _loadDarkSide;
bool _dangerSenseAllowed;
int _face1State;
int _face2State;
bool _noDirectionSense;
bool _moveMonsters;
int _openDoor;
@ -163,6 +161,8 @@ public:
int getRandomNumber(int maxNumber);
int getRandomNumber(int minNumber, int maxNumber);
/**
* Load a savegame
*/