mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-22 01:39:57 +00:00
1473 lines
39 KiB
C++
1473 lines
39 KiB
C++
/* 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 "common/config-manager.h"
|
|
#include "common/translation.h"
|
|
#include "gui/saveload.h"
|
|
#include "tsage/ringworld_logic.h"
|
|
#include "tsage/scenes.h"
|
|
#include "tsage/tsage.h"
|
|
#include "tsage/staticres.h"
|
|
#include "tsage/ringworld_demo.h"
|
|
#include "tsage/ringworld_scenes1.h"
|
|
#include "tsage/ringworld_scenes2.h"
|
|
#include "tsage/ringworld_scenes3.h"
|
|
#include "tsage/ringworld_scenes4.h"
|
|
#include "tsage/ringworld_scenes5.h"
|
|
#include "tsage/ringworld_scenes6.h"
|
|
#include "tsage/ringworld_scenes8.h"
|
|
#include "tsage/ringworld_scenes10.h"
|
|
|
|
namespace tSage {
|
|
|
|
Scene *RingworldGame::createScene(int sceneNumber) {
|
|
switch (sceneNumber) {
|
|
/* Scene group 1 */
|
|
// Kziniti Palace (Introduction)
|
|
case 10: return new Scene10();
|
|
// Outer Space (Introduction)
|
|
case 15: return new Scene15();
|
|
// Cut-scenes for Ch'mee house in distance
|
|
case 20: return new Scene20();
|
|
// Outside Ch'mee residence
|
|
case 30: return new Scene30();
|
|
// Chmeee Home
|
|
case 40: return new Scene40();
|
|
// By Flycycles
|
|
case 50: return new Scene50();
|
|
// Flycycle controls
|
|
case 60: return new Scene60();
|
|
// Shipyard Entrance
|
|
case 90: return new Scene90();
|
|
// Ship Close-up
|
|
case 95: return new Scene95();
|
|
// Sunflower navigation sequence
|
|
case 6100: return new Scene6100();
|
|
|
|
/* Scene group 2 */
|
|
// Title screen
|
|
case 1000: return new Scene1000();
|
|
// Fleeing planet cutscene
|
|
case 1001: return new Scene1001();
|
|
// Unused
|
|
case 1250: return new Scene1250();
|
|
// Ringworld Wall
|
|
case 1400: return new Scene1400();
|
|
// Ringworld Space-port
|
|
case 1500: return new Scene1500();
|
|
|
|
/* Scene group 3 - Part #1 */
|
|
// Cockpit cutscenes
|
|
case 2000: return new Scene2000();
|
|
// Starcraft - Cockpit
|
|
case 2100: return new Scene2100();
|
|
// Encyclopedia
|
|
case 2120: return new Scene2120();
|
|
// Starcraft - Level 2
|
|
case 2150: return new Scene2150();
|
|
// Starcraft - AutoDoc
|
|
case 2200: return new Scene2200();
|
|
// Stasis Field Map
|
|
case 2222: return new Scene2222();
|
|
// Starcraft - Quinn's Room
|
|
case 2230: return new Scene2230();
|
|
|
|
/* Scene group 3 - Part #2 */
|
|
// Starcraft - Storage Room
|
|
case 2280: return new Scene2280();
|
|
// Starcraft - Hanger Bay
|
|
case 2300: return new Scene2300();
|
|
// Starcraft - Copy Protection Screen
|
|
case 2310: return new Scene2310();
|
|
// Starcraft - Lander Bay
|
|
case 2320: return new Scene2320();
|
|
// Scene 2400 - Descending in Lander
|
|
case 2400: return new Scene2400();
|
|
|
|
/* Scene group 4 */
|
|
// Ringworld Scan
|
|
case 3500: return new Scene3500();
|
|
// Remote Viewer
|
|
case 3700: return new Scene3700();
|
|
|
|
/* Scene group 5 */
|
|
// Village
|
|
case 4000: return new Scene4000();
|
|
// Village - Outside Lander
|
|
case 4010: return new Scene4010();
|
|
// Village - Puzzle Board
|
|
case 4025: return new Scene4025();
|
|
// Village - Temple Antechamber
|
|
case 4045: return new Scene4045();
|
|
// Village - Temple
|
|
case 4050: return new Scene4050();
|
|
// Village - Hut
|
|
case 4100: return new Scene4100();
|
|
// Village - Bedroom
|
|
case 4150: return new Scene4150();
|
|
// Village - Near Slaver Ship
|
|
case 4250: return new Scene4250();
|
|
// Village - Slaver Ship
|
|
case 4300: return new Scene4300();
|
|
// Village - Slaver Ship Keypad
|
|
case 4301: return new Scene4301();
|
|
|
|
/* Scene group 6 */
|
|
// Caverns - Entrance
|
|
case 5000: return new Scene5000();
|
|
// Caverns
|
|
case 5100: return new Scene5100();
|
|
// Caverns - Throne-room
|
|
case 5200: return new Scene5200();
|
|
// Caverns - Pit
|
|
case 5300: return new Scene5300();
|
|
|
|
/* Scene group 8 */
|
|
// Landing near beach
|
|
case 7000: return new Scene7000();
|
|
// Underwater: swimming
|
|
case 7100: return new Scene7100();
|
|
// Underwater: Entering the cave
|
|
case 7200: return new Scene7200();
|
|
// Underwater: Lord Poria
|
|
case 7300: return new Scene7300();
|
|
// Floating Buildings: Outside
|
|
case 7600: return new Scene7600();
|
|
// Floating Buildings: In the lab
|
|
case 7700: return new Scene7700();
|
|
|
|
/* Scene group 10 */
|
|
// Near beach: Slave washing clothes
|
|
case 9100: return new Scene9100();
|
|
// Castle: Outside the bulwarks
|
|
case 9150: return new Scene9150();
|
|
// Castle: Near the fountain
|
|
case 9200: return new Scene9200();
|
|
// Castle: In front of a large guarded door
|
|
case 9300: return new Scene9300();
|
|
// Castle: In a hallway
|
|
case 9350: return new Scene9350();
|
|
// Castle: In a hallway
|
|
case 9360: return new Scene9360();
|
|
// Castle: Black-Smith room
|
|
case 9400: return new Scene9400();
|
|
// Castle: Dining room
|
|
case 9450: return new Scene9450();
|
|
// Castle: Bedroom
|
|
case 9500: return new Scene9500();
|
|
// Castle: Balcony
|
|
case 9700: return new Scene9700();
|
|
// Castle: In the garden
|
|
case 9750: return new Scene9750();
|
|
// Castle: Dressing room
|
|
case 9850: return new Scene9850();
|
|
// Ending
|
|
case 9900: return new Scene9900();
|
|
// Space travel
|
|
case 9999: return new Scene9999();
|
|
|
|
default:
|
|
error("Unknown scene number - %d", sceneNumber);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
DisplayHotspot::DisplayHotspot(int regionId, ...) {
|
|
_sceneRegionId = regionId;
|
|
|
|
// Load up the actions
|
|
va_list va;
|
|
va_start(va, regionId);
|
|
|
|
int param = va_arg(va, int);
|
|
while (param != LIST_END) {
|
|
_actions.push_back(param);
|
|
param = va_arg(va, int);
|
|
}
|
|
|
|
va_end(va);
|
|
}
|
|
|
|
bool DisplayHotspot::performAction(int action) {
|
|
for (uint i = 0; i < _actions.size(); i += 3) {
|
|
if (_actions[i] == action) {
|
|
display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
DisplayObject::DisplayObject(int firstAction, ...) {
|
|
// Load up the actions
|
|
va_list va;
|
|
va_start(va, firstAction);
|
|
|
|
int param = firstAction;
|
|
while (param != LIST_END) {
|
|
_actions.push_back(param);
|
|
param = va_arg(va, int);
|
|
}
|
|
|
|
va_end(va);
|
|
}
|
|
|
|
bool DisplayObject::performAction(int action) {
|
|
for (uint i = 0; i < _actions.size(); i += 3) {
|
|
if (_actions[i] == action) {
|
|
display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SceneArea::SceneArea() {
|
|
_savedArea = NULL;
|
|
_pt.x = _pt.y = 0;
|
|
}
|
|
|
|
SceneArea::~SceneArea() {
|
|
delete _savedArea;
|
|
}
|
|
|
|
void SceneArea::setup(int resNum, int rlbNum, int subNum, int actionId) {
|
|
_resNum = resNum;
|
|
_rlbNum = rlbNum;
|
|
_subNum = subNum;
|
|
_actionId = actionId;
|
|
|
|
_surface = surfaceFromRes(resNum, rlbNum, subNum);
|
|
}
|
|
|
|
void SceneArea::draw2() {
|
|
_surface.draw(Common::Point(_bounds.left, _bounds.top));
|
|
}
|
|
|
|
void SceneArea::display() {
|
|
_bounds.left = _pt.x - (_surface.getBounds().width() / 2);
|
|
_bounds.top = _pt.y + 1 - _surface.getBounds().height();
|
|
_bounds.setWidth(_surface.getBounds().width());
|
|
_bounds.setHeight(_surface.getBounds().height());
|
|
|
|
_savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
|
|
draw2();
|
|
}
|
|
|
|
void SceneArea::restore() {
|
|
assert(_savedArea);
|
|
_savedArea->draw(Common::Point(_bounds.left, _bounds.top));
|
|
delete _savedArea;
|
|
_savedArea = NULL;
|
|
}
|
|
|
|
void SceneArea::draw(bool flag) {
|
|
_surface = surfaceFromRes(_resNum, _rlbNum, flag ? _subNum + 1 : _subNum);
|
|
_surface.draw(Common::Point(_bounds.left, _bounds.top));
|
|
}
|
|
|
|
void SceneArea::wait() {
|
|
// Wait until a mouse or keypress
|
|
Event event;
|
|
while (!_vm->getEventManager()->shouldQuit() && !_globals->_events.getEvent(event)) {
|
|
g_system->updateScreen();
|
|
g_system->delayMillis(10);
|
|
}
|
|
|
|
SynchronizedList<SceneItem *>::iterator ii;
|
|
for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) {
|
|
SceneItem *sceneItem = *ii;
|
|
if (sceneItem->contains(event.mousePos)) {
|
|
sceneItem->doAction(_actionId);
|
|
break;
|
|
}
|
|
}
|
|
|
|
_globals->_events.setCursor(CURSOR_ARROW);
|
|
}
|
|
|
|
void SceneArea::synchronize(Serializer &s) {
|
|
if (s.getVersion() >= 2)
|
|
SavedObject::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_pt.x);
|
|
s.syncAsSint16LE(_pt.y);
|
|
s.syncAsSint32LE(_resNum);
|
|
s.syncAsSint32LE(_rlbNum);
|
|
s.syncAsSint32LE(_subNum);
|
|
s.syncAsSint32LE(_actionId);
|
|
_bounds.synchronize(s);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerGText::SpeakerGText() {
|
|
_speakerName = "GTEXT";
|
|
_textWidth = 160;
|
|
_textPos = Common::Point(130, 10);
|
|
_color1 = 42;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
void SpeakerGText::setText(const Common::String &msg) {
|
|
// Set the animation properties
|
|
_sceneObject.postInit();
|
|
_sceneObject.setVisage(9405);
|
|
_sceneObject.setStrip2(3);
|
|
_sceneObject.fixPriority(255);
|
|
_sceneObject.changeZoom(100);
|
|
_sceneObject._frame = 1;
|
|
_sceneObject.setPosition(Common::Point(183, 71));
|
|
_sceneObject.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
// Set the text
|
|
Rect textRect;
|
|
_globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth);
|
|
textRect.center(_sceneObject._position.x, _sceneObject._position.y);
|
|
_textPos.x = textRect.left;
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
void SpeakerGText::removeText() {
|
|
_sceneObject.remove();
|
|
Speaker::removeText();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerPOR::SpeakerPOR() {
|
|
_speakerName = "POR";
|
|
_newSceneNumber = 7221;
|
|
_textPos = Common::Point(10, 30);
|
|
_color1 = 41;
|
|
}
|
|
|
|
void SpeakerPOR::SpeakerAction1::signal(){
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(_globals->_randomSource.getRandomNumber(60) + 60);
|
|
break;
|
|
case 1:
|
|
static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_5, this, NULL);
|
|
break;
|
|
case 2:
|
|
setDelay(_globals->_randomSource.getRandomNumber(10));
|
|
_actionIndex = 0;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void SpeakerPOR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(7223);
|
|
_object1.setStrip2(2);
|
|
_object1.setPosition(Common::Point(191, 166));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(7223);
|
|
_object2.setPosition(Common::Point(159, 86));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
_object3.postInit(&_objectList);
|
|
_object3.setVisage(7223);
|
|
_object3.setStrip(3);
|
|
_object3.setPosition(Common::Point(119, 107));
|
|
_object3.fixPriority(199);
|
|
_object3.setAction(&_action2);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerOR::SpeakerOR() {
|
|
_speakerName = "OR";
|
|
_newSceneNumber = 9430;
|
|
_textPos = Common::Point(8, 36);
|
|
_color1 = 42;
|
|
_textWidth = 136;
|
|
}
|
|
|
|
void SpeakerOR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(9431);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(202, 147));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(9431);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.setZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(199, 85));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerOText::SpeakerOText() : SpeakerGText() {
|
|
_speakerName = "OTEXT";
|
|
_textWidth = 240;
|
|
_textPos = Common::Point(130, 10);
|
|
_color1 = 42;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerQText::SpeakerQText() : ScreenSpeaker() {
|
|
_speakerName = "QTEXT";
|
|
_textPos = Common::Point(160, 40);
|
|
_color1 = 35;
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerSText::SpeakerSText() : ScreenSpeaker() {
|
|
_speakerName = "STEXT";
|
|
_color1 = 13;
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerPOText::SpeakerPOText() : ScreenSpeaker() {
|
|
_speakerName = "POTEXT";
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_color1 = 41;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerMText::SpeakerMText() {
|
|
_speakerName = "MTEXT";
|
|
_color1 = 22;
|
|
_textWidth = 230;
|
|
_textMode = ALIGN_CENTER;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCText::SpeakerCText() {
|
|
_speakerName = "CTEXT";
|
|
_color1 = 4;
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerEText::SpeakerEText() {
|
|
_speakerName = "ETEXT";
|
|
_textPos = Common::Point(20, 20);
|
|
_color1 = 22;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerGR::SpeakerGR() : AnimatedSpeaker() {
|
|
_speakerName = "GR";
|
|
_newSceneNumber = 9220;
|
|
_textWidth = 136;
|
|
_textPos = Common::Point(168, 36);
|
|
_color1 = 14;
|
|
}
|
|
|
|
void SpeakerGR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(9221);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(101, 70));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerHText::SpeakerHText() {
|
|
_speakerName = "HTEXT";
|
|
_textPos = Common::Point(160, 40);
|
|
_color1 = 52;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerSKText::SpeakerSKText() : ScreenSpeaker() {
|
|
_speakerName = "SKTEXT";
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_color1 = 9;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerPText::SpeakerPText() {
|
|
_speakerName = "PTEXT";
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_color1 = 5;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCHFText::SpeakerCHFText() {
|
|
_speakerName = "CHFTEXT";
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_color1 = 56;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCDRText::SpeakerCDRText() {
|
|
_speakerName = "CDRTEXT";
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_color1 = 52;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerFLText::SpeakerFLText() {
|
|
_speakerName = "FLTEXT";
|
|
_textPos = Common::Point(10, 40);
|
|
_color1 = 17;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerBatText::SpeakerBatText() {
|
|
_speakerName = "BATTEXT";
|
|
_textWidth = 240;
|
|
_textMode = ALIGN_CENTER;
|
|
_color1 = 3;
|
|
_hideObjects = false;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerSKL::SpeakerSKL() : AnimatedSpeaker() {
|
|
_speakerName = "SKL";
|
|
_newSceneNumber = 7011;
|
|
_textPos = Common::Point(10, 30);
|
|
_color1 = 9;
|
|
}
|
|
|
|
void SpeakerSKL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(7013);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(203, 120));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(7013);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(197, 80));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerQL::SpeakerQL() : AnimatedSpeaker() {
|
|
_speakerName = "QL";
|
|
_newSceneNumber = 2610;
|
|
_textPos = Common::Point(160, 30);
|
|
_color1 = 35;
|
|
_textMode = ALIGN_CENTER;
|
|
}
|
|
|
|
void SpeakerQL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(2612);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(128, 146));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(2612);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(122, 84));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerSR::SpeakerSR() {
|
|
// TODO: check initialization of object3
|
|
_speakerName = "SR";
|
|
_newSceneNumber = 2811;
|
|
_textPos = Common::Point(10, 30);
|
|
_color1 = 13;
|
|
_textMode = ALIGN_CENTER;
|
|
}
|
|
|
|
void SpeakerSR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(2813);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(224, 198));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(2813);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(203, 96));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
_object3.postInit(&_objectList);
|
|
_object3.setVisage(2813);
|
|
_object3.setStrip(3);
|
|
_object3.setPosition(Common::Point(204, 91));
|
|
_object3.fixPriority(199);
|
|
_object3._numFrames = 3;
|
|
_object3.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerSL::SpeakerSL() {
|
|
_speakerName = "SL";
|
|
_newSceneNumber = 2810;
|
|
_textPos = Common::Point(140, 30);
|
|
_textWidth = 160;
|
|
_color1 = 13;
|
|
_textMode = ALIGN_CENTER;
|
|
}
|
|
|
|
void SpeakerSL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(2812);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(95, 198));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(2812);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(116, 96));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerQR::SpeakerQR() {
|
|
_speakerName = "QR";
|
|
_newSceneNumber = 2611;
|
|
_textPos = Common::Point(10, 30);
|
|
_color1 = 35;
|
|
_textMode = ALIGN_CENTER;
|
|
}
|
|
|
|
void SpeakerQR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(2613);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(191, 146));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(2613);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(197, 84));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerQU::SpeakerQU() {
|
|
_speakerName = "QU";
|
|
_newSceneNumber = 7020;
|
|
_textPos = Common::Point(160, 30);
|
|
_color1 = 35;
|
|
_textMode = ALIGN_CENTER;
|
|
}
|
|
|
|
void SpeakerQU::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(7021);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(116, 120));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(7021);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(111, 84));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCR::SpeakerCR() {
|
|
_speakerName = "CR";
|
|
_newSceneNumber = 9010;
|
|
_textPos = Common::Point(20, 40);
|
|
_color1 = 4;
|
|
}
|
|
|
|
void SpeakerCR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(9011);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.setPosition(Common::Point(219, 168));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(9011);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.setPosition(Common::Point(232, 81));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerMR::SpeakerMR() {
|
|
_speakerName = "MR";
|
|
_newSceneNumber = 2711;
|
|
_textPos = Common::Point(10, 40);
|
|
_color1 = 22;
|
|
}
|
|
|
|
void SpeakerMR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(2713);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(220, 143));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(2713);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(215, 99));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerSAL::SpeakerSAL() {
|
|
_speakerName = "SAL";
|
|
_newSceneNumber = 2851;
|
|
_textPos = Common::Point(10, 30);
|
|
_color1 = 13;
|
|
_textMode = ALIGN_CENTER;
|
|
}
|
|
|
|
void SpeakerSAL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(2853);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(185, 200));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(2853);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(170, 92));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerML::SpeakerML() {
|
|
_speakerName = "ML";
|
|
_newSceneNumber = 2710;
|
|
_textPos = Common::Point(160, 40);
|
|
_color1 = 22;
|
|
}
|
|
|
|
void SpeakerML::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(2712);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(99, 143));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(2712);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(105, 99));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCHFL::SpeakerCHFL() {
|
|
_speakerName = "CHFL";
|
|
_newSceneNumber = 4111;
|
|
_textPos = Common::Point(10, 40);
|
|
_color1 = 56;
|
|
}
|
|
|
|
void SpeakerCHFL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(4113);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(205, 116));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(4113);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(202, 71));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCHFR::SpeakerCHFR() {
|
|
_speakerName = "CHFR";
|
|
_newSceneNumber = 4110;
|
|
_textPos = Common::Point(160, 40);
|
|
_color1 = 56;
|
|
}
|
|
|
|
void SpeakerCHFR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(4112);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(103, 116));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(4112);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(106, 71));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerPL::SpeakerPL() {
|
|
_speakerName = "PL";
|
|
_newSceneNumber = 4060;
|
|
_textPos = Common::Point(160, 40);
|
|
_color1 = 5;
|
|
}
|
|
|
|
void SpeakerPL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(4062);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(107, 117));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(4062);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(200);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(105, 62));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
_object3.postInit(&_objectList);
|
|
_object3.setVisage(4062);
|
|
_object3.setStrip2(3);
|
|
_object3.fixPriority(255);
|
|
_object3.changeZoom(100);
|
|
_object3._frame = 1;
|
|
_object3.setPosition(Common::Point(105, 59));
|
|
_object3.setAction(&_speakerAction2, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
void SpeakerPL::removeText() {
|
|
_object3.remove();
|
|
AnimatedSpeaker::removeText();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerPR::SpeakerPR() {
|
|
_speakerName = "PR";
|
|
_newSceneNumber = 4061;
|
|
_textPos = Common::Point(10, 40);
|
|
_color1 = 5;
|
|
}
|
|
|
|
void SpeakerPR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(4063);
|
|
_object1.setStrip2(1);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(212, 117));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(4063);
|
|
_object2.setStrip2(2);
|
|
_object2.fixPriority(200);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(214, 62));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
_object3.postInit(&_objectList);
|
|
_object3.setVisage(4063);
|
|
_object3.setStrip2(3);
|
|
_object3.fixPriority(255);
|
|
_object3.changeZoom(100);
|
|
_object3._frame = 1;
|
|
_object3.setPosition(Common::Point(214, 59));
|
|
_object3.setAction(&_speakerAction2, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
void SpeakerPR::removeText() {
|
|
_object3.remove();
|
|
AnimatedSpeaker::removeText();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCDR::SpeakerCDR() {
|
|
_speakerName = "CDR";
|
|
_newSceneNumber = 4161;
|
|
_textPos = Common::Point(10, 40);
|
|
_color1 = 52;
|
|
}
|
|
|
|
void SpeakerCDR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(4163);
|
|
_object1.setStrip2(1);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(208, 97));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(4163);
|
|
_object2.setStrip2(2);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(200, 57));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerCDL::SpeakerCDL() {
|
|
_speakerName = "CDL";
|
|
_newSceneNumber = 4160;
|
|
_textPos = Common::Point(160, 40);
|
|
_color1 = 52;
|
|
}
|
|
|
|
void SpeakerCDL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(4162);
|
|
_object1.setStrip2(1);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(112, 97));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(4162);
|
|
_object2.setStrip2(2);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(115, 57));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerFLL::SpeakerFLL() {
|
|
_speakerName = "FLL";
|
|
_newSceneNumber = 5221;
|
|
_textPos = Common::Point(10, 40);
|
|
_color1 = 17;
|
|
}
|
|
|
|
void SpeakerFLL::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(5223);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(216, 129));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(5223);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(210, 67));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
SpeakerBatR::SpeakerBatR() {
|
|
_speakerName = "BATR";
|
|
_newSceneNumber = 5360;
|
|
_textPos = Common::Point(140, 40);
|
|
_color1 = 3;
|
|
}
|
|
|
|
void SpeakerBatR::setText(const Common::String &msg) {
|
|
_object1.postInit(&_objectList);
|
|
_object1.setVisage(5361);
|
|
_object1.setStrip2(2);
|
|
_object1.fixPriority(255);
|
|
_object1.changeZoom(100);
|
|
_object1._frame = 1;
|
|
_object1.setPosition(Common::Point(137, 122));
|
|
_object1.animate(ANIM_MODE_7, 0, NULL);
|
|
|
|
_object2.postInit(&_objectList);
|
|
_object2.setVisage(5361);
|
|
_object2.setStrip2(1);
|
|
_object2.fixPriority(255);
|
|
_object2.changeZoom(100);
|
|
_object2._frame = 1;
|
|
_object2.setPosition(Common::Point(137, 104));
|
|
_object2.setAction(&_speakerAction, NULL);
|
|
|
|
Speaker::setText(msg);
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
RingworldInvObjectList::RingworldInvObjectList() :
|
|
_stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."),
|
|
_scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."),
|
|
_stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, "A stasis box."),
|
|
_infoDisk(40, 1, 1, OBJECT_INFODISK, "The infodisk you took from the assassin."),
|
|
_stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, "The stasis field negator."),
|
|
_keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, "A magnetic key device."),
|
|
_medkit(2280, 1, 7, OBJECT_MEDKIT, "Your medkit."),
|
|
_ladder(4100, 1, 8, OBJECT_LADDER, "The chief's ladder."),
|
|
_rope(4150, 1, 9, OBJECT_ROPE, "The chief's rope."),
|
|
_key(7700, 1, 11, OBJECT_KEY, "A key."),
|
|
_translator(7700, 1, 13, OBJECT_TRANSLATOR, "The dolphin translator box."),
|
|
_ale(2150, 1, 10, OBJECT_ALE, "A bottle of ale."),
|
|
_paper(7700, 1, 12, OBJECT_PAPER, "A slip of paper with the numbers 2,4, and 3 written on it."),
|
|
_waldos(0, 1, 14, OBJECT_WALDOS, "A pair of waldos from the ruined probe."),
|
|
_stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, "A stasis box."),
|
|
_ring(8100, 2, 5, OBJECT_RING, "This is a signet ring sent to you by Louis Wu."),
|
|
_cloak(9850, 2, 6, OBJECT_CLOAK, "A fine silk cloak."),
|
|
_tunic(9450, 2, 7, OBJECT_TUNIC, "The patriarch's soiled tunic."),
|
|
_candle(9500, 2, 8, OBJECT_CANDLE, "A tallow candle."),
|
|
_straw(9400, 2, 9, OBJECT_STRAW, "Clean, dry straw."),
|
|
_scimitar(9850, 1, 18, OBJECT_SCIMITAR, "A scimitar from the Patriarch's closet."),
|
|
_sword(9850, 1, 17, OBJECT_SWORD, "A short sword from the Patriarch's closet."),
|
|
_helmet(9500, 2, 4, OBJECT_HELMET, "Some type of helmet."),
|
|
_items(4300, 2, 10, OBJECT_ITEMS, "Two interesting items from the Tnuctipun vessel."),
|
|
_concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, "The Tnuctipun anti-matter concentrator contained in a stasis field."),
|
|
_nullifier(5200, 2, 12, OBJECT_NULLIFIER, "A purported neural wave nullifier."),
|
|
_peg(4045, 2, 16, OBJECT_PEG, "A peg with a symbol."),
|
|
_vial(5100, 2, 17, OBJECT_VIAL, "A vial of the bat creatures anti-pheromone drug."),
|
|
_jacket(9850, 3, 1, OBJECT_JACKET, "A natty padded jacket."),
|
|
_tunic2(9850, 3, 2, OBJECT_TUNIC2, "A very hairy tunic."),
|
|
_bone(5300, 3, 5, OBJECT_BONE, "A very sharp bone."),
|
|
_jar(7700, 3, 4, OBJECT_JAR, "An jar filled with a green substance."),
|
|
_emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, "An empty jar.") {
|
|
|
|
// Add the items to the list
|
|
_itemList.push_back(&_stunner);
|
|
_itemList.push_back(&_scanner);
|
|
_itemList.push_back(&_stasisBox);
|
|
_itemList.push_back(&_infoDisk);
|
|
_itemList.push_back(&_stasisNegator);
|
|
_itemList.push_back(&_keyDevice);
|
|
_itemList.push_back(&_medkit);
|
|
_itemList.push_back(&_ladder);
|
|
_itemList.push_back(&_rope);
|
|
_itemList.push_back(&_key);
|
|
_itemList.push_back(&_translator);
|
|
_itemList.push_back(&_ale);
|
|
_itemList.push_back(&_paper);
|
|
_itemList.push_back(&_waldos);
|
|
_itemList.push_back(&_stasisBox2);
|
|
_itemList.push_back(&_ring);
|
|
_itemList.push_back(&_cloak);
|
|
_itemList.push_back(&_tunic);
|
|
_itemList.push_back(&_candle);
|
|
_itemList.push_back(&_straw);
|
|
_itemList.push_back(&_scimitar);
|
|
_itemList.push_back(&_sword);
|
|
_itemList.push_back(&_helmet);
|
|
_itemList.push_back(&_items);
|
|
_itemList.push_back(&_concentrator);
|
|
_itemList.push_back(&_nullifier);
|
|
_itemList.push_back(&_peg);
|
|
_itemList.push_back(&_vial);
|
|
_itemList.push_back(&_jacket);
|
|
_itemList.push_back(&_tunic2);
|
|
_itemList.push_back(&_bone);
|
|
_itemList.push_back(&_jar);
|
|
_itemList.push_back(&_emptyJar);
|
|
|
|
_selectedItem = NULL;
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void RingworldGame::restartGame() {
|
|
if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
|
|
_globals->_game->restart();
|
|
}
|
|
|
|
void RingworldGame::saveGame() {
|
|
if (!_vm->canSaveGameStateCurrently())
|
|
MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
|
|
else {
|
|
// Show the save dialog
|
|
handleSaveLoad(true, _globals->_sceneHandler._saveGameSlot, _globals->_sceneHandler._saveName);
|
|
}
|
|
}
|
|
|
|
void RingworldGame::restoreGame() {
|
|
if (!_vm->canLoadGameStateCurrently())
|
|
MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
|
|
else {
|
|
// Show the load dialog
|
|
handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName);
|
|
}
|
|
}
|
|
|
|
void RingworldGame::quitGame() {
|
|
if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
|
|
_vm->quitGame();
|
|
}
|
|
|
|
void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
|
|
const EnginePlugin *plugin = 0;
|
|
EngineMan.findGame(_vm->getGameId(), &plugin);
|
|
GUI::SaveLoadChooser *dialog;
|
|
if (saveFlag)
|
|
dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
|
|
else
|
|
dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));
|
|
|
|
dialog->setSaveMode(saveFlag);
|
|
|
|
saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
|
|
saveName = dialog->getResultString();
|
|
|
|
delete dialog;
|
|
}
|
|
|
|
void RingworldGame::start() {
|
|
// Set some default flags
|
|
_globals->setFlag(12);
|
|
_globals->setFlag(34);
|
|
|
|
// Set the screen to scroll in response to the player moving off-screen
|
|
_globals->_scrollFollower = &_globals->_player;
|
|
|
|
// Set the object's that will be in the player's inventory by default
|
|
RING_INVENTORY._stunner._sceneNumber = 1;
|
|
RING_INVENTORY._scanner._sceneNumber = 1;
|
|
RING_INVENTORY._ring._sceneNumber = 1;
|
|
|
|
// Switch to the title screen
|
|
_globals->_sceneManager.setNewScene(1000);
|
|
|
|
_globals->_events.showCursor();
|
|
}
|
|
|
|
void RingworldGame::restart() {
|
|
_globals->_scenePalette.clearListeners();
|
|
_globals->_soundHandler.stop();
|
|
|
|
// Reset the flags
|
|
_globals->reset();
|
|
_globals->setFlag(34);
|
|
|
|
// Clear save/load slots
|
|
_globals->_sceneHandler._saveGameSlot = -1;
|
|
_globals->_sceneHandler._loadGameSlot = -1;
|
|
|
|
_globals->_stripNum = 0;
|
|
_globals->_events.setCursor(CURSOR_WALK);
|
|
|
|
// Reset item properties
|
|
RING_INVENTORY._stunner._sceneNumber = 1;
|
|
RING_INVENTORY._scanner._sceneNumber = 1;
|
|
RING_INVENTORY._stasisBox._sceneNumber = 5200;
|
|
RING_INVENTORY._infoDisk._sceneNumber = 40;
|
|
RING_INVENTORY._stasisNegator._sceneNumber = 0;
|
|
RING_INVENTORY._keyDevice._sceneNumber = 0;
|
|
RING_INVENTORY._medkit._sceneNumber = 2280;
|
|
RING_INVENTORY._ladder._sceneNumber = 4100;
|
|
RING_INVENTORY._rope._sceneNumber = 4150;
|
|
RING_INVENTORY._key._sceneNumber = 7700;
|
|
RING_INVENTORY._translator._sceneNumber = 2150;
|
|
RING_INVENTORY._paper._sceneNumber = 7700;
|
|
RING_INVENTORY._waldos._sceneNumber = 0;
|
|
RING_INVENTORY._ring._sceneNumber = 1;
|
|
RING_INVENTORY._stasisBox2._sceneNumber = 8100;
|
|
RING_INVENTORY._cloak._sceneNumber = 9850;
|
|
RING_INVENTORY._tunic._sceneNumber = 9450;
|
|
RING_INVENTORY._candle._sceneNumber = 9500;
|
|
RING_INVENTORY._straw._sceneNumber = 9400;
|
|
RING_INVENTORY._scimitar._sceneNumber = 9850;
|
|
RING_INVENTORY._sword._sceneNumber = 9850;
|
|
RING_INVENTORY._helmet._sceneNumber = 9500;
|
|
RING_INVENTORY._items._sceneNumber = 4300;
|
|
RING_INVENTORY._concentrator._sceneNumber = 4300;
|
|
RING_INVENTORY._nullifier._sceneNumber = 4300;
|
|
RING_INVENTORY._peg._sceneNumber = 4045;
|
|
RING_INVENTORY._vial._sceneNumber = 5100;
|
|
RING_INVENTORY._jacket._sceneNumber = 9850;
|
|
RING_INVENTORY._tunic2._sceneNumber = 9850;
|
|
RING_INVENTORY._bone._sceneNumber = 5300;
|
|
RING_INVENTORY._jar._sceneNumber = 7700;
|
|
RING_INVENTORY._emptyJar._sceneNumber = 7700;
|
|
RING_INVENTORY._selectedItem = NULL;
|
|
|
|
// Change to the first game scene
|
|
_globals->_sceneManager.changeScene(30);
|
|
}
|
|
|
|
void RingworldGame::endGame(int resNum, int lineNum) {
|
|
_globals->_events.setCursor(CURSOR_WALK);
|
|
Common::String msg = _resourceManager->getMessage(resNum, lineNum);
|
|
bool savesExist = _saver->savegamesExist();
|
|
|
|
if (!savesExist) {
|
|
// No savegames exist, so prompt the user to restart or quit
|
|
if (MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING) == 0)
|
|
_vm->quitGame();
|
|
else
|
|
restart();
|
|
} else {
|
|
// Savegames exist, so prompt for Restore/Restart
|
|
bool breakFlag;
|
|
do {
|
|
if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0 || _vm->shouldQuit()) {
|
|
breakFlag = true;
|
|
} else {
|
|
handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName);
|
|
breakFlag = _globals->_sceneHandler._loadGameSlot >= 0;
|
|
}
|
|
} while (!breakFlag);
|
|
}
|
|
|
|
_globals->_events.setCursorFromFlag();
|
|
}
|
|
|
|
void RingworldGame::processEvent(Event &event) {
|
|
if (event.eventType == EVENT_KEYPRESS) {
|
|
switch (event.kbd.keycode) {
|
|
case Common::KEYCODE_F1:
|
|
// F1 - Help
|
|
MessageDialog::show(HELP_MSG, OK_BTN_STRING);
|
|
break;
|
|
|
|
case Common::KEYCODE_F2: {
|
|
// F2 - Sound Options
|
|
ConfigDialog *dlg = new ConfigDialog();
|
|
dlg->runModal();
|
|
delete dlg;
|
|
_globals->_events.setCursorFromFlag();
|
|
break;
|
|
}
|
|
|
|
case Common::KEYCODE_F3:
|
|
// F3 - Quit
|
|
quitGame();
|
|
event.handled = false;
|
|
break;
|
|
|
|
case Common::KEYCODE_F4:
|
|
// F4 - Restart
|
|
restartGame();
|
|
_globals->_events.setCursorFromFlag();
|
|
break;
|
|
|
|
case Common::KEYCODE_F7:
|
|
// F7 - Restore
|
|
restoreGame();
|
|
_globals->_events.setCursorFromFlag();
|
|
break;
|
|
|
|
case Common::KEYCODE_F10:
|
|
// F10 - Pause
|
|
GfxDialog::setPalette();
|
|
MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING);
|
|
_globals->_events.setCursorFromFlag();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
} // End of namespace tSage
|