[Scummvm-cvs-logs] CVS: scummvm/queen defs.h,1.4,1.5 logic.cpp,1.32,1.33 logic.h,1.22,1.23 resource.cpp,1.10,1.11 resource.h,1.11,1.12

Joost Peters joostp at users.sourceforge.net
Sun Oct 12 11:45:05 CEST 2003


Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1:/tmp/cvs-serv29138/queen

Modified Files:
	defs.h logic.cpp logic.h resource.cpp resource.h 
Log Message:
added missing INITIATE() code, added language detection to Resource class, etc.

Index: defs.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/defs.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- defs.h	12 Oct 2003 17:38:01 -0000	1.4
+++ defs.h	12 Oct 2003 18:44:44 -0000	1.5
@@ -89,6 +89,12 @@
 	PANEL_AREA_INV_4    = 14
 };
 
+enum Language {
+	ENGLISH  = 'E',
+	FRENCH   = 'F',
+	GERMAN   = 'G',
+	ITALIAN  = 'I'
+};
 
 } // End of namespace Queen
 

Index: logic.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/logic.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -d -r1.32 -r1.33
--- logic.cpp	12 Oct 2003 17:38:01 -0000	1.32
+++ logic.cpp	12 Oct 2003 18:44:44 -0000	1.33
@@ -216,7 +216,224 @@
 	}
 
 	//Command List Data
+	_numCmdList = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_cmdList = new CmdListData[_numCmdList + 1];
+	for (i = 1; i <= _numCmdList; i++) {
+		_cmdList[i].verb = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_cmdList[i].nounObj1 = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_cmdList[i].nounObj2 = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_cmdList[i].song = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_cmdList[i].setAreas = READ_BE_UINT16(ptr) != 0;
+		ptr += 2;
+		_cmdList[i].setObjects = READ_BE_UINT16(ptr) != 0;
+		ptr += 2;
+		_cmdList[i].setItems = READ_BE_UINT16(ptr) != 0;
+		ptr += 2;
+		_cmdList[i].setConditions = READ_BE_UINT16(ptr) != 0;
+		ptr += 2;
+		_cmdList[i].image = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_cmdList[i].specialSection = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+	}
+	
+	//Command AREA
+	_numCmdArea = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_cmdArea = new CmdArea[_numCmdArea + 1];
+	for (i = 1; i <= _numCmdArea; i++) {
+		_cmdArea[i].id = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_cmdArea[i].area = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_cmdArea[i].room = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+	}
+	
+	//Command OBJECT
+	_numCmdObject = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_cmdObject = new CmdObject[_numCmdObject + 1];
+	for (i = 1; i <= _numCmdObject; i++) {
+		_cmdObject[i].id = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+		_cmdObject[i].dstObj = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+		_cmdObject[i].srcObj = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+	}
+
+	//Command INVENTORY
+	_numCmdInventory = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_cmdInventory = new CmdInventory[_numCmdInventory + 1];
+	for (i = 1; i <= _numCmdInventory; i++) {
+		_cmdInventory[i].id = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+		_cmdInventory[i].dstItem = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+		_cmdInventory[i].srcItem = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+	}
+	
+	//Command GAMESTATE
+	_numCmdGameState = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_cmdGameState = new CmdGameState[_numCmdGameState + 1];
+	for (i = 1; i <= _numCmdGameState; i++) {
+		_cmdGameState[i].id = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+		_cmdGameState[i].gameStateSlot = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+		_cmdGameState[i].gameStateValue = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+		_cmdGameState[i].speakValue = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;		
+	}
+
+	_entryObj = READ_BE_UINT16(ptr);
+	ptr += 2;
+
+	//Furniture DATA
+	_numFurniture = READ_BE_UINT16(ptr);
+	ptr += 2;
+
+	_furnitureData = new FurnitureData[_numFurniture + 1];
+	for (i = 1; i <= _numFurniture; i++) {
+		_furnitureData[i].room = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_furnitureData[i].gameStateValue = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+	}
+
+	_numActors = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_numAAnim = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_numAName = READ_BE_UINT16(ptr);
+	ptr += 2;
+	_numAFile = READ_BE_UINT16(ptr);
+	ptr += 2;
+
+	_actorData = new ActorData[_numActors + 1];
+	for (i = 1; i <= _numActors; i++) {
+		_actorData[i].room = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].bobNum = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].name = READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].gameStateSlot = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].gameStateValue = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].color = READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].bobFrameStanding = READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].x = READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].y = READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].anim = READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].bankNum = READ_BE_UINT16(ptr);
+		ptr += 2;
+		_actorData[i].actorFile = READ_BE_UINT16(ptr);
+		ptr += 2;
+	}
 
