diff options
author | uruk | 2014-05-13 09:51:22 +0200 |
---|---|---|
committer | uruk | 2014-05-13 09:51:22 +0200 |
commit | 2f404690e79377eb960d0acba36f09441c4693fd (patch) | |
tree | 617aea25bafac873598cdd5143599a8c09d6cf09 | |
parent | 86c4e8336d1e84f53c6a4ec4dcbb57274ae662ec (diff) | |
download | scummvm-rg350-2f404690e79377eb960d0acba36f09441c4693fd.tar.gz scummvm-rg350-2f404690e79377eb960d0acba36f09441c4693fd.tar.bz2 scummvm-rg350-2f404690e79377eb960d0acba36f09441c4693fd.zip |
CGE2: Rename Snail to CommandHandler, expand it.
-rw-r--r-- | engines/cge2/cge2.h | 4 | ||||
-rw-r--r-- | engines/cge2/cge2_main.cpp | 2 | ||||
-rw-r--r-- | engines/cge2/snail.cpp | 33 | ||||
-rw-r--r-- | engines/cge2/snail.h | 172 |
4 files changed, 133 insertions, 78 deletions
diff --git a/engines/cge2/cge2.h b/engines/cge2/cge2.h index 82f0faff04..cfa783ef44 100644 --- a/engines/cge2/cge2.h +++ b/engines/cge2/cge2.h @@ -58,6 +58,10 @@ class Spare; #define kPocketMax 4 #define kCaveMax 100 +enum CallbackType { + kNullCB = 0, kQGame, kMiniStep, kXScene, kSoundSetVolume +}; + class CGE2Engine : public Engine { public: CGE2Engine(OSystem *syst, const ADGameDescription *gameDescription); diff --git a/engines/cge2/cge2_main.cpp b/engines/cge2/cge2_main.cpp index dbf9afef99..be503275d1 100644 --- a/engines/cge2/cge2_main.cpp +++ b/engines/cge2/cge2_main.cpp @@ -131,7 +131,7 @@ void CGE2Engine::loadSprite(const char *fname, int ref, int scene, V3D &pos) { case kIdNear: case kIdMTake: case kIdFTake: - if (Snail::com(p) >= 0) + if (CommandHandler::com(p) >= 0) ++cnt[section]; else error("Bad line %d [%s]", sprf.getLineCount(), tmpStr); diff --git a/engines/cge2/snail.cpp b/engines/cge2/snail.cpp index 245da9972a..68cccea5dc 100644 --- a/engines/cge2/snail.cpp +++ b/engines/cge2/snail.cpp @@ -30,7 +30,7 @@ namespace CGE2 { -const char *Snail::comTxt[] = { +const char *CommandHandler::_commandText[] = { "NOP", "USE", "PAUSE", "INF", "CAVE", "SLAVE", "FOCUS", "SETX", "SETY", "SETZ", "ADD", "SUB", "MUL", "DIV", "IF", "FLAG", @@ -52,9 +52,34 @@ const char *Snail::comTxt[] = { "WALKTO", "REACH", "COVER", "UNCOVER", NULL }; -int Snail::com(const char *com) { - int i = EncryptedStream::takeEnum(comTxt, com); - return (i < 0) ? i : i + kSNCom0 + 1; +void CommandHandler::runCommand() { + warning("STUB: CommandHandler::runCommand()"); +} + +void CommandHandler::addCommand(CommandType com, int ref, int val, void *ptr) { + warning("STUB: CommandHandler::addCommand()"); +} + +void CommandHandler::addCallback(CommandType com, int ref, int val, CallbackType cbType) { + warning("STUB: CommandHandler::addCallback()"); +} + +void CommandHandler::insertCommand(CommandType com, int ref, int val, void *ptr) { + warning("STUB: CommandHandler::insertCommand()"); +} + +bool CommandHandler::idle() { + warning("STUB: CommandHandler::idle()"); + return false; +} + +void CommandHandler::reset() { + warning("STUB: CommandHandler::reset()"); +} + +int CommandHandler::com(const char *com) { + int i = EncryptedStream::takeEnum(_commandText, com); + return (i < 0) ? i : i + kCmdCom0 + 1; } } // End of namespace CGE2. diff --git a/engines/cge2/snail.h b/engines/cge2/snail.h index 80aa33f5d5..c8dea19b02 100644 --- a/engines/cge2/snail.h +++ b/engines/cge2/snail.h @@ -28,93 +28,119 @@ #ifndef CGE2_SNAIL_H #define CGE2_SNAIL_H +#include "cge2/cge2.h" #include "cge2/cge2_main.h" namespace CGE2 { enum Action { kNear, kMTake, kFTake, kActions }; -enum SNCom { - kSNCom0 = 128, - kSNNop, // NOP :: do nothing - kSNUse, // USE <spr> <cav>|<lab> :: hint for using - kSNPause, // PAUSE -1 <dly> :: delay <dly>/72 seconds - kSNInf, // INF -1 <ref> :: show text referrenced by <ref> - kSNCave, // CAVE -1 <cav> :: go to board <cav> - kSNSlave, // SLAVE - kSNFocus, // FOCUS :: change active hero - kSNSetX, // SETX <x> <idx> :: set sprite shift in x axis - kSNSetY, // SETX <y> <idx> :: set sprite shift in y axis - kSNSetZ, // SETX <z> <idx> :: set sprite shift in z axis - kSNAdd, // ADD <idx1> <idx2> :: sum vectors - kSNSub, // SUB <idx1> <idx2> :: subtract vectors - kSNMul, // MUL <idx> <nr> :: multiply vector by number - kSNDiv, // DIV <idx> <nr> :: divide vector by number - kSNIf, // IF - kSNFlag, // FLAG <nr> <val> :: set flag <nr> to <val> - kSNFlash, // FLASH -1 0|1 :: lighten whole image (on/off) - kSNLight, // LIGHT - kSNCycle, // CYCLE <cnt> :: rotate <cnt> colors from 1 - kSNClear, // CLEAR -1 0 :: clear kSNAIL queue - kSNTalk, // TALK -1 0|1 :: enable speach (on/off) - kSNMouse, // MOUSE -1 0|1 :: enable mouse (on/off) - kSNMap, // MAP 0|1 0 :: temporarily turn off map for hero - kSNCount, // COUNT - kSNMidi, // MIDI -1 <midi> :: play MIDI referenced by <midi> (-1 = off) - kSNSetDlg, // SETDLG 0..3 0..3 :: switch of speach mode - kSNMskDlg, // MSKDLG 0..3 0..3 :: switch of speach mode mask +enum CommandType { + kCmdCom0 = 128, + kCmdNop, // NOP :: do nothing + kCmdUse, // USE <spr> <cav>|<lab> :: hint for using + kCmdPause, // PAUSE -1 <dly> :: delay <dly>/72 seconds + kCmdInf, // INF -1 <ref> :: show text referrenced by <ref> + kCmdCave, // CAVE -1 <cav> :: go to board <cav> + kCmdSlave, // SLAVE + kCmdFocus, // FOCUS :: change active hero + kCmdSetX, // SETX <x> <idx> :: set sprite shift in x axis + kCmdSetY, // SETX <y> <idx> :: set sprite shift in y axis + kCmdSetZ, // SETX <z> <idx> :: set sprite shift in z axis + kCmdAdd, // ADD <idx1> <idx2> :: sum vectors + kCmdSub, // SUB <idx1> <idx2> :: subtract vectors + kCmdMul, // MUL <idx> <nr> :: multiply vector by number + kCmdDiv, // DIV <idx> <nr> :: divide vector by number + kCmdIf, // IF + kCmdFlag, // FLAG <nr> <val> :: set flag <nr> to <val> + kCmdFlash, // FLASH -1 0|1 :: lighten whole image (on/off) + kCmdLight, // LIGHT + kCmdCycle, // CYCLE <cnt> :: rotate <cnt> colors from 1 + kCmdClear, // CLEAR -1 0 :: clear kCmdAIL queue + kCmdTalk, // TALK -1 0|1 :: enable speach (on/off) + kCmdMouse, // MOUSE -1 0|1 :: enable mouse (on/off) + kCmdMap, // MAP 0|1 0 :: temporarily turn off map for hero + kCmdCount, // COUNT + kCmdMidi, // MIDI -1 <midi> :: play MIDI referenced by <midi> (-1 = off) + kCmdSetDlg, // SETDLG 0..3 0..3 :: switch of speach mode + kCmdMskDlg, // MSKDLG 0..3 0..3 :: switch of speach mode mask - kSNSpr, + kCmdSpr, - kSNWait, // WAIT <spr> <seq>|-1 :: wait for SEQ <seq> (-1 = freeze) - kSNHide, // HIDE <spr> 0|1 :: visibility of sprite - kSNRoom, // ROOM <hero> 0|1 :: additional room in pocket (no/yes) - kSNSay, // SAY <spr> <ref> :: say text referenced by <ref> - kSNSound, // SOUND <spr> <ref> :: play sound effect referenced by <ref> - kSNTime, // TIME <spr> 0 :: say current time - kSNKill, // KILL <spr> 0 :: remove sprite - kSNRSeq, // RSEQ <spr> <nr> :: relative jump SEQ <nr> lines - kSNSeq, // SEQ <spr> <seq> :: jump to certain SEQ - kSNSend, // SEND <spr> <cav> :: move sprite to board <cav> - kSNSwap, // SWAP <spr1> spr2> :: sprite exchange - kSNKeep, // KEEP <spr> <seq> :: take sprite into pocket and jump to <seq> - kSNGive, // GIVE <spr> <seq> :: remove sprite from pocket and jump to <seq> - kSNGetPos, // GETPOS <spr> <idx> :: take sprite's position - kSNGoto, // GOTO <spr> <idx> :: move sprite to position - kSNMoveX, // MOVEX <spr> <dx> :: relative move along X axis - kSNMoveY, // MOVEY <spr> <dy> :: relative move along Y axis - kSNMoveZ, // MOVEZ <spr> <dz> :: relative move along Z axis - kSNTrans, // TRANS <spr> 0|1 :: clear/set logical transparency - kSNPort, // PORT <spr> 0|1 :: clear/set "takeability" of sprite - kSNNext, // NEXT <spr> <nr> :: jump to <nr> - NEAR or TAKE - kSNNNext, // NNEXT <spr> <nr> :: jump to <nr> - NEAR - kSNMTNext, // MTNEXT <spr> <nr> :: jump to <nr> - TAKE - kSNFTNext, // FTNEXT <spr> <nr> :: jump to <nr> - TAKE - kSNRNNext, // RNNEXT <spr> <nr> :: relative jump to <nr> - NEAR - kSNRMTNext, // RMTNEXT <spr> <nr> :: relative jump to <nr> - TAKE - kSNRFTNext, // RFTNEXT <spr> <nr> :: relative jump to <nr> - TAKE - kSNRMNear, // RMNEAR <spr> 0 :: remove NEAR list - kSNRMMTake, // RMMTAKE <spr> 0 :: remove TAKE list - kSNRMFTake, // RMFTAKE <spr> 0 :: remove TAKE list - kSNSetRef, // RETREF <spr> <ref> :: change reference of sprite <spr> to <ref> - kSNBackPt, // BACKPT <spr> 0 :: paint sprite onto the background - kSNWalk, // WALK <hero> <ref>|<point> :: go close to the sprite or point - kSNReach, // REACH <hero> <ref>|<m> :: reach the sprite or point with <m> method - kSNCover, // COVER <sp1> <sp2> :: cover sprite <sp1> with sprite <sp2> - kSNUncover, // UNCOVER <sp1> <sp2> :: restore the state before COVER + kCmdWait, // WAIT <spr> <seq>|-1 :: wait for SEQ <seq> (-1 = freeze) + kCmdHide, // HIDE <spr> 0|1 :: visibility of sprite + kCmdRoom, // ROOM <hero> 0|1 :: additional room in pocket (no/yes) + kCmdSay, // SAY <spr> <ref> :: say text referenced by <ref> + kCmdSound, // SOUND <spr> <ref> :: play sound effect referenced by <ref> + kCmdTime, // TIME <spr> 0 :: say current time + kCmdKill, // KILL <spr> 0 :: remove sprite + kCmdRSeq, // RSEQ <spr> <nr> :: relative jump SEQ <nr> lines + kCmdSeq, // SEQ <spr> <seq> :: jump to certain SEQ + kCmdSend, // SEND <spr> <cav> :: move sprite to board <cav> + kCmdSwap, // SWAP <spr1> spr2> :: sprite exchange + kCmdKeep, // KEEP <spr> <seq> :: take sprite into pocket and jump to <seq> + kCmdGive, // GIVE <spr> <seq> :: remove sprite from pocket and jump to <seq> + kCmdGetPos, // GETPOS <spr> <idx> :: take sprite's position + kCmdGoto, // GOTO <spr> <idx> :: move sprite to position + kCmdMoveX, // MOVEX <spr> <dx> :: relative move along X axis + kCmdMoveY, // MOVEY <spr> <dy> :: relative move along Y axis + kCmdMoveZ, // MOVEZ <spr> <dz> :: relative move along Z axis + kCmdTrans, // TRANS <spr> 0|1 :: clear/set logical transparency + kCmdPort, // PORT <spr> 0|1 :: clear/set "takeability" of sprite + kCmdNext, // NEXT <spr> <nr> :: jump to <nr> - NEAR or TAKE + kCmdNNext, // NNEXT <spr> <nr> :: jump to <nr> - NEAR + kCmdMTNext, // MTNEXT <spr> <nr> :: jump to <nr> - TAKE + kCmdFTNext, // FTNEXT <spr> <nr> :: jump to <nr> - TAKE + kCmdRNNext, // RNNEXT <spr> <nr> :: relative jump to <nr> - NEAR + kCmdRMTNext, // RMTNEXT <spr> <nr> :: relative jump to <nr> - TAKE + kCmdRFTNext, // RFTNEXT <spr> <nr> :: relative jump to <nr> - TAKE + kCmdRMNear, // RMNEAR <spr> 0 :: remove NEAR list + kCmdRMMTake, // RMMTAKE <spr> 0 :: remove TAKE list + kCmdRMFTake, // RMFTAKE <spr> 0 :: remove TAKE list + kCmdSetRef, // RETREF <spr> <ref> :: change reference of sprite <spr> to <ref> + kCmdBackPt, // BACKPT <spr> 0 :: paint sprite onto the background + kCmdWalk, // WALK <hero> <ref>|<point> :: go close to the sprite or point + kCmdReach, // REACH <hero> <ref>|<m> :: reach the sprite or point with <m> method + kCmdCover, // COVER <sp1> <sp2> :: cover sprite <sp1> with sprite <sp2> + kCmdUncover, // UNCOVER <sp1> <sp2> :: restore the state before COVER - kSNDim, - kSNExec, - kSNStep, - kSNGhost, + kCmdDim, + kCmdExec, + kCmdStep, + kCmdGhost, - kSNNOne = kNoByte + kCmdNOne = kNoByte }; -class Snail { - static const char *comTxt[]; +class CommandHandler { public: + struct Command { + CommandType _commandType; + int _ref; + int _val; + void *_spritePtr; + CallbackType _cbType; + } *_commandList; + static const char *_commandText[]; + bool _talkEnable; + + CommandHandler(CGE2Engine *vm, bool turbo); + ~CommandHandler(); + void runCommand(); + void addCommand(CommandType com, int ref, int val, void *ptr); + void addCallback(CommandType com, int ref, int val, CallbackType cbType); + void insertCommand(CommandType com, int ref, int val, void *ptr); + bool idle(); + void reset(); static int com(const char *com); +private: + CGE2Engine *_vm; + bool _turbo; + uint8 _head; + uint8 _tail; + bool _busy; + bool _textDelay; + uint32 _timerExpiry; }; } // End of namespace CGE2 |