[Scummvm-cvs-logs] SF.net SVN: scummvm: [21089] scummvm/trunk/engines/scumm

kirben at users.sourceforge.net kirben at users.sourceforge.net
Sun Mar 5 16:30:01 CET 2006


Revision: 21089
Author:   kirben
Date:     2006-03-05 00:22:39 -0800 (Sun, 05 Mar 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm?rev=21089&view=rev

Log Message:
-----------
Add German verbs and more work on input in C64 maniac

Modified Paths:
--------------
    scummvm/trunk/engines/scumm/intern.h
    scummvm/trunk/engines/scumm/script_c64.cpp
    scummvm/trunk/engines/scumm/scumm.cpp
    scummvm/trunk/engines/scumm/scumm.h
    scummvm/trunk/engines/scumm/vars.cpp
    scummvm/trunk/engines/scumm/verbs.cpp
Modified: scummvm/trunk/engines/scumm/intern.h
===================================================================
--- scummvm/trunk/engines/scumm/intern.h	2006-03-05 06:08:16 UTC (rev 21088)
+++ scummvm/trunk/engines/scumm/intern.h	2006-03-05 08:22:39 UTC (rev 21089)
@@ -300,6 +300,8 @@
 	void initV2MouseOver();
 	void initNESMouseOver();
 
+	void runObject(int obj, int entry);
+
 	/* Version 2 script opcodes */
 	void o2_actorFromPos();
 	void o2_actorOps();
@@ -397,7 +399,6 @@
 
 	const OpcodeEntryC64 *_opcodesC64;
 
-	int _activeVerb;
 	int _currentMode;
 public:
 	ScummEngine_c64(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16], SubstResFileNames subst);
@@ -478,6 +479,7 @@
 	void o_notEqualZero();
 	void o_equalZero();
 	void o_jumpRelative();
+	void o_setOwnerOf();
 };
 
 class ScummEngine_v6 : public ScummEngine {

Modified: scummvm/trunk/engines/scumm/script_c64.cpp
===================================================================
--- scummvm/trunk/engines/scumm/script_c64.cpp	2006-03-05 06:08:16 UTC (rev 21088)
+++ scummvm/trunk/engines/scumm/script_c64.cpp	2006-03-05 08:22:39 UTC (rev 21089)
@@ -87,7 +87,7 @@
 		OPCODE(o2_getActorY),
 		/* 28 */
 		OPCODE(o_equalZero),
-		OPCODE(o2_setOwnerOf),
+		OPCODE(o_setOwnerOf),
 		OPCODE(o2_delay),
 		OPCODE(o_setActorBitVar),
 		/* 2C */
@@ -167,7 +167,7 @@
 		OPCODE(o5_getActorFacing),
 		/* 68 */
 		OPCODE(o5_isScriptRunning),
-		OPCODE(o2_setOwnerOf),
+		OPCODE(o_setOwnerOf),
 		OPCODE(o_stopCurrentScript),
 		OPCODE(o_setActorBitVar),
 		/* 6C */
@@ -247,7 +247,7 @@
 		OPCODE(o2_getActorY),
 		/* A8 */
 		OPCODE(o_notEqualZero),
-		OPCODE(o2_setOwnerOf),
+		OPCODE(o_setOwnerOf),
 		OPCODE(o_stopCurrentScript),
 		OPCODE(o_setActorBitVar),
 		/* AC */
@@ -327,7 +327,7 @@
 		OPCODE(o5_getActorFacing),
 		/* E8 */
 		OPCODE(o5_isScriptRunning),
-		OPCODE(o2_setOwnerOf),
+		OPCODE(o_setOwnerOf),
 		OPCODE(o_stopCurrentScript),
 		OPCODE(o_setActorBitVar),
 		/* EC */
@@ -984,10 +984,22 @@
 	_scriptPointer += offset;
 }
 
+void ScummEngine_c64::o_setOwnerOf() {
+	int obj, owner;
+
+	obj = getVarOrDirectWord(PARAM_1);
+	owner = getVarOrDirectByte(PARAM_2);
+
+	if (obj == 0)
+		obj = _activeInventory;
+
+	setOwnerOf(obj, owner);
+}
+
 void ScummEngine_c64::resetSentence() {
-	_activeVerb = 0;
 	_activeInventory = 0;
 	_activeObject = 0;
+	_activeVerb = 13;
 }
 
 #undef PARAM_1

Modified: scummvm/trunk/engines/scumm/scumm.cpp
===================================================================
--- scummvm/trunk/engines/scumm/scumm.cpp	2006-03-05 06:08:16 UTC (rev 21088)
+++ scummvm/trunk/engines/scumm/scumm.cpp	2006-03-05 08:22:39 UTC (rev 21089)
@@ -572,6 +572,7 @@
 	_userState = 0;
 	_activeInventory = 0;
 	_activeObject = 0;
