SHERLOCK: Refactored Chess class to be Map class

This commit is contained in:
Paul Gilbert 2015-04-15 08:22:40 -05:00
parent a830d77325
commit 17bf9e7f54
11 changed files with 69 additions and 51 deletions

View file

@ -20,26 +20,27 @@
*
*/
#ifndef SHERLOCK_CHESS_H
#define SHERLOCK_CHESS_H
#include "sherlock/map.h"
namespace Sherlock {
namespace Scalpel {
Map::Map(SherlockEngine *vm): _vm(vm) {
}
class ScalpelEngine;
/**
* Loads the list of points for locations on the map for each scene
*/
void Map::loadPoints(int count, const int *xList, const int *yList) {
for (int idx = 0; idx < count; ++idx, ++xList, ++yList) {
_points.push_back(Common::Point(*xList, *yList));
}
}
class Chess {
private:
ScalpelEngine *_vm;
public:
Chess(ScalpelEngine *vm) : _vm(vm) {}
int doChessBoard();
};
} // End of namespace Scalpel
/**
* Show the map
*/
int Map::show() {
return 0;
}
} // End of namespace Sherlock
#endif

View file

@ -20,18 +20,33 @@
*
*/
#include "sherlock/scalpel/chess.h"
#include "sherlock/scalpel/scalpel.h"
#ifndef SHERLOCK_MAP_H
#define SHERLOCK_MAP_H
#include "common/scummsys.h"
#include "common/array.h"
#include "common/rect.h"
#include "common/str.h"
namespace Sherlock {
namespace Scalpel {
class SherlockEngine;
int Chess::doChessBoard() {
// TODO
return 0;
}
class Map {
private:
SherlockEngine *_vm;
Common::Array<Common::Point> _points; // Map locations for each scene
public:
public:
Map(SherlockEngine *vm);
} // End of namespace Scalpel
const Common::Point &operator[](int idx) { return _points[idx]; }
} // End of namespace Scalpel
void loadPoints(int count, const int *xList, const int *yList);
int show();
};
} // End of namespace Sherlock
#endif

View file

@ -1,7 +1,6 @@
MODULE := engines/sherlock
MODULE_OBJS = \
scalpel/chess.o \
scalpel/darts.o \
scalpel/scalpel.o \
tattoo/tattoo.o \
@ -13,6 +12,7 @@ MODULE_OBJS = \
graphics.o \
inventory.o \
journal.o \
map.o \
objects.o \
people.o \
resources.o \

View file

