MADS: Implement scene 308

This commit is contained in:
Strangerke 2014-04-18 07:53:25 +02:00
parent 8c9b65c34a
commit 15c64dd972
3 changed files with 139 additions and 0 deletions

View File

@ -113,6 +113,8 @@ SceneLogic *SceneFactory::createScene(MADSEngine *vm) {
return new Scene304(vm);
case 307:
return new Scene307(vm);
case 308:
return new Scene308(vm);
// Scene group #8
case 804:

View File

@ -1122,6 +1122,128 @@ void Scene307::actions() {
_action._inProgress = false;
}
/*------------------------------------------------------------------------*/
void Scene308::setup() {
setPlayerSpritesPrefix();
setAAName();
}
void Scene308::enter() {
_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*SC003x0");
_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*SC003x1");
_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*SC003x2");
initForceField(&_forceField, true);
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('b', 0));
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(Resources::formatName(307, 'X', 0, EXT_SS, ""));
_vm->_palette->setEntry(252, 63, 30, 20);
_vm->_palette->setEntry(253, 45, 15, 12);
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, 1);
_scene->_sequences.setMsgPosition(_globals._sequenceIndexes[4], Common::Point(127, 78));
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 15);
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_sequences.addTimer(48, 70);
_game._player._visible = false;
_game._player._stepEnabled = false;
_scene->loadAnimation(formAnimName('a', -1), 60);
sceneEntrySound();
_game.loadQuoteSet(0xF4, 0xF5, 0xF6, 0);
}
void Scene308::step() {
handleForceField(&_forceField, &_globals._spriteIndexes[0]);
if (_game._trigger == 60)
_scene->_nextSceneId = 307;
if (_game._trigger < 70)
return;
switch (_game._trigger) {
case 70: {
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 18, 9, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_kernelMessages.reset();
int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, _game.getQuote(244));
_scene->_kernelMessages.setQuoted(idx, 2, true);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71);
}
break;
case 71: {
int seqIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 4);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
_scene->_sequences.addTimer(48, 72);
}
break;
case 72:
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 20, 5, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 3, 4);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_kernelMessages.reset();
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
break;
case 73: {
int seqIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 5);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
_scene->_sequences.addTimer(48, 74);
}
break;
case 74: {
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 20, 8, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 6, 7);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_kernelMessages.reset();
int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, _game.getQuote(245));
_scene->_kernelMessages.setQuoted(idx, 2, true);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 75);
}
break;
case 75: {
int seqIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 23, 5, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 8, 10);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 76);
}
break;
case 76: {
int seqIdx = _globals._sequenceIndexes[3];
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 26, 0, 0, 0);
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 2, 3);
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 9);
_scene->_kernelMessages.reset();
int idx = _scene->_kernelMessages.add(Common::Point(171, 21), 0xFDFC, 0, 0, 120, _game.getQuote(246));
_scene->_kernelMessages.setQuoted(idx, 2, true);
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], seqIdx);
}
break;
default:
break;
}
}
/*------------------------------------------------------------------------*/

View File

@ -155,6 +155,21 @@ public:
virtual void postActions() {};
};
class Scene308: public Scene3xx {
private:
ForceField _forceField;
public:
Scene308(MADSEngine *vm) : Scene3xx(vm) {}
virtual void setup();
virtual void enter();
virtual void step();
virtual void preActions() {};
virtual void actions() {};
virtual void postActions() {};
};
} // End of namespace Nebular
} // End of namespace MADS