1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#ifndef MADS_ACTION_H
#define MADS_ACTION_H
#include "common/scummsys.h"
#include "common/str.h"
namespace MADS {
enum ActionMode { ACTIONMODE_NONE = 0, ACTIONMODE_VERB = 1, ACTIONMODE_OBJECT = 3, ACTIONMODE_TALK = 6 };
enum ActionMode2 { ACTIONMODE2_0 = 0, ACTIONMODE2_2 = 2, ACTIONMODE2_4 = 4, ACTIONMODE2_5 = 5 };
enum AbortTimerMode { ABORTMODE_0 = 0, ABORTMODE_1 = 1, ABORTMODE_2 = 2 };
enum {
VERB_NONE = 0,
VERB_LOOK = 3,
VERB_TAKE = 4,
VERB_PUSH = 5,
VERB_OPEN = 6,
VERB_PUT = 7,
VERB_TALKTO = 8,
VERB_GIVE = 9,
VERB_PULL = 10,
VERB_CLOSE = 11,
VERB_THROW = 12,
VERB_WALKTO = 13
};
class MADSEngine;
struct ActionDetails {
int _verbId;
int _objectNameId;
int _indirectObjectId;
};
struct MADSActionSavedFields {
int articleNumber;
int actionMode;
int actionMode2;
bool lookFlag;
int selectedRow;
};
class MADSAction {
private:
MADSEngine *_vm;
Common::String _statusText;
Common::String _dialogTitle;
void appendVocab(int vocabId, bool capitalise = false);
public:
ActionDetails _action, _activeAction;
int _currentAction;
int8 _flags1, _flags2;
ActionMode _actionMode;
ActionMode2 _actionMode2;
int _articleNumber;
bool _lookFlag;
int _selectedRow;
bool _textChanged;
int _selectedAction;
bool _startWalkFlag;
int _statusTextIndex;
int _hotspotId;
MADSActionSavedFields _savedFields;
bool _walkFlag;
bool _savedSelectedRow;
// Unknown fields
int16 _v86F3A;
int16 _v86F42;
int16 _v86F4E;
bool _v86F4A;
int16 _v86F4C;
int _v83338;
bool _inProgress;
AbortTimerMode _v8453A;
public:
MADSAction(MADSEngine *vm);
void clear();
void set();
const Common::String &statusText() const { return _statusText; }
void refresh();
void startAction();
void checkAction();
bool isAction(int verbId, int objectNameId = 0, int indirectObjectId = 0);
void checkActionAtMousePos();
/**
* Execute a click within the scene
*/
void leftClick();
};
} // End of namespace MADS
#endif /* MADS_ACTION_H */
|