MADS: Dragon: Implement scene 103

This commit is contained in:
Strangerke 2015-10-23 10:50:55 +02:00
parent 796b04d3cd
commit d26bc1937d
3 changed files with 411 additions and 4 deletions

View File

@ -47,7 +47,7 @@ SceneLogic *SceneFactory::createScene(MADSEngine *vm) {
case 102: // queen's bedroom case 102: // queen's bedroom
return new Scene102(vm); return new Scene102(vm);
case 103: // outside king's bedroom case 103: // outside king's bedroom
return new DummyScene(vm); // TODO return new Scene103(vm);
case 104: // fireplace / bookshelf case 104: // fireplace / bookshelf
return new DummyScene(vm); // TODO return new DummyScene(vm); // TODO
case 105: // dining room case 105: // dining room

View File

@ -272,9 +272,9 @@ void Scene102::enter() {
_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*KGRD_6", false); _globals._spriteIndexes[7] = _scene->_sprites.addSprites("*KGRD_6", false);
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('y', 2), false); _globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('y', 2), false);
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 0, 0, 0); _globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 0);
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 7, 0, 0, 0); _globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 7, 0);
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 7, 0, 0, 0); _globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 7, 0);
_globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -1); _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 12); _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 12);
@ -663,5 +663,400 @@ void Scene102::preActions() {
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
Scene103::Scene103(MADSEngine *vm) : Scene1xx(vm) {
}
void Scene103::synchronize(Common::Serializer &s) {
Scene1xx::synchronize(s);
}
void Scene103::setup() {
setPlayerSpritesPrefix();
setAAName();
}
void Scene103::enter() {
_vm->_disableFastwalk = true;
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('y', 1), false);
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('y', 2), false);
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('y', 7), false);
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('y', 0), false);
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('y', 3), false);
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('y', 4), false);
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('y', 5), false);
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('y', 6), false);
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('x', 0), false);
_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('x', 1), false);
_globals._spriteIndexes[11] = _scene->_sprites.addSprites("*KGRD_9", false);
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 0, 0);
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 0, 4);
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 7, 0, 0);
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 7, 0, 0);
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 7, 0, 3);
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 7, 0, 2);
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 0, 0);
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 7, 0, 5);
if ((_scene->_priorSceneId == 104) || (_scene->_priorSceneId == 105)) {
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 8);
}
if (_scene->_priorSceneId == 102) {
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 6);
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
_scene->setCamera(Common::Point(320, 0));
_game._player.walk(Common::Point(482, 128), FACING_SOUTH);
_game._player.firstWalk(Common::Point(471, 108), FACING_SOUTH, Common::Point(482, 128), FACING_SOUTH, false);
_game._player.setWalkTrigger(72);
} else if (_scene->_priorSceneId == 104) {
_game._player._playerPos = Common::Point(130, 152);
_game._player._facing = FACING_NORTHEAST;
} else if (_scene->_priorSceneId == 105) {
_game._player._playerPos = Common::Point(517, 152);
_game._player._facing = FACING_NORTHWEST;
_scene->setCamera(Common::Point(320, 0));
} else if ((_scene->_priorSceneId == 101) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) {
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 6);
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
_game._player.firstWalk(Common::Point(173, 108), FACING_SOUTH, Common::Point(162, 127), FACING_SOUTH, false);
_game._player.setWalkTrigger(70);
} else {
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 6);
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 6);
}
sceneEntrySound();
}
void Scene103::step() {
switch (_game._trigger) {
case 70:
_scene->deleteSequence(_globals._sequenceIndexes[9]);
_vm->_sound->command(25);
_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 6, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 6);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 1, 3);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[9], 0, 0, 71);
break;
case 71: {
int tmpIdx = _globals._sequenceIndexes[9];
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 6);
_game.syncTimers(1, _globals._sequenceIndexes[9], 1, tmpIdx);
_game._player._stepEnabled = true;
}
break;
case 72:
_scene->deleteSequence(_globals._sequenceIndexes[10]);
_vm->_sound->command(25);
_globals._sequenceIndexes[10] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[10], false, 6, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 6);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], 1, 3);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[10], 0, 0, 73);
break;
case 73: {
int tmpIdx = _globals._sequenceIndexes[10];
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 6);
_game.syncTimers(1, _globals._sequenceIndexes[10], 1, tmpIdx);
_game._player._stepEnabled = true;
}
break;
default:
break;
}
}
void Scene103::actions() {
if (_action._lookFlag) {
_vm->_dialogs->show(10301);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR_TO_KINGS_ROOM) || _action.isAction(VERB_OPEN, NOUN_DOOR_TO_KINGS_ROOM) || _action.isAction(VERB_PULL, NOUN_DOOR_TO_KINGS_ROOM)) {
switch (_game._trigger) {
case 0:
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], false, 7, 2);
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[11],true);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[11], 2, 2, 1);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[11], 0, 0, 3);
break;
case 1:
_scene->deleteSequence(_globals._sequenceIndexes[9]);
_vm->_sound->command(24);
_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 7, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[9], 0, 0, 2);
break;
case 2: {
int tmpIdx = _globals._sequenceIndexes[9];
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
_game.syncTimers(1, _globals._sequenceIndexes[9], 1, tmpIdx);
}
break;
case 3:
_game._player._visible = true;
_game.syncTimers(2, 0, 1, _globals._sequenceIndexes[11]);
_scene->_sequences.setTimingTrigger(1,4);
break;
case 4:
_game._player.walk(Common::Point(173, 108), FACING_NORTH);
_game._player.setWalkTrigger(5);
break;
case 5:
_scene->deleteSequence(_globals._sequenceIndexes[9]);
_vm->_sound->command(25);
_globals._sequenceIndexes[9] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[9], false, 7, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[9], 0, 0, 6);
break;
case 6: {
int tmpIdx = _globals._sequenceIndexes[9];
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 1);
_game.syncTimers(1, _globals._sequenceIndexes[9], 1, tmpIdx);
_scene->_sequences.setTimingTrigger(6, 7);
}
break;
case 7:
_scene->_nextSceneId = 101;
break;
default:
break;
}
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR_TO_QUEENS_ROOM) || _action.isAction(VERB_OPEN, NOUN_DOOR_TO_QUEENS_ROOM) || _action.isAction(VERB_PULL, NOUN_DOOR_TO_QUEENS_ROOM)) {
switch (_game._trigger) {
case 0:
_game._player._stepEnabled = false;
_game._player._visible = false;
_globals._sequenceIndexes[11] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[11], true, 7, 2);
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[11],true);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[11], 2, 2, 1);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[11], 0, 0, 3);
break;
case 1:
_scene->deleteSequence(_globals._sequenceIndexes[10]);
_vm->_sound->command(24);
_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 7, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 8);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[10], 0, 0, 2);
break;
case 2: {
int tmpIdx = _globals._sequenceIndexes[10];
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -2);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
_game.syncTimers(1, _globals._sequenceIndexes[10], 1, tmpIdx);
}
break;
case 3:
_game._player._visible = true;
_game.syncTimers(2, 0, 1, _globals._sequenceIndexes[11]);
_scene->_sequences.setTimingTrigger(1,4);
break;
case 4:
_game._player.walk(Common::Point(471, 108), FACING_NORTH);
_game._player.setWalkTrigger(5);
break;
case 5:
_scene->deleteSequence(_globals._sequenceIndexes[10]);
_vm->_sound->command(25);
_globals._sequenceIndexes[10] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[10], false, 7, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
_scene->_sequences.setTrigger(_globals._sequenceIndexes[10], 0, 0, 6);
break;
case 6: {
int tmpIdx = _globals._sequenceIndexes[10];
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 1);
_game.syncTimers(1, _globals._sequenceIndexes[10], 1, tmpIdx);
_scene->_sequences.setTimingTrigger(6, 7);
}
break;
case 7:
_scene->_nextSceneId = 102;
break;
default:
break;
}
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR_TO_MEETING_ROOM) || _action.isAction(VERB_OPEN, NOUN_DOOR_TO_MEETING_ROOM) || _action.isAction(VERB_PULL, NOUN_DOOR_TO_MEETING_ROOM)) {
_scene->_nextSceneId = 104;
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR_TO_BALLROOM) || _action.isAction(VERB_OPEN, NOUN_DOOR_TO_BALLROOM) || _action.isAction(VERB_PULL, NOUN_DOOR_TO_BALLROOM)) {
_scene->_nextSceneId = 105;
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
if (_action.isObject(NOUN_TAPESTRY)) {
if ((_scene->_customDest.x <= 75) && (_scene->_customDest.y <= 130))
_vm->_dialogs->show(10302);
else
_vm->_dialogs->show(10303);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_COAT_OF_ARMS)) {
_vm->_dialogs->show(10305);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_DOOR_TO_QUEENS_ROOM)) {
_vm->_dialogs->show(10307);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_DOOR_TO_KINGS_ROOM)) {
_vm->_dialogs->show(10308);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_CEDAR_CHEST)) {
_vm->_dialogs->show(10309);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_TABLE)) {
_vm->_dialogs->show(10311);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_SMALL_WINDOW)) {
_vm->_dialogs->show(10312);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_LARGE_WINDOW)) {
_vm->_dialogs->show(10314);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_BATTLE_AXES)) {
_vm->_dialogs->show(10315);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_BUST_ON_WALL)) {
_vm->_dialogs->show(10317);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_DECORATION)) {
_vm->_dialogs->show(10320);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_WALL_PLAQUE)) {
_vm->_dialogs->show(10322);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_DOOR_TO_BALLROOM)) {
_vm->_dialogs->show(10323);
_action._inProgress = false;
return;
}
if (_action.isObject(NOUN_DOOR_TO_MEETING_ROOM)) {
_vm->_dialogs->show(10324);
_action._inProgress = false;
return;
}
}
if ((_action.isAction(VERB_TAKE) || _action.isAction(VERB_PULL)) && _action.isObject(NOUN_BATTLE_AXES)) {
_vm->_dialogs->show(10316);
_action._inProgress = false;
return;
}
if ((_action.isAction(VERB_PUSH) || _action.isAction(VERB_PULL)) && _action.isObject(NOUN_TAPESTRY)) {
_vm->_dialogs->show(10304);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_PULL, NOUN_COAT_OF_ARMS)) {
_vm->_dialogs->show(10306);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_OPEN, NOUN_CEDAR_CHEST)) {
_vm->_dialogs->show(10310);
_action._inProgress = false;
return;
}
if (_action.isAction(VERB_OPEN, NOUN_SMALL_WINDOW) || _action.isAction(VERB_OPEN, NOUN_LARGE_WINDOW)) {
_vm->_dialogs->show(10313);
_action._inProgress = false;
return;
}
}
void Scene103::preActions() {
}
/*------------------------------------------------------------------------*/
} // End of namespace Dragonsphere } // End of namespace Dragonsphere
} // End of namespace MADS } // End of namespace MADS

View File

@ -82,6 +82,18 @@ public:
virtual void preActions(); virtual void preActions();
virtual void actions(); virtual void actions();
}; };
class Scene103 : public Scene1xx {
public:
Scene103(MADSEngine *vm);
virtual void synchronize(Common::Serializer &s);
virtual void setup();
virtual void enter();
virtual void step();
virtual void preActions();
virtual void actions();
};
} // End of namespace Dragonsphere } // End of namespace Dragonsphere
} // End of namespace MADS } // End of namespace MADS