cleanup, add comments

svn-id: r10977
This commit is contained in:
Gregory Montoir 2003-10-26 13:54:26 +00:00
parent df60e72f77
commit 2a139049d6
4 changed files with 202 additions and 108 deletions

View File

@ -1915,7 +1915,7 @@ const char* Logic::objectOrItemName(int16 obj) const {
uint16 name;
if (obj < 0) {
name = _itemData[ABS(obj)].item;
name = _itemData[ABS(obj)].name;
}
else {
name = _objectData[obj].name;
@ -1931,7 +1931,7 @@ Verb Logic::findVerb(int16 cursorx, int16 cursory) const {
}
uint16 Logic::findObjectFromZone(uint16 zoneNum) {
uint16 Logic::findObjectRoomNumber(uint16 zoneNum) const {
// l.316-327 select.c
uint16 noun = zoneNum;
@ -1948,6 +1948,12 @@ uint16 Logic::findObjectFromZone(uint16 zoneNum) {
}
uint16 Logic::findObjectGlobalNumber(uint16 zoneNum) const {
return _roomData[_currentRoom] + findObjectRoomNumber(zoneNum);
}
const char *Logic::verbName(Verb v) const {
if (v != VERB_NONE && v < 13) {
@ -1960,7 +1966,6 @@ const char *Logic::verbName(Verb v) const {
}
void Logic::update() {
_graphics->update(_currentRoom);
_input->delay();

View File

@ -28,10 +28,6 @@
namespace Queen {
#define MAX_ZONES_NUMBER 32
#define MAX_AREAS_NUMBER 11
#define JOE_RESPONSE_MAX 40
enum RoomDisplayMode {
RDM_FADE_NOJOE = 0, // fade in, no Joe
RDM_FADE_JOE = 1, // Joe is to be displayed
@ -58,29 +54,59 @@ struct GameSettings {
int talkSpeed;
};
/*!
Each object/item in game has a state field.
(refer to ObjectData and ItemData).
<table>
<tr>
<td>Name</td>
<td>Bits</td>
<td>Description</td>
</tr>
<tr>
<td>USE</td>
<td>10</td>
<td>Use</td>
</tr>
<tr>
<td>TALK</td>
<td>9</td>
<td>Talk</td>
</tr>
<tr>
<td>ON</td>
<td>8</td>
<td>On/Off</td>
</tr>
<tr>
<td>DEF</td>
<td>7,6,5,4</td>
<td>Default verb command</td>
</tr>
<tr>
<td>DIR</td>
<td>3,2</td>
<td>Direction faced</td>
</tr>
<tr>
<td>GRAB</td>
<td>1,0</td>
<td>Grab Direction</td>
</tr>
</table>
*/
struct State {
//! FIND_STATE(state, "DIR");
static Direction findDirection(uint16 state);
//! FIND_STATE(state, "TALK");
static StateTalk findTalk(uint16 state);
//! FIND_STATE(state, "GRAB");
static StateGrab findGrab(uint16 state);
static StateOn findOn(uint16 state);
static Verb findDefaultVerb(uint16 state);
static StateUse findUse(uint16 state);
//! FIND_STATE(state, "ON");
static StateOn findOn(uint16 state);
//! FIND_STATE(state, "DEF");
static Verb findDefaultVerb(uint16 state);
static StateUse findUse(uint16 state);
//! ALTER_STATE(state, "ON");
static void alterOn(uint16 *objState, StateOn state);
//! ALTER_STATE(state, verb);
static void alterDefaultVerb(uint16 *objState, Verb v);
};
@ -217,78 +243,127 @@ public:
Walk *walk() { return _walk; }
Display *display() { return _display; }
uint16 findObjectFromZone(uint16 zoneNum);
uint16 findObjectRoomNumber(uint16 zoneNum) const;
uint16 findObjectGlobalNumber(uint16 zoneNum) const;
const char *verbName(Verb v) const;
void update();
protected:
GameSettings _settings;
enum {
MAX_ZONES_NUMBER = 32,
MAX_AREAS_NUMBER = 11,
JOE_RESPONSE_MAX = 40,
DEFAULT_TALK_SPEED = 7,
GAME_STATE_COUNT = 211
};
protected:
void initialise();
//! Contents of queen.jas file
uint8 *_jas;
uint16 _numRooms;
uint16 _currentRoom;
uint16 _oldRoom;
uint16 _newRoom;
uint16 _numNames;
uint16 _numObjects;
uint16 _numDescriptions;
uint16 _oldRoom;
uint16 _newRoom;
//! Total number of room in game
uint16 _numRooms;
//! First object number in room
uint16 *_roomData;
//! Background music to play in room
uint16 *_sfxName;
//! Number of objects in room
int16 *_objMax;
//! Bounding box of object
Box *_objectBox;
//! Inventory items
ItemData *_itemData;
uint16 _numItems;
GraphicData *_graphicData;
uint16 _numGraphics;
uint16 _numWalkOffs;
uint16 _numObjDesc;
uint16 _numCmdList; //COM_LIST_MAX
uint16 _numCmdArea; //COM_A_MAX
uint16 _numCmdObject; //COM_O_MAX
uint16 _numCmdInventory; //COM_I_MAX
uint16 _numCmdGameState; //COM_G_MAX
uint16 _numFurniture; //FURN_DATA_MAX
ObjectData *_objectData;
uint16 _numObjects;
ObjectDescription *_objectDescription;
uint16 _numDescriptions;
ActorData *_actorData;
uint16 _numActors; //ACTOR_DATA_MAX
uint16 _numAAnim; //A_ANIM_MAX
uint16 _numAName; //A_NAME_MAX
uint16 _numAFile; //A_FILE_MAX
//! Areas in room
Area (*_area)[MAX_AREAS_NUMBER];
//! Number of areas in room
int16 *_areaMax;
//! Walk off point for an object
WalkOffData *_walkOffData;
uint16 _numWalkOffs;
CmdListData *_cmdList;
uint16 _numCmdList; //COM_LIST_MAX
CmdArea *_cmdArea;
uint16 _numCmdArea; //COM_A_MAX
CmdObject *_cmdObject;
uint16 _numCmdObject; //COM_O_MAX
CmdInventory *_cmdInventory;
uint16 _numCmdInventory; //COM_I_MAX
CmdGameState *_cmdGameState;
uint16 _numCmdGameState; //COM_G_MAX
FurnitureData *_furnitureData;
uint16 _numFurniture; //FURN_DATA_MAX
GraphicAnim *_graphicAnim;
uint16 _numGraphicAnim; //GRAPHIC_ANIM_MAX
uint16 *_roomData;
uint16 *_sfxName;
int16 *_objMax;
int16 *_areaMax;
Box *_objectBox;
ItemData *_itemData;
GraphicData *_graphicData;
ObjectData *_objectData;
ObjectDescription *_objectDescription;
ActorData *_actorData;
Area (*_area)[MAX_AREAS_NUMBER];
WalkOffData *_walkOffData;
CmdListData *_cmdList;
CmdArea *_cmdArea;
CmdObject *_cmdObject;
CmdInventory *_cmdInventory;
CmdGameState *_cmdGameState;
FurnitureData *_furnitureData;
GraphicAnim *_graphicAnim;
//! Current areas in room
ZoneSlot _zones[2][MAX_ZONES_NUMBER];
//! Actor position in room is _walkOffData[_entryObj]
uint16 _entryObj;
//! Object description (Look At)
char **_objDescription; //OBJECT_DESCRstr
char **_objName; //OBJECT_NAMEstr
char **_roomName; //ROOM_NAMEstr
char *_verbName[13]; //VERB_NAMEstr
char *_joeResponse[JOE_RESPONSE_MAX + 1]; //JOE_RESPstr
char **_aAnim; //A_ANIMstr
char **_aName; //A_NAMEstr
char **_aFile; //A_FILEstr
uint16 _numObjDesc;
enum {
DEFAULT_TALK_SPEED = 7,
GAME_STATE_COUNT = 211
};
char **_objName; //OBJECT_NAMEstr
uint16 _numNames;
//! Room name, prefix for data files (PCX, LUM...)
char **_roomName; //ROOM_NAMEstr
char *_verbName[13]; //VERB_NAMEstr
char *_joeResponse[JOE_RESPONSE_MAX + 1]; //JOE_RESPstr
//! Actor animation string
char **_aAnim;
uint16 _numAAnim; //A_ANIM_MAX
//! Actor name
char **_aName;
uint16 _numAName; //A_NAME_MAX
//! Actor filename
char **_aFile;
uint16 _numAFile; //A_FILE_MAX
struct {
uint16 x, y;
@ -317,6 +392,8 @@ protected:
//! Describe a string based animation (30 frames maximum, bob number must be < 17)
AnimFrame _newAnim[17][30];
GameSettings _settings;
Resource *_resource;
Graphics *_graphics;
Display *_display;

View File

@ -144,7 +144,7 @@ struct GraphicData {
struct ObjectData {
//! entry in OBJECT_NAME (<0: object is hidden)
//! entry in OBJECT_NAME (<0: object is hidden, 0: object has been deleted)
int16 name;
//! coordinates of object
uint16 x, y;
@ -156,13 +156,17 @@ struct ObjectData {
uint16 room;
//! state of the object (grab direction, on/off, default command...)
uint16 state;
//! entry in GraphicData (can be negative)
//! entry in GraphicData
/*!
<table>
<tr>
<td>value</td>
<td>description</td>
</tr>
<tr>
<td>]-4000..-10]</td>
<td>graphic image turned off</td>
</tr>
<tr>
<td>-4</td>
<td>person object (right facing)</td>
@ -180,7 +184,11 @@ struct ObjectData {
<td>static bob (off)</td>
</tr>
<tr>
<td>[0..5000]</td>
<td>0</td>
<td>object deleted</td>
</tr>
<tr>
<td>]0..5000]</td>
<td>static or animated bob (on)</td>
</tr>
<tr>
@ -249,7 +257,7 @@ struct ObjectDescription {
struct ItemData {
//! entry in OBJECT_NAME
int16 item;
int16 name;
//! entry in OBJECT_DESCR
uint16 description;
//! state of the object
@ -260,7 +268,7 @@ struct ItemData {
int16 sfxDescription;
void readFrom(byte *&ptr) {
item = (int16)READ_BE_UINT16(ptr); ptr += 2;
name = (int16)READ_BE_UINT16(ptr); ptr += 2;
description = READ_BE_UINT16(ptr); ptr += 2;
state = READ_BE_UINT16(ptr); ptr += 2;
bobFrame = READ_BE_UINT16(ptr); ptr += 2;
@ -326,8 +334,8 @@ struct CmdListData {
bool setItems;
//! if set, P1_SET_CONDITIONS must be called (using CmdGameState)
bool setConditions;
//! graphic image of object
int16 image;
//! graphic image order
int16 imageOrder;
//! special section to execute
/*!
refer to execute.c l.423-451
@ -365,18 +373,18 @@ struct CmdListData {
setObjects = READ_BE_UINT16(ptr) != 0; ptr += 2;
setItems = READ_BE_UINT16(ptr) != 0; ptr += 2;
setConditions = READ_BE_UINT16(ptr) != 0; ptr += 2;
image = (int16)READ_BE_UINT16(ptr); ptr += 2;
imageOrder = (int16)READ_BE_UINT16(ptr); ptr += 2;
specialSection = (int16)READ_BE_UINT16(ptr); ptr += 2;
}
bool match(Verb v, int16 obj1, int16 obj2) const {
return verb == verb && nounObj1 == obj1 && nounObj2 == obj2;
return verb == v && nounObj1 == obj1 && nounObj2 == obj2;
}
};
struct CmdArea {
//! identifier of the command
//! CmdListData number
int16 id;
//! area to turn off/on (<0: off, >0: on)
int16 area;
@ -392,10 +400,12 @@ struct CmdArea {
struct CmdObject {
//! identifier of the command
//! CmdListData number
int16 id;
int16 dstObj; // >0: show, <0: hide
int16 srcObj; // >0: copy from srcObj, 0: nothing, -1: delete dstObj
//! >0: show, <0: hide
int16 dstObj;
//! >0: copy from srcObj, 0: nothing, -1: delete dstObj
int16 srcObj;
void readFrom(byte *&ptr) {
id = (int16)READ_BE_UINT16(ptr); ptr += 2;
@ -406,10 +416,12 @@ struct CmdObject {
struct CmdInventory {
//! identifier of the command
//! CmdListData number
int16 id;
int16 dstItem; // <0: delete, >0: add
int16 srcItem; // >0: valid
//! <0: delete, >0: add
int16 dstItem;
//! >0: valid
int16 srcItem;
void readFrom(byte *&ptr) {
id = (int16)READ_BE_UINT16(ptr); ptr += 2;
@ -420,17 +432,17 @@ struct CmdInventory {
struct CmdGameState {
//! identifier of the command
//! CmdListData number
int16 id;
int16 gameStateSlot;
int16 gameStateValue;
int16 speakValue;
uint16 speakValue;
void readFrom(byte *&ptr) {
id = (int16)READ_BE_UINT16(ptr); ptr += 2;
gameStateSlot = (int16)READ_BE_UINT16(ptr); ptr += 2;
gameStateValue = (int16)READ_BE_UINT16(ptr); ptr += 2;
speakValue = (int16)READ_BE_UINT16(ptr); ptr += 2;
speakValue = READ_BE_UINT16(ptr); ptr += 2;
}
};

View File

@ -18,6 +18,10 @@ ALTER_DEFAULT() Command::alterDefault
CLEAR_COMMAND() Command::clear
EXECUTE_ACTION() Command::executeCurrentAction
FIND_DEFAULT() Command::findDefault
LOOK()
LOOK_ICON()
LOOK_ITEM() Command::lookCurrentItem
LOOK_ROOM()
OPEN_CLOSE_OTHER() Command::openOrCloseAssociatedObject
P1_SET_CONDITIONS() Command::setConditions
P2_SET_AREAS() Command::setAreas
@ -30,10 +34,20 @@ SELECT_VERB() Command::grabSelectedVerb
-
ACTION,ACTION2 Command::_action*
CLEVEL Command::_commandLevel
COM_A Logic::_cmdArea
COM_A_MAX Logic::_numCmdArea
COM_O Logic::_cmdObject
COM_O_MAX Logic::_numCmdObject
COM_G Logic::_cmdGameState
COM_G_MAX Logic::_numCmdGameState
COM_I Logic::_cmdInventory
COM_I_MAX Logic::_numCmdInventory
COM_LIST Logic::_cmdList
COM_LIST_MAX Logic::_numCmdList
COMMANDstr Command::_command
DEFCOMM Command::_defaultVerb
OLDVERB,VERB Command::_*verb*
OLDNOUN,NOUN,NOUN2 Command::_*old*
OLDNOUN,NOUN,NOUN2 Command::_*noun*
PARSE Command::_parse
SUBJ1,SUBJ2,SUBJECT Command::_subject*
@ -194,10 +208,6 @@ FIND_FRAME() Logic::findFrame
FIND_GRAPHIC() Logic::graphicData
FIND_SCALE() Logic::findScale
FIND_VERB() Logic::findVerb
LOOK()
LOOK_ICON()
LOOK_ITEM()
LOOK_ROOM()
P3_COPY_FROM() Cutaway::objectCopy
R_MAP() (handle map 'm1')
REDISP_OBJECT() Logic::roomRefreshObject
@ -218,16 +228,6 @@ A_FILE_MAX Logic::_numAFile
ACTOR_DATA_MAX Logic::_numActors
AREA Logic::_area
AREAMAX Logic::_areaMax
COM_A Logic::_cmdArea
COM_A_MAX Logic::_numCmdArea
COM_O Logic::_cmdObject
COM_O_MAX Logic::_numCmdObject
COM_G Logic::_cmdGameState
COM_G_MAX Logic::_numCmdGameState
COM_I Logic::_cmdInventory
COM_I_MAX Logic::_numCmdInventory
COM_LIST Logic::_cmdList
COM_LIST_MAX Logic::_numCmdList
DESCTOT Logic::_numDescriptions
ENTRY_OBJ Logic::_entryObj
FMAX Logic::_numFurnitureStatic
@ -451,7 +451,7 @@ CANTQUIT
(NO NEED TO BE GLOBAL)
===============
======================
Nstr,F1,F2,F3,F4,F5,F6,F7,F8,SF,BF,AS,MS // MOVE_OTHER (struct movdata *)
Nstr,S,F,BODY,BF,RF,AF,SANIMstr,FF // FIND_SACTION (struct action *)
CURRBOB // SETUP_FURNITURE, REDISP_OBJECT, DISP_OBJECTS