diff options
Diffstat (limited to 'queen/command.h')
-rw-r--r-- | queen/command.h | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/queen/command.h b/queen/command.h new file mode 100644 index 0000000000..9e43cb80e6 --- /dev/null +++ b/queen/command.h @@ -0,0 +1,180 @@ + /* ScummVM - Scumm Interpreter + * Copyright (C) 2003 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Header$ + * + */ + +#ifndef QUEENCOMMAND_H +#define QUEENCOMMAND_H + +#include "queen/queen.h" +#include "queen/defs.h" +#include "queen/verb.h" + +namespace Queen { + +class Logic; +class Graphics; +class Input; +class Walk; + + +struct CmdText { + + void clear(); + void display(uint8 color); + void displayTemp(uint8 color, bool locked, const Verb& v, const char *name = NULL); + void displayTemp(uint8 color, const char *name); + void setVerb(const Verb& v); + void addLinkWord(const Verb& v); + void addObject(const char *objName); + bool isEmpty() const; + + enum { + MAX_COMMAND_LEN = 256, + COMMAND_Y_POS = 151 + }; + + char _command[MAX_COMMAND_LEN]; + const char* lockedVerbPrefix; + Graphics* _graphics; +}; + + +class Command { +public: + + Command(Logic*, Graphics*, Input*, Walk*); + + void clear(bool clearTexts); + + void executeCurrentAction(bool walk); + + void updatePlayer(); + + void readCommandsFrom(byte *&ptr); + + Verb selectedAction() const { return _selectedAction; } + int16 selectedNoun() const { return _selectedNoun; } + bool parse() const { return _parse; } + +private: + + void grabCurrentSelection(); + void grabSelectedItem(); + void grabSelectedNoun(); + void grabSelectedVerb(); + + bool executeIfCutaway(const char* description); + bool executeIfDialog(const char* description); + + uint16 countAssociatedCommands(const Verb& verb, int16 subj1, int16 subj2); + bool handleBadCommand(bool walk); + void executeStandardStuff(const Verb& action, int16 subj1, int16 subj2); + void changeObjectState(const Verb& action, int16 obj, int16 song, bool cutDone); + void cleanupCurrentAction(); + + Verb findDefault(uint16 obj, bool itemType); + void alterDefault(const Verb& def, bool itemType); + + //! Opens/closes the object associated with object - OPEN_CLOSE_OTHER(OBJECT_DATA[S][4]) + void openOrCloseAssociatedObject(const Verb& action, int16 obj); + + //! Update gamestates - P1_SET_CONDITIONS + int16 setConditions(uint16 command, bool lastCmd); + + //! Turn on/off areas - P2_SET_AREAS + void setAreas(uint16 command); + + //! Hide/show objects, redisplay if in the same room as Joe - P3_SET_OBJECTS + void setObjects(uint16 command); + + //! Inserts/deletes items (inventory) - P4_SET_ITEMS + void setItems(uint16 command); + + uint16 nextObjectDescription(ObjectDescription* objDesc, uint16 firstDesc); + + //! Look at Objects/Items and speak their description + void look(); + void lookCurrentItem(); + void lookCurrentRoom(); + void lookCurrentIcon(); + + + CmdListData *_cmdList; + uint16 _numCmdList; + + CmdArea *_cmdArea; + uint16 _numCmdArea; + + CmdObject *_cmdObject; + uint16 _numCmdObject; + + CmdInventory *_cmdInventory; + uint16 _numCmdInventory; + + CmdGameState *_cmdGameState; + uint16 _numCmdGameState; + + //! Textual form of the command (displayed between room and panel areas) + CmdText _cmdText; + + //! Locked verb (using 2nd mouse button) + Verb _defaultVerb; + + //! OLDVERB, VERB + Verb _oldVerb, _verb; + + //! OLDNOUN, NOUN + int16 _oldNoun, _noun; + + //! If true, command string is executed + bool _parse; + + //! Current level of the command (max=2 for GIVE and USE verbs) + int _commandLevel; + + //! Object selected for action + int16 _selectedNoun; + + //! Last selected action + Verb _currentAction; + + //! Action to perform + Verb _selectedAction; + + //! SUBJECT[3] + int16 _subject1, _subject2; + + //! MKEY + int _mouseKey; + + //! Position of last selection + int _selPosX, _selPosY; + + Logic *_logic; + Graphics *_graphics; + Input *_input; + Walk *_walk; + +}; + +} // End of namespace Queen + +#endif + |