+	_numGraphicAnim = READ_BE_UINT16(ptr);
+	ptr += 2;
+	
+	_graphicAnim = new GraphicAnim[_numGraphicAnim + 1];
+	for (i = 1; i <= _numGraphicAnim; i++) {
+		_graphicAnim[i].frame1 = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_graphicAnim[i].frame2 = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+		_graphicAnim[i].frame3 = (int16)READ_BE_UINT16(ptr);
+		ptr += 2;
+	}
+	
+	_currentRoom = _objectData[_entryObj].room;
+	_entryObj = 0;
+	
+	/*
+		switch (_resource->getLanguage()) {
+			case	ENGLISH:
+					_keyLanguage = _keyCommands[KEYS_ENGLISH];
+					break;
+			case	GERMAN:
+					_keyLanguage = _keyCommands[KEYS_GERMAN];
+					break;
+			case	FRENCH:
+					_keyLanguage = _keyCommands[KEYS_FRENCH];
+					break;
+			case	ITALIAN:
+					_keyLanguage = _keyCommands[KEYS_ITALIAN];
+					break;
+			default:
+					_keyLanguage = _keyCommands[KEYS_ENGLISH];
+					break;
+		}
+	*/
+
+	_objDescription = new char*[_numDescriptions + 1];
+	_objDescription[0] = 0;
+	for (i = 1; i <= _numDescriptions; i++)
+		_objDescription[i] = _resource->getJAS2Line();
+
+	//Patch for German text bug
+	if (_resource->getLanguage() == GERMAN) {
+		char *txt = new char[48];
+		strcpy(txt, "Es bringt nicht viel, das festzubinden.");
+		_objDescription[296] = txt;
+	}
+	
+	_objName = new char*[_numNames + 1];
+	_objName[0] = 0;
+	for (i = 1; i <= _numNames; i++)
+		_objName[i] = _resource->getJAS2Line();
+
+	_roomName = new char*[_numRooms + 1];
+	_roomName[0] = 0;
+	for (i = 1; i <= _numRooms; i++)
+		_roomName[i] = _resource->getJAS2Line();
+
+	_verbName[0] = 0;
+	for (i = 1; i <= 12; i++)
+		_verbName[i] = _resource->getJAS2Line();
+
+	_joeResponse[0] = 0;
+	for (i = 1; i <= JOE_RESPONSE_MAX; i++)
+		_joeResponse[i] = _resource->getJAS2Line();
+
+	_aAnim = new char*[_numAAnim + 1];
+	_aAnim[0] = 0;
+	for (i = 1; i <= _numAAnim; i++)
+		_aAnim[i] = _resource->getJAS2Line();
+
+	_aName = new char*[_numAName + 1];
+	_aName[0] = 0;
+	for (i = 1; i <= _numAName; i++)
+		_aName[i] = _resource->getJAS2Line();
+	
+	_aFile = new char*[_numAFile + 1];
+	_aFile[0] = 0;
+	for (i = 1; i <= _numAFile; i++)
+		_aFile[i] = _resource->getJAS2Line();
+
+	_textToggle = true;	
+	if (_resource->isFloppy())
+		_speechToggle = false;
+	else
+		_speechToggle = true;
 
 	_graphics->panelLoad();
 	_graphics->bobSetupControl();
@@ -224,7 +441,6 @@
 
 	memset(_zones, 0, sizeof(_zones));
 	_oldRoom = 0;
