diff options
| -rw-r--r-- | engines/prince/prince.cpp | 4 | ||||
| -rw-r--r-- | engines/prince/script.cpp | 230 | ||||
| -rw-r--r-- | engines/prince/script.h | 2 | 
3 files changed, 196 insertions, 40 deletions
| diff --git a/engines/prince/prince.cpp b/engines/prince/prince.cpp index a6bf076c63..aec84684a7 100644 --- a/engines/prince/prince.cpp +++ b/engines/prince/prince.cpp @@ -120,7 +120,7 @@ Common::Error PrinceEngine::run() {          _graph->update();
          _system->delayMillis(700);
      }
 -    
 +    delete logoStrema;
      mainLoop();
 @@ -160,8 +160,6 @@ bool PrinceEngine::loadLocation(uint16 locationNr)  bool PrinceEngine::playNextFrame()
  {
 -    if (_flicPlayer.endOfVideo())
 -        _flicPlayer.rewind();
      const Graphics::Surface *s = _flicPlayer.decodeNextFrame();
      if (s)
      {
 diff --git a/engines/prince/script.cpp b/engines/prince/script.cpp index 239b26b355..66e0c598f9 100644 --- a/engines/prince/script.cpp +++ b/engines/prince/script.cpp @@ -10,7 +10,7 @@ namespace Prince {  static const uint16 NUM_OPCODES = 144;  Script::Script(PrinceEngine *vm) :  -	_code(NULL), _stacktop(0), _vm(vm), _random("GroovieScripts"), _opcodeNF(false) { +	_code(NULL), _stacktop(0), _vm(vm), _opcodeNF(false) {  }  Script::~Script() { @@ -422,61 +422,213 @@ void Script::O_STOPSAMPLE() {      debugScript("O_STOPSAMPLE slot %d", slot);  } -void Script::O_BACKANIMRANGE() {} -void Script::O_CLEARPATH() {} -void Script::O_SETPATH() {} -void Script::O_GETHEROX() {} -void Script::O_GETHEROY() {} -void Script::O_GETHEROD() {} -void Script::O_PUSHSTRING() {} -void Script::O_POPSTRING() {} -void Script::O_SETFGCODE() {} -void Script::O_STOPHERO() {} -void Script::O_ANIMUPDATEOFF() {} -void Script::O_ANIMUPDATEON() {} +void Script::O_BACKANIMRANGE() { +    uint16 slotId = readScript16bits(); +    uint16 animId = readScript16bits(); +    uint16 low = readScript16bits(); +    uint16 high = readScript16bits(); + +    debugScript("O_BACKANIMRANGE slotId %d, animId %d, low %d, high %d", slotId, animId, low, high); +} + +void Script::O_CLEARPATH() { +    debugScript("O_CLEARPATH"); +} + +void Script::O_SETPATH() { +    debugScript("O_SETPATH"); +} + +void Script::O_GETHEROX() { +    uint16 heroId = readScript16bits(); +    uint16 flagId = readScript16bits(); + +    debugScript("O_GETHEROX heroId %d, flagId %d", heroId, flagId); +} + +void Script::O_GETHEROY() { +    uint16 heroId = readScript16bits(); +    uint16 flagId = readScript16bits(); + +    debugScript("O_GETHEROY heroId %d, flagId %d", heroId, flagId); +} + +void Script::O_GETHEROD() { +    uint16 heroId = readScript16bits(); +    uint16 flagId = readScript16bits(); + +    debugScript("O_GETHEROD heroId %d, flagId %d", heroId, flagId); +} + +void Script::O_PUSHSTRING() { +    debugScript("O_PUSHSTRING"); +} + +void Script::O_POPSTRING() { +    debugScript("O_POPSTRING"); +} + +void Script::O_SETFGCODE() { +    int32 offset = readScript32bits(); + +    debugScript("O_SETFGCODE offset %04X", offset); +} + +void Script::O_STOPHERO() { +    uint16 heroId = readScript16bits(); + +    debugScript("O_STOPHERO heroId %d", heroId); +} + +void Script::O_ANIMUPDATEOFF() { +    uint16 slotId = readScript16bits(); +    debugScript("O_ANIMUPDATEOFF slotId %d", slotId); +} + +void Script::O_ANIMUPDATEON() { +    uint16 slotId = readScript16bits(); +    debugScript("O_ANIMUPDATEON slotId %d", slotId); +}  void Script::O_FREECURSOR() {      debugScript("O_FREECURSOR");  } -void Script::O_ADDINVQUIET() {} -void Script::O_RUNHERO() {} -void Script::O_SETBACKANIMDATA() {} +void Script::O_ADDINVQUIET() { +    uint16 heroId = readScript16bits(); +    uint16 itemId = readScript16bits(); + +    debugScript("O_ADDINVQUIET heorId %d, itemId %d", heroId, itemId); +} + +void Script::O_RUNHERO() { +    uint16 heroId = readScript16bits(); +    uint16 x = readScript16bits(); +    uint16 y = readScript16bits(); +    uint16 dir = readScript16bits(); + +    debugScript("O_RUNHERO heroId %d, x %d, y %d, dir %d", heroId, x, y, dir); +} + +void Script::O_SETBACKANIMDATA() { +    uint16 animId = readScript16bits(); +    uint16 animOffset = readScript16bits(); +    uint16 wart = readScript16bits(); + +    debugScript("O_SETBACKANIMDATA animId %d, animOffset %d, wart %d", animId, animOffset, wart); +}  void Script::O_VIEWFLC() {      uint16 animNr = readScript16bits();      debugScript("O_VIEWFLC animNr %d", animNr);  } -void Script::O_CHECKFLCFRAME() {} +void Script::O_CHECKFLCFRAME() { +    uint16 frameNr = readScript16bits(); + +    debugScript("O_CHECKFLCFRAME frame number %d", frameNr); + +    const Video::FlicDecoder &flicPlayer = _vm->_flicPlayer; + +    if (flicPlayer.getCurFrame() != frameNr) +    { +        // Move instruction pointer before current instruciton +        // must do this check once again till it's false  +        _currentInstruction -= 2; +    } +} + +void Script::O_CHECKFLCEND() { + +    debugScript("O_CHECKFLCEND"); + +    const Video::FlicDecoder &flicPlayer = _vm->_flicPlayer; + +    if (flicPlayer.getFrameCount() - flicPlayer.getCurFrame() <= 1) +    { +        // Move instruction pointer before current instruciton +        // must do this check once again till it's false  +        _currentInstruction -= 2; +    } +} + +void Script::O_FREEFLC() { +    debugScript("O_FREEFLC"); +} -void Script::O_CHECKFLCEND() {} +void Script::O_TALKHEROSTOP() { +    uint16 heroId = readScript16bits(); +    debugScript("O_TALKHEROSTOP %d", heroId); +} -void Script::O_FREEFLC() {} -void Script::O_TALKHEROSTOP() {} -void Script::O_HEROCOLOR() {} -void Script::O_GRABMAPA() {} -void Script::O_ENABLENAK() {} -void Script::O_DISABLENAK() {} -void Script::O_GETMOBNAME() {} -void Script::O_SWAPINVENTORY() {} -void Script::O_CLEARINVENTORY() {} +void Script::O_HEROCOLOR() { +    uint16 heroId = readScript16bits(); +    uint16 kolorr = readScript16bits(); +    debugScript("O_HEROCOLOR heroId %d, kolorr %d", heroId, kolorr); +} + +void Script::O_GRABMAPA() { +    debugScript("O_GRABMAPA"); +} + +void Script::O_ENABLENAK() { +    uint16 nakId = readScript16bits(); +    debugScript("O_ENABLENAK nakId %d", nakId); +} + +void Script::O_DISABLENAK() { +    uint16 nakId = readScript16bits(); +    debugScript("O_DISABLENAK nakId %d", nakId); +} + +void Script::O_GETMOBNAME() { +    uint16 war = readScript16bits(); +    debugScript("O_GETMOBNAME war %d", war); +} + +void Script::O_SWAPINVENTORY() { +    uint16 heroId = readScript16bits(); +    debugScript("O_SWAPINVENTORY heroId %d", heroId); +} + +void Script::O_CLEARINVENTORY() { +    uint16 heroId = readScript16bits(); +    debugScript("O_CLEARINVENTORY heroId %d", heroId); +}  void Script::O_SKIPTEXT() {      debugScript("O_SKIPTEXT");  } -void Script::O_SETVOICEH() {} +void Script::O_SETVOICEH() { +    uint16 txn = readScript16bits(); +    debugScript("O_SETVOICEH txn %d", txn); +} -void Script::O_SETVOICEA() {} +void Script::O_SETVOICEA() { +    uint16 txn = readScript16bits(); +    debugScript("O_SETVOICEA txn %d", txn); +} -void Script::O_SETVOICEB() {} +void Script::O_SETVOICEB() { +    uint16 txn = readScript16bits(); +    debugScript("O_SETVOICEB txn %d", txn); +} -void Script::O_SETVOICEC() {} +void Script::O_SETVOICEC() { +    uint16 txn = readScript16bits(); +    debugScript("O_SETVOICEC txn %d", txn); +} -void Script::O_VIEWFLCLOOP() {} +void Script::O_VIEWFLCLOOP() { +    uint16 animId = readScript16bits(); +    debugScript("O_VIEWFLCLOOP animId %d", animId); +} -void Script::O_FLCSPEED() {} +void Script::O_FLCSPEED() { +    uint16 speed = readScript16bits(); +    debugScript("O_FLCSPEED speed %d", speed); +}  void Script::O_OPENINVENTORY() {      debugScript("O_OPENINVENTORY"); @@ -490,13 +642,21 @@ void Script::O_GETKRZYWA() {      debugScript("O_GETKRZYWA");  } -void Script::O_GETMOB() {} +void Script::O_GETMOB() { +    uint16 flagId = readScript16bits(); +    uint16 mx = readScript16bits(); +    uint16 my = readScript16bits(); +    debugScript("O_GETMOB flagId %d, mx %d, my %d", flagId, mx, my); +}  void Script::O_INPUTLINE() {      debugScript("O_INPUTLINE");  } -void Script::O_SETVOICED() {} +void Script::O_SETVOICED() { +    uint16 txn = readScript16bits(); +    debugScript("O_SETVOICED txn %d", txn); +}  void Script::O_BREAK_POINT() {      debugScript("O_BREAK_POINT"); diff --git a/engines/prince/script.h b/engines/prince/script.h index a68e834c68..982e7aae61 100644 --- a/engines/prince/script.h +++ b/engines/prince/script.h @@ -46,8 +46,6 @@ public:  private:      PrinceEngine *_vm; -    Common::RandomSource _random; -      byte *_code;      uint32 _codeSize;      uint32 _currentInstruction; | 
