TSAGE: Implement scene 7700.

Also move doAction() to core when related to sceneHostpot_3.
This commit is contained in:
strangerke 2011-03-29 12:10:00 +02:00
parent e18230f042
commit f208c33593
5 changed files with 182 additions and 41 deletions

View File

@ -1535,6 +1535,39 @@ void SceneHotspot::doAction(int action) {
/*--------------------------------------------------------------------------*/
void SceneHotspot_3::doAction(int action) {
switch (action) {
case CURSOR_WALK:
// Nothing
break;
case CURSOR_LOOK:
if (_field28 == -1)
SceneHotspot::doAction(action);
else
SceneItem::display(_field26, _field28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
break;
case CURSOR_USE:
if (_field2A == -1)
SceneHotspot::doAction(action);
else
SceneItem::display(_field26, _field2A, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void SceneHotspot_3::quickInit(const int ys, const int xe, const int ye, const int xs, const int val26, const int val28, const int val2A) {
setBounds(ys, xe, ye, xs);
_field26 = val26;
_field28 = val28;
_field2A = val2A;
_globals->_sceneItems.addItems(this, NULL);
}
/*--------------------------------------------------------------------------*/
void SceneObjectWrapper::setSceneObject(SceneObject *so) {
_sceneObject = so;
so->_strip = 1;
@ -2175,6 +2208,15 @@ void SceneObject::updateScreen() {
}
}
void SceneObject::quickInit(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority) {
postInit();
setVisage(visage);
setStrip(stripFrameNum);
setFrame(frameNum);
setPosition(Common::Point(posX, posY), 0);
setPriority2(priority);
}
/*--------------------------------------------------------------------------*/
void SceneObjectList::draw() {

View File

@ -434,6 +434,8 @@ public:
int _field2A;
SceneHotspot_3(): SceneHotspot_2() {}
void quickInit(const int ys, const int xe, const int ye, const int xs, const int val26, const int val28, const int val2A);
virtual void doAction(int action);
virtual Common::String getClassName() { return "SceneHotspot_3"; }
};
@ -557,6 +559,7 @@ public:
virtual void draw();
virtual void proc19() {}
virtual void updateScreen();
void quickInit(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority);
};
class SceneObjectExt: public SceneObject {

View File

@ -139,6 +139,7 @@ Scene *SceneFactory::createScene(int sceneNumber) {
/* Scene group 10 */
case 9350: return new Scene9350();
case 9700: return new Scene9700();
case 9750: return new Scene9750();
case 9999: return new Scene9999();

View File

@ -43,29 +43,6 @@ void Scene9350::Object1::draw() {
warning("Scene9350::Object1::draw - TODO");
}
void Scene9350::SceneHotspot1::doAction(int action) {
switch (action) {
case CURSOR_WALK:
// Nothing
break;
case CURSOR_LOOK:
if (_field28 == -1)
SceneHotspot::doAction(action);
else
SceneItem::display(_field26, _field28, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
break;
case CURSOR_USE:
if (_field2A == -1)
SceneHotspot::doAction(action);
else
SceneItem::display(_field26, _field2A, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOUR, 7, LIST_END);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene9350::signal() {
switch (_field30A ++) {
case 0:
@ -116,8 +93,8 @@ void Scene9350::postInit(SceneObjectList *OwnerList) {
setZoomPercents(95, 80, 200, 100);
_globals->_player.postInit();
//TODO: Implement and use SUB_1F1DF in order to reduce code size
// SUB_1F1DF(&_object1, 9350, 1, 3, 139, 97, 0);
//TODO: Fix _object1.quickInit(9350, 1, 3, 139, 97, 0);
_object1.postInit();
_object1.setVisage(9350);
_object1.setStrip(1);
@ -125,36 +102,35 @@ void Scene9350::postInit(SceneObjectList *OwnerList) {
_object1.setPosition(Common::Point(139, 97), 0);
_object1.setPriority2(0);
//TODO: Implement and use SUB_4C09
// SUB_4C09(&_sceneItem1, 42, 0, 97, 60, 9350, 0, -1);
//TODO: check _sceneHotspot1.quickInit(42, 0, 97, 60, 9350, 0, -1);
_sceneHotspot1.setBounds(42, 0, 97, 60);
_sceneHotspot1._field26 = 9350;
_sceneHotspot1._field28 = 0;
_sceneHotspot1._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot1, NULL);
// SUB_4C09(&_sceneItem2, 37, 205, 82, 256, 9350, 0, -1);
//TODO: check _sceneHotspot2.quickInit(37, 205, 82, 256, 9350, 0, -1);
_sceneHotspot2.setBounds(37, 205, 82, 256);
_sceneHotspot2._field26 = 9350;
_sceneHotspot2._field28 = 0;
_sceneHotspot2._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot2, NULL);
// SUB_4C09(&_sceneItem3, 29, 93, 92, 174, 9350, 1, -1);
//TODO: check _sceneHotspot3.quickInit(29, 93, 92, 174, 9350, 1, -1);
_sceneHotspot3.setBounds(29, 93, 92, 174);
_sceneHotspot3._field26 = 9350;
_sceneHotspot3._field28 = 1;
_sceneHotspot3._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot3, NULL);
// SUB_4C09(&_sceneItem4, 0, 308, 109, 320, 9350, 2, -1);
//TODO: check _sceneHotspot4.quickInit(0, 308, 109, 320, 9350, 2, -1);
_sceneHotspot4.setBounds(0, 308, 109, 320);
_sceneHotspot4._field26 = 9350;
_sceneHotspot4._field28 = 2;
_sceneHotspot4._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot4, NULL);
// SUB_4C09(&_sceneItem5, 0, 0, 200, 320, 9350, 3, -1);
//TODO: check _sceneHotspot5.quickInit(0, 0, 200, 320, 9350, 3, -1);
_sceneHotspot5.setBounds(0, 0, 200, 320);
_sceneHotspot5._field26 = 9350;
_sceneHotspot5._field28 = 3;
@ -187,6 +163,113 @@ void Scene9350::postInit(SceneObjectList *OwnerList) {
}
}
/*--------------------------------------------------------------------------
* Scene 9700
*
*--------------------------------------------------------------------------*/
void Scene9700::signal() {
switch (_sceneMode ++) {
case 9703:
_globals->setFlag(88);
// No break on purpose
case 9701:
case 9702:
_gfxButton1.setText(EXIT_MSG);
_gfxButton1._bounds.centre(50, 190);
_gfxButton1.draw();
_gfxButton1._bounds.expandPanes();
_globals->_player.enableControl();
_globals->_player._canWalk = 0;
_globals->_events.setCursor(CURSOR_USE);
break;
case 9704:
_globals->_soundHandler.startSound(323, 0, 127);
_globals->_sceneManager.changeScene(9750);
break;
}
}
void Scene9700::process(Event &event) {
if ((event.eventType == EVENT_BUTTON_DOWN) && (event.kbd.keycode == 0)) {
if (_gfxButton1.process(event)) {
_globals->_sceneManager.changeScene(9200);
} else if (_globals->_events._currentCursor == OBJECT_SCANNER) {
event.handled = true;
if (_globals->_inventory._helmet._sceneNumber == 1) {
_globals->_player.disableControl();
_sceneMode = 9704;
setAction(&_sequenceManager, this, 9704, &_globals->_player, &_object1, 0);
} else {
_globals->_player.disableControl();
_sceneMode = 9703;
setAction(&_sequenceManager, this, 9703, &_globals->_player, &_object1, 0);
}
}
}
}
void Scene9700::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
//TODO: check _sceneHotspot1.quickInit(84, 218, 151, 278, 9700, 14, -1);
_sceneHotspot1.setBounds(84, 218, 151, 278);
_sceneHotspot1._field26 = 9700;
_sceneHotspot1._field28 = 14;
_sceneHotspot1._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot1, NULL);
//TODO: check _sceneHotspot2.quickInit(89, 11, 151, 121, 9700, 14, -1);
_sceneHotspot2.setBounds(89, 11, 151, 121);
_sceneHotspot2._field26 = 9700;
_sceneHotspot2._field28 = 14;
_sceneHotspot2._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot2, NULL);
//TODO: check _sceneHotspot3.quickInit(69, 119, 138, 218, 9700, 15, 16);
_sceneHotspot3.setBounds(69, 119, 138, 218);
_sceneHotspot3._field26 = 9700;
_sceneHotspot3._field28 = 15;
_sceneHotspot3._field2A = 16;
_globals->_sceneItems.addItems(&_sceneHotspot3, NULL);
//TODO: check _sceneHotspot4.quickInit(34, 13, 88, 116, 9700, 17, -1);
_sceneHotspot4.setBounds(34, 13, 88, 116);
_sceneHotspot4._field26 = 9700;
_sceneHotspot4._field28 = 17;
_sceneHotspot4._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot4, NULL);
//TODO: check _sceneHotspot5.quickInit(52, 119, 68, 204, 9700, 17, -1);
_sceneHotspot5.setBounds(52, 119, 68, 204);
_sceneHotspot5._field26 = 9700;
_sceneHotspot5._field28 = 17;
_sceneHotspot5._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot5, NULL);
//TODO: check _sceneHotspot6.quickInit(0, 22, 56, 275, 9700, 18, -1);
_sceneHotspot6.setBounds(0, 22, 56, 275);
_sceneHotspot6._field26 = 9700;
_sceneHotspot6._field28 = 18;
_sceneHotspot6._field2A = -1;
_globals->_sceneItems.addItems(&_sceneHotspot6, NULL);
_object1.postInit();
_object1.flag100();
_globals->_player.postInit();
if (_globals->getFlag(97)) {
_globals->_player.disableControl();
_sceneMode = 9701;
setAction(&_sequenceManager, this, 9701, &_globals->_player, &_object1, 0);
_globals->setFlag(97);
} else {
_globals->_player.disableControl();
_sceneMode = 9702;
setAction(&_sequenceManager, this, 9702, &_globals->_player, &_object1, 0);
}
}
/*--------------------------------------------------------------------------
* Scene 9750
*

View File

@ -43,27 +43,39 @@ class Scene9350: public Scene {
virtual void draw();
};
/* Items */
class SceneHotspot1: public SceneHotspot_3 {
public:
virtual void doAction(int action);
};
public:
int _field30A;
SequenceManager _sequenceManager;
Object1 _object1;
SceneObject _object2;
SceneHotspot1 _sceneHotspot1;
SceneHotspot1 _sceneHotspot2;
SceneHotspot1 _sceneHotspot3;
SceneHotspot1 _sceneHotspot4;
SceneHotspot1 _sceneHotspot5;
SceneHotspot_3 _sceneHotspot1;
SceneHotspot_3 _sceneHotspot2;
SceneHotspot_3 _sceneHotspot3;
SceneHotspot_3 _sceneHotspot4;
SceneHotspot_3 _sceneHotspot5;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
virtual void dispatch();
};
class Scene9700: public Scene {
int _field30A;
SequenceManager _sequenceManager;
SceneObject _object1;
SceneHotspot_3 _sceneHotspot1;
SceneHotspot_3 _sceneHotspot2;
SceneHotspot_3 _sceneHotspot3;
SceneHotspot_3 _sceneHotspot4;
SceneHotspot_3 _sceneHotspot5;
SceneHotspot_3 _sceneHotspot6;
GfxButton _gfxButton1;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
virtual void process(Event &event);
};
class Scene9750: public Scene {
public:
SequenceManager _sequenceManager;