From ae338068025ec17d952af996267a6cad59b5187e Mon Sep 17 00:00:00 2001
From: Gregory Montoir
Date: Thu, 11 Dec 2003 10:03:35 +0000
Subject: centralize all State related stuff
svn-id: r11577
---
queen/command.cpp | 1 +
queen/defs.h | 26 ----------
queen/logic.cpp | 117 ------------------------------------------
queen/logic.h | 58 +--------------------
queen/module.mk | 1 +
queen/state.cpp | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
queen/state.h | 116 ++++++++++++++++++++++++++++++++++++++++++
queen/talk.cpp | 1 +
8 files changed, 269 insertions(+), 200 deletions(-)
create mode 100644 queen/state.cpp
create mode 100644 queen/state.h
diff --git a/queen/command.cpp b/queen/command.cpp
index e50a7ba851..df1c4b82e9 100644
--- a/queen/command.cpp
+++ b/queen/command.cpp
@@ -26,6 +26,7 @@
#include "queen/graphics.h"
#include "queen/logic.h"
#include "queen/sound.h"
+#include "queen/state.h"
#include "queen/talk.h"
#include "queen/walk.h"
diff --git a/queen/defs.h b/queen/defs.h
index 8f6e4394de..d93c3cebfa 100644
--- a/queen/defs.h
+++ b/queen/defs.h
@@ -280,32 +280,6 @@ enum Language {
};
-enum StateTalk {
- STATE_TALK_TALK,
- STATE_TALK_MUTE
-};
-
-
-enum StateGrab {
- STATE_GRAB_NONE,
- STATE_GRAB_DOWN,
- STATE_GRAB_UP,
- STATE_GRAB_MID
-};
-
-
-enum StateOn {
- STATE_ON_ON,
- STATE_ON_OFF
-};
-
-
-enum StateUse {
- STATE_USE,
- STATE_USE_ON
-};
-
-
enum JoeWalkMode {
JWM_NORMAL = 0,
JWM_MOVE = 1,
diff --git a/queen/logic.cpp b/queen/logic.cpp
index 1b49bc8580..dc9c5383a2 100644
--- a/queen/logic.cpp
+++ b/queen/logic.cpp
@@ -59,123 +59,6 @@ const VerbEnum Logic::PANEL_VERBS[] = {
char* Verb::_verbName[13];
-Direction State::findDirection(uint16 state) {
- // queen.c l.4014-4021
- static const Direction sd[] = {
- DIR_BACK,
- DIR_RIGHT,
- DIR_LEFT,
- DIR_FRONT
- };
- return sd[(state >> 2) & 3];
-}
-
-StateTalk State::findTalk(uint16 state) {
- return (state & (1 << 9)) ? STATE_TALK_TALK : STATE_TALK_MUTE;
-}
-
-StateGrab State::findGrab(uint16 state) {
- // queen.c l.4022-4029
- static const StateGrab gd[] = {
- STATE_GRAB_NONE,
- STATE_GRAB_DOWN,
- STATE_GRAB_UP,
- STATE_GRAB_MID
- };
- return gd[state & 3];
-}
-
-StateOn State::findOn(uint16 state) {
- return (state & (1 << 8)) ? STATE_ON_ON : STATE_ON_OFF;
-}
-
-
-Verb State::findDefaultVerb(uint16 state) {
- Verb v;
- switch((state >> 4) & 0xF) {
- case 1:
- v = Verb(VERB_OPEN);
- break;
- case 3:
- v = Verb(VERB_CLOSE);
- break;
- case 7:
- v = Verb(VERB_MOVE);
- break;
- case 8:
- v = Verb(VERB_GIVE);
- break;
- case 12:
- v = Verb(VERB_USE);
- break;
- case 14:
- v = Verb(VERB_PICK_UP);
- break;
- case 9:
- v = Verb(VERB_TALK_TO);
- break;
- case 6:
- v = Verb(VERB_LOOK_AT);
- break;
- default:
- v = Verb(VERB_NONE);
- break;
- }
- return v;
-}
-
-
-StateUse State::findUse(uint16 state) {
- return (state & (1 << 10)) ? STATE_USE : STATE_USE_ON;
-}
-
-
-void State::alterOn(uint16 *objState, StateOn state) {
- switch (state) {
- case STATE_ON_ON:
- *objState |= (1 << 8);
- break;
- case STATE_ON_OFF:
- *objState &= ~(1 << 8);
- break;
- }
-}
-
-void State::alterDefaultVerb(uint16 *objState, Verb v) {
- uint16 val;
- switch (v.value()) {
- case VERB_OPEN:
- val = 1;
- break;
- case VERB_CLOSE:
- val = 3;
- break;
- case VERB_MOVE:
- val = 7;
- break;
- case VERB_GIVE:
- val = 8;
- break;
- case VERB_USE:
- val = 12;
- break;
- case VERB_PICK_UP:
- val = 14;
- break;
- case VERB_TALK_TO:
- val = 9;
- break;
- case VERB_LOOK_AT:
- val = 6;
- break;
- default:
- val = 0;
- break;
- }
- *objState = (*objState & ~0xF0) | (val << 4);
-}
-
-
Common::RandomSource Logic::randomizer;
diff --git a/queen/logic.h b/queen/logic.h
index 87143c48f4..16ef37c62f 100644
--- a/queen/logic.h
+++ b/queen/logic.h
@@ -25,6 +25,7 @@
#include "common/util.h"
#include "queen/defs.h"
#include "queen/structs.h"
+#include "queen/state.h" // for joeGrabDirection()
#include "queen/verb.h"
namespace Queen {
@@ -41,63 +42,6 @@ struct ZoneSlot {
Box box;
};
-
-/*!
- Each object/item in game has a state field.
- (refer to ObjectData and ItemData).
-
-
-
- Name |
- Bits |
- Description |
-
-
- USE |
- 10 |
- Use |
-
-
- TALK |
- 9 |
- Talk |
-
-
- ON |
- 8 |
- On/Off |
-
-
- DEF |
- 7,6,5,4 |
- Default verb command |
-
-
- DIR |
- 3,2 |
- Direction faced |
-
-
- GRAB |
- 1,0 |
- Grab Direction |
-
-
-*/
-struct State {
-
- static Direction findDirection(uint16 state);
- static StateTalk findTalk(uint16 state);
- static StateGrab findGrab(uint16 state);
- static StateOn findOn(uint16 state);
- static Verb findDefaultVerb(uint16 state);
- static StateUse findUse(uint16 state);
-
- static void alterOn(uint16 *objState, StateOn state);
- static void alterDefaultVerb(uint16 *objState, Verb v);
-};
-
-
class Command;
class Debug;
class Display;
diff --git a/queen/module.mk b/queen/module.mk
index b01bb1e343..64f10fc6c0 100644
--- a/queen/module.mk
+++ b/queen/module.mk
@@ -14,6 +14,7 @@ MODULE_OBJS = \
queen/resource.o \
queen/restables.o \
queen/sound.o \
+ queen/state.o \
queen/talk.o \
queen/walk.o
diff --git a/queen/state.cpp b/queen/state.cpp
new file mode 100644
index 0000000000..65fc915076
--- /dev/null
+++ b/queen/state.cpp
@@ -0,0 +1,149 @@
+/* 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$
+ *
+ */
+
+#include "stdafx.h"
+#include "queen/state.h"
+
+namespace Queen {
+
+
+Direction State::findDirection(uint16 state) {
+ // queen.c l.4014-4021
+ static const Direction sd[] = {
+ DIR_BACK,
+ DIR_RIGHT,
+ DIR_LEFT,
+ DIR_FRONT
+ };
+ return sd[(state >> 2) & 3];
+}
+
+
+StateTalk State::findTalk(uint16 state) {
+ return (state & (1 << 9)) ? STATE_TALK_TALK : STATE_TALK_MUTE;
+}
+
+
+StateGrab State::findGrab(uint16 state) {
+ // queen.c l.4022-4029
+ static const StateGrab gd[] = {
+ STATE_GRAB_NONE,
+ STATE_GRAB_DOWN,
+ STATE_GRAB_UP,
+ STATE_GRAB_MID
+ };
+ return gd[state & 3];
+}
+
+
+StateOn State::findOn(uint16 state) {
+ return (state & (1 << 8)) ? STATE_ON_ON : STATE_ON_OFF;
+}
+
+
+Verb State::findDefaultVerb(uint16 state) {
+ Verb v;
+ switch((state >> 4) & 0xF) {
+ case 1:
+ v = Verb(VERB_OPEN);
+ break;
+ case 3:
+ v = Verb(VERB_CLOSE);
+ break;
+ case 7:
+ v = Verb(VERB_MOVE);
+ break;
+ case 8:
+ v = Verb(VERB_GIVE);
+ break;
+ case 12:
+ v = Verb(VERB_USE);
+ break;
+ case 14:
+ v = Verb(VERB_PICK_UP);
+ break;
+ case 9:
+ v = Verb(VERB_TALK_TO);
+ break;
+ case 6:
+ v = Verb(VERB_LOOK_AT);
+ break;
+ default:
+ v = Verb(VERB_NONE);
+ break;
+ }
+ return v;
+}
+
+
+StateUse State::findUse(uint16 state) {
+ return (state & (1 << 10)) ? STATE_USE : STATE_USE_ON;
+}
+
+
+void State::alterOn(uint16 *objState, StateOn state) {
+ switch (state) {
+ case STATE_ON_ON:
+ *objState |= (1 << 8);
+ break;
+ case STATE_ON_OFF:
+ *objState &= ~(1 << 8);
+ break;
+ }
+}
+
+
+void State::alterDefaultVerb(uint16 *objState, Verb v) {
+ uint16 val;
+ switch (v.value()) {
+ case VERB_OPEN:
+ val = 1;
+ break;
+ case VERB_CLOSE:
+ val = 3;
+ break;
+ case VERB_MOVE:
+ val = 7;
+ break;
+ case VERB_GIVE:
+ val = 8;
+ break;
+ case VERB_USE:
+ val = 12;
+ break;
+ case VERB_PICK_UP:
+ val = 14;
+ break;
+ case VERB_TALK_TO:
+ val = 9;
+ break;
+ case VERB_LOOK_AT:
+ val = 6;
+ break;
+ default:
+ val = 0;
+ break;
+ }
+ *objState = (*objState & ~0xF0) | (val << 4);
+}
+
+
+} // End of namespace Queen
diff --git a/queen/state.h b/queen/state.h
new file mode 100644
index 0000000000..9408a17aa3
--- /dev/null
+++ b/queen/state.h
@@ -0,0 +1,116 @@
+/* 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 QUEENSTATE_H
+#define QUEENSTATE_H
+
+#include "common/util.h"
+#include "queen/defs.h"
+#include "queen/verb.h"
+
+namespace Queen {
+
+
+enum StateTalk {
+ STATE_TALK_TALK,
+ STATE_TALK_MUTE
+};
+
+
+enum StateGrab {
+ STATE_GRAB_NONE,
+ STATE_GRAB_DOWN,
+ STATE_GRAB_UP,
+ STATE_GRAB_MID
+};
+
+
+enum StateOn {
+ STATE_ON_ON,
+ STATE_ON_OFF
+};
+
+
+enum StateUse {
+ STATE_USE,
+ STATE_USE_ON
+};
+
+
+/*!
+ Each object/item in game has a state field.
+ (refer to ObjectData and ItemData).
+
+
+
+ Name |
+ Bits |
+ Description |
+
+
+ USE |
+ 10 |
+ Use |
+
+
+ TALK |
+ 9 |
+ Talk |
+
+
+ ON |
+ 8 |
+ On/Off |
+
+
+ DEF |
+ 7,6,5,4 |
+ Default verb command |
+
+
+ DIR |
+ 3,2 |
+ Direction to face for the object |
+
+
+ GRAB |
+ 1,0 |
+ Grab Direction |
+
+
+*/
+struct State {
+
+ static Direction findDirection(uint16 state);
+ static StateTalk findTalk(uint16 state);
+ static StateGrab findGrab(uint16 state);
+ static StateOn findOn(uint16 state);
+ static Verb findDefaultVerb(uint16 state);
+ static StateUse findUse(uint16 state);
+
+ static void alterOn(uint16 *objState, StateOn state);
+ static void alterDefaultVerb(uint16 *objState, Verb v);
+};
+
+
+} // End of namespace Queen
+
+#endif
diff --git a/queen/talk.cpp b/queen/talk.cpp
index 74f90f8751..0ce91e6078 100644
--- a/queen/talk.cpp
+++ b/queen/talk.cpp
@@ -27,6 +27,7 @@
#include "queen/logic.h"
#include "queen/resource.h"
#include "queen/sound.h"
+#include "queen/state.h"
namespace Queen {
--
cgit v1.2.3