-	_entryObj = 0;
 }
 
 uint16 Logic::currentRoom() {

Index: logic.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/logic.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- logic.h	12 Oct 2003 17:38:01 -0000	1.22
+++ logic.h	12 Oct 2003 18:44:44 -0000	1.23
@@ -27,15 +27,8 @@
 
 namespace Queen {
 
-#define MAX_ZONES_NUMBER 32
-
-
-enum Language {
-	ENGLISH  = 'E',
-	FRENCH   = 'F',
-	GERMAN   = 'G',
-	ITALIAN  = 'I'
-};
+#define MAX_ZONES_NUMBER	32
+#define JOE_RESPONSE_MAX	40
 
 enum RoomDisplayMode {
 	RDM_FADE_NOJOE  = 0, // fade in, no Joe
@@ -95,7 +88,10 @@
 	int16 gameState(int index);
 	void gameState(int index, int16 newValue);
 
-	Language language() { return ENGLISH; } // FIXME: get from queen.jas
+	char *getRoomName(uint16 roomNum)	{ return _roomName[roomNum] ; }
+	char *getObjectName(uint16 objNum)	{ return _objName[objNum]; }
+
+	Language language()	{ return _resource->getLanguage(); } 
 
 	void zoneSet(uint16 screen, uint16 zone, uint16 x1, uint16 y1, uint16 x2, uint16 y2);
 	void zoneSet(uint16 screen, uint16 zone, const Box& box);
@@ -118,6 +114,9 @@
 
 
 protected:
+	bool _textToggle;
+	bool _speechToggle;
+	
 	uint8 *_jas;
 	uint16 _numRooms;
 	uint16 _currentRoom;
@@ -132,6 +131,17 @@
 	uint16 _numObjectBoxes;
 	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
+	uint16 _numActors;	//ACTOR_DATA_MAX
+	uint16 _numAAnim;	//A_ANIM_MAX
+	uint16 _numAName;	//A_NAME_MAX
+	uint16 _numAFile;	//A_FILE_MAX
+	uint16 _numGraphicAnim;	//GRAPHIC_ANIM_MAX
 
 	uint16 *_roomData;
 	uint16 *_sfxName;
@@ -142,11 +152,27 @@
 	GraphicData *_graphicData;
 	ObjectData *_objectData;
 	ObjectDescription *_objectDescription;
-	uint16 (*_actorData)[12]; // FIXME: ActorData *_actorData;
+	ActorData *_actorData;
 	Area (*_area)[11];
 	WalkOffData *_walkOffData;
+	CmdListData *_cmdList;
+	CmdArea *_cmdArea;
+	CmdObject *_cmdObject;
+	CmdInventory *_cmdInventory;	
+	CmdGameState *_cmdGameState;
+	FurnitureData *_furnitureData;
+	GraphicAnim *_graphicAnim;
 	ZoneSlot _zones[2][MAX_ZONES_NUMBER];
 	uint16 _entryObj;
+
+	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
 
 	enum {
 		GAME_STATE_COUNT = 211

Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/resource.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- resource.cpp	10 Oct 2003 13:55:06 -0000	1.10
+++ resource.cpp	12 Oct 2003 18:44:44 -0000	1.11
@@ -44,7 +44,7 @@
 };
 
 Resource::Resource(const Common::String &datafilePath)
-	: _resourceEntries(0), _resourceTable(NULL), _datafilePath(datafilePath) {
+	: _resourceEntries(0), _resourceTable(NULL), _datafilePath(datafilePath), _JAS2Pos(0) {
 
 	_resourceFile = new File();
 	_resourceFile->open(dataFilename, _datafilePath);
@@ -69,12 +69,15 @@
 		error("Verifying game version failed! (expected: '%s', found: '%s')", _gameVersion->versionString, JASVersion());
 
 	debug(5, "Detected game version: %s, which has %d resource entries", _gameVersion->versionString, _resourceEntries);
+
+	_JAS2Ptr = (char *)loadFile("QUEEN2.JAS", 0);
 }
 
 Resource::~Resource() {
 	_resourceFile->close();
 	if(_resourceTable != _resourceTablePEM10) 
 		delete[] _resourceTable;
+	delete[] _JAS2Ptr;
 }
 
 int32 Resource::resourceIndex(const char *filename) {
@@ -118,6 +121,19 @@
 	return -1;
 }
 
+char *Resource::getJAS2Line() {
+	char *startOfLine = _JAS2Ptr + _JAS2Pos;
+	char *pos = strstr(startOfLine, "\r\n");
+	if (pos) {
+		*pos = '\0';
+		pos += 2;
+	} else {
+		error("Couldn't find newline");
+	}
+	_JAS2Pos = (pos - _JAS2Ptr);	
+	return startOfLine;
+}
+
 uint32 Resource::fileSize(const char *filename) {
 	return _resourceTable[resourceIndex(filename)].size;
 }
@@ -151,6 +167,25 @@
 
 bool Resource::isDemo() {
 	return _gameVersion->isDemo;
+}
+
+bool Resource::isFloppy() {
+	return _gameVersion->isFloppy;
+}
+
+Language Resource::getLanguage() {
+	switch (_gameVersion->versionString[1]) {
+		case 'E':
+			return ENGLISH;
+		case 'G':
+			return GERMAN;
+		case 'F':
+			return FRENCH;
+		case 'I':
+			return ITALIAN;
+		default:
+			return ENGLISH;
+	}
 }
 
 const GameVersion *Resource::detectGameVersion(uint32 dataFilesize) {

Index: resource.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/resource.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- resource.h	10 Oct 2003 13:55:06 -0000	1.11
+++ resource.h	12 Oct 2003 18:44:44 -0000	1.12
@@ -23,6 +23,7 @@
 #define QUEEN_RESOURCE_H
 
 #include "common/file.h"
+#include "defs.h"
 
 namespace Queen {
 
@@ -60,12 +61,17 @@
 	Resource(const Common::String &datafilePath);
 	~Resource(void);
 	uint8 *loadFile(const char *filename, uint32 skipBytes = 0);
+	char *getJAS2Line();
 	bool exists(const char *filename);
 	bool isDemo();
+	bool isFloppy();
 	uint32 fileSize(const char *filename);
+	Language getLanguage();
 
 protected:
 	File *_resourceFile;
+	char *_JAS2Ptr;
+	uint32 _JAS2Pos;
 	const Common::String _datafilePath;
 	const GameVersion *_gameVersion;
 	uint32 _resourceEntries;





More information about the Scummvm-git-logs mailing list