+	_activeVerb = 0;
 	_resourceHeaderSize = 8;
 	_saveLoadFlag = 0;
 	_saveLoadSlot = 0;
@@ -1005,7 +1006,6 @@
 ScummEngine_c64::ScummEngine_c64(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16], SubstResFileNames subst)
 	: ScummEngine_v2(detector, syst, gs, md5sum, subst) {
 
-	_activeVerb = 0;
 	_currentMode = 0;
 }
 

Modified: scummvm/trunk/engines/scumm/scumm.h
===================================================================
--- scummvm/trunk/engines/scumm/scumm.h	2006-03-05 06:08:16 UTC (rev 21088)
+++ scummvm/trunk/engines/scumm/scumm.h	2006-03-05 08:22:39 UTC (rev 21089)
@@ -883,6 +883,7 @@
 
 	int _activeInventory;
 	int _activeObject;
+	int _activeVerb;
 
 	virtual void handleMouseOver(bool updateInventory);
 	virtual void redrawVerbs();

Modified: scummvm/trunk/engines/scumm/vars.cpp
===================================================================
--- scummvm/trunk/engines/scumm/vars.cpp	2006-03-05 06:08:16 UTC (rev 21088)
+++ scummvm/trunk/engines/scumm/vars.cpp	2006-03-05 08:22:39 UTC (rev 21089)
@@ -109,12 +109,14 @@
 }
 
 void ScummEngine_c64::setupScummVars() {
-	// TODO
 	VAR_EGO = 0;
 	VAR_CAMERA_POS_X = 2;
 	VAR_HAVE_MSG = 3;
 	VAR_ROOM = 4;
+	//VAR_ACTIVE_ACTOR = 5;
 	VAR_OVERRIDE = 6;
+	//VAR_IS_SOUND_RUNNING = 8;
+	//VAR_ACTIVE_VERB = 9;
 	VAR_CHARCOUNT = 10;
 
 	// FIXME: Should be removed
@@ -544,6 +546,8 @@
 #endif
 
 void ScummEngine_c64::initScummVars() {
+	_activeInventory = 0;
+	_activeObject = 0;
 	_activeVerb = 13;
 
 	VAR(VAR_EGO) = 3;

Modified: scummvm/trunk/engines/scumm/verbs.cpp
===================================================================
--- scummvm/trunk/engines/scumm/verbs.cpp	2006-03-05 06:08:16 UTC (rev 21088)
+++ scummvm/trunk/engines/scumm/verbs.cpp	2006-03-05 08:22:39 UTC (rev 21089)
@@ -46,8 +46,7 @@
 	const char *name;
 };
 
-static const VerbSettings C64VerbTable[] =
-{
+static const VerbSettings C64VerbTable_English[] = {
 	{ 1,  8, 0,   0, "Open"},
 	{ 2,  8, 1,   0, "Close"},
 	{ 3,  0, 2,   4, "Give"},
@@ -65,6 +64,24 @@
 	{15, 15, 2,   0, "What Is"}
 };
 
+static const VerbSettings C64VerbTable_German[] = {
+	{ 1,  6, 0,   0, "Zieh"},
+	{ 2,  6, 1,   0, "Druck"},
+	{ 3,  0, 2,   4, "Lies"},
+	{ 4, 29, 0,   0, "Schliess au"},
+	{ 5, 29, 1,   0, "Schalt ein"},
+	{ 6, 29, 2,   2, "Schalt aus"},
+	{ 7, 20, 0,   0, "Person"},
+	{ 8, 20, 1,   2, "Schliess"},
+	{ 9,  0, 0,   0, "Nimm"},
+	{10,  0, 1,   0, "Gib"},
+	{11, 20, 2, 255, "Reparier"},
+	{12,  6, 2,   0, "Offne"},
+	{13, 12, 0,   0, "Gehe zu"},
+	{14, 12, 1,   0, "Was ist"},
+	{15, 12, 2,   0, "Benutz"}
+};
+
 void ScummEngine_c64::initC64Verbs() {
 	VirtScreen *virt = &virtscr[kVerbVirtScreen];
 	VerbSlot *vs;
@@ -72,7 +89,7 @@
 
 	for (i = 1; i < 16; i++) {
 		vs = &_verbs[i];
-		vs->verbid = C64VerbTable[i - 1].id;
+		vs->verbid = C64VerbTable_English[i - 1].id;
 		vs->color = 5;
 		vs->hicolor = 7;
 		vs->dimcolor = 11;
@@ -83,12 +100,17 @@
 		vs->key = 0;
 		vs->center = 0;
 		vs->imgindex = 0;
-		vs->prep = C64VerbTable[i - 1].prep;
+		vs->prep = C64VerbTable_English[i - 1].prep;
 
-		vs->curRect.left = C64VerbTable[i - 1].x_pos * 8;
-		vs->curRect.top = C64VerbTable[i - 1].y_pos * 8 + virt->topline + 8;
-
-		loadPtrToResource(rtVerb, i, (const byte*)C64VerbTable[i - 1].name);
+		if (_language == Common::DE_DEU) {
+			vs->curRect.left = C64VerbTable_German[i - 1].x_pos * 8;
+			vs->curRect.top = C64VerbTable_German[i - 1].y_pos * 8 + virt->topline + 8;
+			loadPtrToResource(rtVerb, i, (const byte*)C64VerbTable_German[i - 1].name);
+		} else {
+			vs->curRect.left = C64VerbTable_English[i - 1].x_pos * 8;
+			vs->curRect.top = C64VerbTable_English[i - 1].y_pos * 8 + virt->topline + 8;
+			loadPtrToResource(rtVerb, i, (const byte*)C64VerbTable_English[i - 1].name);
+		}
 	}
 }
 
@@ -308,10 +330,19 @@
 
 	object = findInventory(_scummVars[VAR_EGO], object + 1 + _inventoryOffset);
 
-	if (_game.platform == Common::kPlatformC64 && _game.id == GID_MANIAC) {
-		_activeInventory = object;
-	} else if (object > 0) {
-		runInputScript(3, object, 0);
+	if (object > 0) {
+		if (_game.platform == Common::kPlatformC64 && _game.id == GID_MANIAC) {
+			if (_activeInventory != object) {
+				_activeInventory = object;
+			} else if (_activeVerb != 3 && _activeVerb != 13) {
+				if (_activeObject)
+					runObject(_activeObject, _activeVerb);
+				else
+					runObject(_activeInventory, _activeVerb);
+			}
+		} else {
+			runInputScript(3, object, 0);
+		}
 	}
 }
 
@@ -503,6 +534,19 @@
 	}
 }
 