@ -801,6 +801,7 @@ void Object::setObjSequence(int seq, bool wait) {
* @returns 0 if no codes are found, 1 if codes were found
*/
int Object::checkNameForCodes(const Common::String &name, const char *const messages[]) {
Map &map = *_vm->_map;
People &people = *_vm->_people;
Scene &scene = *_vm->_scene;
Screen &screen = *_vm->_screen;
@ -847,9 +848,9 @@ int Object::checkNameForCodes(const Common::String &name, const char *const mess
if (ch >= '0' && ch <= '9') {
scene._goToScene = atoi(name.c_str() + 1);
if (scene._goToScene < 97 && _vm->_map[scene._goToScene].x) {
_vm->_over.x = _vm->_map[scene._goToScene].x * 100 - 600;
_vm->_over.y = _vm->_map[scene._goToScene].y * 100 + 900;
if (scene._goToScene < 97 && map[scene._goToScene].x) {
_vm->_over.x = map[scene._goToScene].x * 100 - 600;
_vm->_over.y = map[scene._goToScene].y * 100 + 900;
}
if ((p = strchr(name.c_str(), ',')) != nullptr) {

View file

@ -415,6 +415,7 @@ void People::setWalking() {
* is being displayed, then the chraracter will always face down.
*/
void People::gotoStand(Sprite &sprite) {
Map &map = *_vm->_map;
Scene &scene = *_vm->_scene;
_walkTo.clear();
sprite._walkCount = 0;
@ -448,8 +449,8 @@ void People::gotoStand(Sprite &sprite) {
if (_vm->_onChessboard) {
sprite._sequenceNumber = 0;
_data[AL]._position.x = (_vm->_map[scene._charPoint].x - 6) * 100;
_data[AL]._position.y = (_vm->_map[scene._charPoint].x + 10) * 100;
_data[AL]._position.x = (map[scene._charPoint].x - 6) * 100;
_data[AL]._position.y = (map[scene._charPoint].x + 10) * 100;
}
_oldWalkSequence = -1;

View file

@ -183,13 +183,11 @@ byte TALK_SEQUENCES[MAX_PEOPLE][MAX_TALK_SEQUENCES] = {
ScalpelEngine::ScalpelEngine(OSystem *syst, const SherlockGameDescription *gameDesc) :
SherlockEngine(syst, gameDesc) {
_chess = nullptr;
_darts = nullptr;
_chessResult = 0;
_mapResult = 0;
}
ScalpelEngine::~ScalpelEngine() {
delete _chess;
delete _darts;
}
@ -199,7 +197,6 @@ ScalpelEngine::~ScalpelEngine() {
void ScalpelEngine::initialize() {
SherlockEngine::initialize();
_chess = new Chess(this);
_darts = new Darts(this);
_flags.resize(100 * 8);
@ -207,8 +204,7 @@ void ScalpelEngine::initialize() {
_flags[39] = true; // Turn on Baker Street
// Load the map co-ordinates for each scene
for (int idx = 0; idx < NUM_PLACES; ++idx)
_map.push_back(Common::Point(MAP_X[idx], MAP_Y[idx]));
_map->loadPoints(NUM_PLACES, &MAP_X[0], &MAP_Y[0]);
// Load the inventory
loadInventory();
@ -393,7 +389,7 @@ void ScalpelEngine::startScene() {
}
}
_scene->_goToScene = _chess->doChessBoard();
_scene->_goToScene = _map->show();
_sound->freeSong();
_scene->_hsavedPos = Common::Point(-1, -1);
@ -533,10 +529,10 @@ void ScalpelEngine::startScene() {
if (_scene->_goToScene == 99) {
// Chess Board
_darts->playDarts();
_chessResult = _scene->_goToScene = 19; // Go back to the bar
_mapResult = _scene->_goToScene = 19; // Go back to the bar
}
_chessResult = _scene->_goToScene;
_mapResult = _scene->_goToScene;
}
/**

View file

@ -24,7 +24,6 @@
#define SHERLOCK_SCALPEL_H
#include "sherlock/sherlock.h"
#include "sherlock/scalpel/chess.h"
#include "sherlock/scalpel/darts.h"
namespace Sherlock {
@ -33,9 +32,8 @@ namespace Scalpel {
class ScalpelEngine : public SherlockEngine {
private:
Chess *_chess;
Darts *_darts;
int _chessResult;
int _mapResult;
bool showCityCutscene();
bool showAlleyCutscene();

View file

@ -193,6 +193,7 @@ void Scene::freeScene() {
*/
bool Scene::loadScene(const Common::String &filename) {
Events &events = *_vm->_events;
Map &map = *_vm->_map;
People &people = *_vm->_people;
Screen &screen = *_vm->_screen;
Sound &sound = *_vm->_sound;
@ -437,8 +438,8 @@ bool Scene::loadScene(const Common::String &filename) {
// Reset the position on the overland map
_vm->_oldCharPoint = _currentScene;
_vm->_over.x = _vm->_map[_currentScene].x * 100 - 600;
_vm->_over.y = _vm->_map[_currentScene].y * 100 + 900;
_vm->_over.x = map[_currentScene].x * 100 - 600;
_vm->_over.y = map[_currentScene].y * 100 + 900;
events.clearEvents();
return flag;
@ -843,6 +844,7 @@ void Scene::checkBgShapes(ImageFrame *frame, const Common::Point &pt) {
*/
int Scene::startCAnim(int cAnimNum, int playRate) {
Events &events = *_vm->_events;
Map &map = *_vm->_map;
People &people = *_vm->_people;
Resources &res = *_vm->_res;
Talk &talk = *_vm->_talk;
@ -1027,8 +1029,8 @@ int Scene::startCAnim(int cAnimNum, int playRate) {
if (gotoCode > 0 && !talk._talkToAbort) {
_goToScene = gotoCode;
if (_goToScene < 97 && _vm->_map[_goToScene].x) {
_overPos = _vm->_map[_goToScene];
if (_goToScene < 97 && map[_goToScene].x) {
_overPos = map[_goToScene];
}
}

View file

@ -35,6 +35,7 @@ SherlockEngine::SherlockEngine(OSystem *syst, const SherlockGameDescription *gam
_events = nullptr;
_inventory = nullptr;
_journal = nullptr;
_map = nullptr;
_people = nullptr;
_res = nullptr;
_scene = nullptr;
@ -55,6 +56,7 @@ SherlockEngine::~SherlockEngine() {
delete _debugger;
delete _events;
delete _journal;
delete _map;
delete _people;
delete _scene;
delete _screen;
@ -78,6 +80,7 @@ void SherlockEngine::initialize() {
_debugger = new Debugger(this);
_events = new Events(this);
_inventory = new Inventory(this);
_map = new Map(this);
_journal = new Journal(this);
_people = new People(this);
_scene = new Scene(this);

View file

@ -36,6 +36,7 @@
#include "sherlock/events.h"
#include "sherlock/inventory.h"
#include "sherlock/journal.h"
#include "sherlock/map.h"
#include "sherlock/people.h"
#include "sherlock/resources.h"
#include "sherlock/scene.h"
@ -85,6 +86,7 @@ public:
Events *_events;
Inventory *_inventory;
Journal *_journal;
Map *_map;
People *_people;
Resources *_res;
Scene *_scene;
@ -101,7 +103,6 @@ public:
bool _loadingSavedGame;
int _oldCharPoint; // Old scene
Common::Point _over; // Old map position
Common::Array<Common::Point> _map; // Map locations for each scene
bool _onChessboard;
bool _slowChess;
bool _joystick;

View file

@ -574,7 +574,6 @@ void Talk::freeTalkVars() {
* conversation. If found, the data for that conversation is loaded
*/
void Talk::loadTalkFile(const Common::String &filename) {
People &people = *_vm->_people;
Resources &res = *_vm->_res;
Sound &sound = *_vm->_sound;
@ -1000,6 +999,7 @@ void Talk::doScript(const Common::String &script) {
Animation &anim = *_vm->_animation;
Events &events = *_vm->_events;
Inventory &inv = *_vm->_inventory;
Map &map = *_vm->_map;
People &people = *_vm->_people;
Scene &scene = *_vm->_scene;
Screen &screen = *_vm->_screen;
@ -1351,8 +1351,8 @@ void Talk::doScript(const Common::String &script) {
if (scene._goToScene != 100) {
// Not going to the map overview
scene._oldCharPoint = scene._goToScene;
scene._overPos.x = _vm->_map[scene._goToScene].x * 100 - 600;
scene._overPos.y = _vm->_map[scene._goToScene].y * 100 + 900;
scene._overPos.x = map[scene._goToScene].x * 100 - 600;
scene._overPos.y = map[scene._goToScene].y * 100 + 900;
// Run a canimation?
if (str[2] > 100) {