+void ScummEngine_v2::runObject(int obj, int entry) {
+	if (getVerbEntrypoint(obj, entry) != 0) {
+		runObjectScript(obj, entry, false, false, NULL);
+	} else {
+		VAR(9) = entry;
+		runScript(3, 0, 0, 0);
+	}
+
+	_activeInventory = 0;
+	_activeObject = 0;
+	_activeVerb = 13;
+}
+
 void ScummEngine_c64::checkExecVerbs() {
 	Actor *a;
 	VirtScreen *zone = findVirtScreen(_mouse.y);
@@ -526,32 +570,35 @@
 				return;
 			}
 
-			int object = findObject(_virtualMouse.x, _virtualMouse.y);
-			if (object) {
-				_activeObject = object;
+			int act = getActorFromPos(_virtualMouse.x, _virtualMouse.y);
+			int obj = findObject(_virtualMouse.x, _virtualMouse.y);
+			if (act != 0 && _activeVerb == 3 && _activeInventory != 0) {
+				VAR(5) = act;
+				runObject(_activeInventory, _activeVerb);
+			} else if (obj) {
+				if (_currentMode == 3 && _activeVerb != 13 && obj != _activeObject) {
+					_activeObject = obj;
+					return;
+				}
+
+				_activeObject = obj;
 				if (_currentMode == 3) {
 					int x, y, dir;
 					a = derefActor(VAR(VAR_EGO), "checkExecVerbs");
-					getObjectXYPos(object, x, y, dir);
+					getObjectXYPos(obj, x, y, dir);
 					a->startWalkActor(x, y, dir);
 				}
 
-				int tmp = (_currentMode == 3) ? _activeVerb : 15;
-				if (getVerbEntrypoint(object, tmp) != 0) {
-					runObjectScript(object, tmp, false, false, NULL);
-				} else if (_activeVerb != 13 && _activeVerb != 15) {
-					VAR(9) = _activeVerb;
-					runScript(3, 0, 0, 0);
-				}
-			} else {
-				_activeInventory = 0;
-				_activeObject = 0;
-				_activeVerb = 13;
-				if (zone->number == kMainVirtScreen) {
-					a = derefActor(VAR(VAR_EGO), "checkExecVerbs");
-					a->startWalkActor(_virtualMouse.x, _virtualMouse.y, -1);
-				}
+				int entry = (_currentMode == 3) ? _activeVerb : 15;
+				runObject(_activeObject, entry);
+			} else if (zone->number == kMainVirtScreen) {
+				a = derefActor(VAR(VAR_EGO), "checkExecVerbs");
+				a->startWalkActor(_virtualMouse.x, _virtualMouse.y, -1);
 			}
+
+			_activeInventory = 0;
+			_activeObject = 0;
+			_activeVerb = 13;
 		}
 	}
 }







More information about the Scummvm-git-logs mailing list