[Scummvm-cvs-logs] SF.net SVN: scummvm: [24501] scummvm/trunk/engines/agos

kirben at users.sourceforge.net kirben at users.sourceforge.net
Wed Oct 25 15:38:48 CEST 2006


Revision: 24501
          http://svn.sourceforge.net/scummvm/?rev=24501&view=rev
Author:   kirben
Date:     2006-10-25 06:38:35 -0700 (Wed, 25 Oct 2006)

Log Message:
-----------
Cleanup

Modified Paths:
--------------
    scummvm/trunk/engines/agos/agos.h
    scummvm/trunk/engines/agos/icons.cpp
    scummvm/trunk/engines/agos/script.cpp
    scummvm/trunk/engines/agos/script_e1.cpp
    scummvm/trunk/engines/agos/script_e2.cpp
    scummvm/trunk/engines/agos/script_ff.cpp
    scummvm/trunk/engines/agos/script_pp.cpp
    scummvm/trunk/engines/agos/script_s1.cpp
    scummvm/trunk/engines/agos/script_s2.cpp
    scummvm/trunk/engines/agos/script_ww.cpp

Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/agos.h	2006-10-25 13:38:35 UTC (rev 24501)
@@ -1021,9 +1021,6 @@
 	void o_print();
 	void o_message();
 	void o_msg();
-	void o_addTextBox();
-	void o_setShortText();
-	void o_setLongText();
 	void o_end();
 	void o_done();
 	void o_process();
@@ -1081,24 +1078,8 @@
 	void o_getOValue();
 	void o_setOValue();
 	void o_ink();
-	void o_screenTextBox();
-	void o_screenTextMsg();
-	void o_playEffect();
-	void o_getDollar2();
-	void o_isAdjNoun();
-	void o_b2Set();
-	void o_b2Clear();
-	void o_b2Zero();
-	void o_b2NotZero();
-	void o_lockZones();
-	void o_unlockZones();
-	void o_getPathPosn();
-	void o_scnTxtLongText();
-	void o_mouseOn();
-	void o_unloadZone();
-	void o_unfreezeZones();
 
-	// Opcodes, Elvira 1 only
+	// Opcodes, Elvira 1
 	void oe1_present();
 	void oe1_notPresent();
 	void oe1_worn();
@@ -1125,6 +1106,7 @@
 	void oe1_pName();
 	void oe1_pcName();
 	void oe1_cFlag();
+	void oe1_rescan();
 	void oe1_setUserItem();
 	void oe1_getUserItem();
 	void oe1_whereTo();
@@ -1134,6 +1116,8 @@
 	void oe1_clearUserItem();
 	void oe1_findMaster();
 	void oe1_nextMaster();
+	void oe1_animate();
+	void oe1_stopAnimate();
 	void oe1_menu();
 	void oe1_enableInput();
 	void oe1_setTime();
@@ -1149,7 +1133,7 @@
 	void oe1_printPlayerHit();
 	void oe1_printMonsterHit();
 
-	// Opcodes, Elvira 2 only
+	// Opcodes, Elvira 2
 	void oe2_moveDirn();
 	void oe2_doClass();
 	void oe2_pObj();
@@ -1170,12 +1154,21 @@
 	void oe2_ifExitOpen();
 	void oe2_ifExitClosed();
 	void oe2_ifExitLocked();
+	void oe2_getDollar2();
 	void oe2_unk177();
 	void oe2_unk178();
+	void oe2_isAdjNoun();
+	void oe2_b2Set();
+	void oe2_b2Clear();
+	void oe2_b2Zero();
+	void oe2_b2NotZero();
 
-	// Opcodes, Waxworks only
+	// Opcodes, Waxworks
 	void oww_moveDirn();
 	void oww_goto();
+	void oww_addTextBox();
+	void oww_setShortText();
+	void oww_setLongText();
 	void oww_whereTo();
 	void oww_menu();
 	void oww_textMenu();
@@ -1185,82 +1178,90 @@
 	void oww_boxLongText();
 	void oww_printBox();
 	void oww_boxPObj();
+	void oww_lockZones();
+	void oww_unlockZones();
 
-	// Opcodes, Simon 1 only
-	void o1_printLongText();
-	void o1_rescan();
-	void o1_animate();
-	void o1_stopAnimate();
-	void o1_playTune();
-	void o1_screenTextPObj();
-	void o1_mouseOff();
-	void o1_loadBeard();
-	void o1_unloadBeard();
-	void o1_loadStrings();
-	void o1_specialFade();
+	// Opcodes, Simon 1
+	void oww_printLongText();
+	void os1_animate();
+	void os1_playTune();
+	void os1_screenTextBox();
+	void os1_screenTextMsg();
+	void os1_playEffect();
+	void os1_screenTextPObj();
+	void os1_getPathPosn();
+	void os1_scnTxtLongText();
+	void os1_mouseOn();
+	void os1_mouseOff();
+	void os1_loadBeard();
+	void os1_unloadBeard();
+	void os1_unloadZone();
+	void os1_loadStrings();
+	void os1_unfreezeZones();
+	void os1_specialFade();
 
-	// Opcodes, Simon 2 and later
-	void o2_printLongText();
-	void o2_rescan();
-	void o2_animate();
-	void o2_stopAnimate();
-	void o2_playTune();
-	void o2_screenTextPObj();
-	void o2_mouseOff();
-	void o2_isShortText();
-	void o2_clearMarks();
-	void o2_waitMark();
+	// Opcodes, Simon 2
+	void os2_printLongText();
+	void os2_rescan();
+	void os2_animate();
+	void os2_stopAnimate();
+	void os2_playTune();
+	void os2_screenTextPObj();
+	void os2_mouseOff();
+	void os2_isShortText();
+	void os2_clearMarks();
+	void os2_waitMark();
 
-	// Opcodes, Feeble Files only
-	void o3_chance();
-	void o3_jumpOut();
-	void o3_addTextBox();
-	void o3_printLongText();
-	void o3_addBox();
-	void o3_oracleTextDown();
-	void o3_oracleTextUp();
-	void o3_ifTime();
-	void o3_setTime();
-	void o3_saveUserGame();
-	void o3_loadUserGame();
-	void o3_listSaveGames();
-	void o3_checkCD();
-	void o3_screenTextBox();
-	void o3_isAdjNoun();
-	void o3_hyperLinkOn();
-	void o3_hyperLinkOff();
-	void o3_checkPaths();
-	void o3_screenTextPObj();
-	void o3_mouseOff();
-	void o3_loadVideo();
-	void o3_playVideo();
-	void o3_centreScroll();
-	void o3_resetPVCount();
-	void o3_setPathValues();
-	void o3_stopClock();
-	void o3_restartClock();
-	void o3_setColour();
-	void o3_b3Set();
-	void o3_b3Clear();
-	void o3_b3Zero();
-	void o3_b3NotZero();
+	// Opcodes, Feeble Files
+	void off_chance();
+	void off_jumpOut();
+	void off_addTextBox();
+	void off_printLongText();
+	void off_addBox();
+	void off_oracleTextDown();
+	void off_oracleTextUp();
+	void off_ifTime();
+	void off_setTime();
+	void off_saveUserGame();
+	void off_loadUserGame();
+	void off_listSaveGames();
+	void off_checkCD();
+	void off_screenTextBox();
+	void off_isAdjNoun();
+	void off_hyperLinkOn();
+	void off_hyperLinkOff();
+	void off_checkPaths();
+	void off_screenTextPObj();
+	void off_mouseOff();
+	void off_loadVideo();
+	void off_playVideo();
+	void off_centreScroll();
+	void off_resetPVCount();
+	void off_setPathValues();
+	void off_stopClock();
+	void off_restartClock();
+	void off_setColour();
+	void off_b3Set();
+	void off_b3Clear();
+	void off_b3Zero();
+	void off_b3NotZero();
 
-	// Opcodes, Puzzle Pack only
-	void o4_iconifyWindow();
-	void o4_restoreOopsPosition();
-	void o4_loadMouseImage();
-	void o4_message();
-	void o4_setShortText();
-	void o4_loadHiScores();
-	void o4_checkHiScores();
-	void o4_sync();
-	void o4_saveUserGame();
-	void o4_loadUserGame();
-	void o4_saveOopsPosition();
-	void o4_resetGameTime();
-	void o4_resetPVCount();
-	void o4_setPathValues();
-	void o4_restartClock();
+	// Opcodes, Puzzle Pack
+	void opp_iconifyWindow();
+	void opp_restoreOopsPosition();
+	void opp_loadMouseImage();
+	void opp_message();
+	void opp_setShortText();
+	void opp_loadHiScores();
+	void opp_checkHiScores();
+	void opp_sync();
+	void opp_saveUserGame();
+	void opp_loadUserGame();
+	void opp_saveOopsPosition();
+	void opp_resetGameTime();
+	void opp_resetPVCount();
+	void opp_setPathValues();
+	void opp_restartClock();
 
 protected:
 	void drawImages(VC10_state *state);

Modified: scummvm/trunk/engines/agos/icons.cpp
===================================================================
--- scummvm/trunk/engines/agos/icons.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/icons.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -58,7 +58,7 @@
 		error("Out of icon memory");
 
 	memcpy(_iconFilePtr, src, 43 * 336);
-	o_unfreezeZones();
+	os1_unfreezeZones();
 }
 
 // Thanks to Stuart Caie for providing the original

Modified: scummvm/trunk/engines/agos/script.cpp
===================================================================
--- scummvm/trunk/engines/agos/script.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -95,8 +95,6 @@
 	op[80] = &AGOSEngine::o_is;
 	op[82] = &AGOSEngine::o_debug;
 	op[87] = &AGOSEngine::o_comment;
-	op[88] = &AGOSEngine::o_haltAnimation;
-	op[89] = &AGOSEngine::o_restartAnimation;
 	op[90] = &AGOSEngine::o_getParent;
 	op[91] = &AGOSEngine::o_getNext;
 	op[92] = &AGOSEngine::o_getChildren;
@@ -516,44 +514,6 @@
 	showMessageFormat("%s", getStringPtrByID(getNextStringID()));
 }
 
-void AGOSEngine::o_addTextBox() {
-	// 65: add hit area
-	uint id = getVarOrWord();
-	uint x = getVarOrWord();
-	uint y = getVarOrWord();
-	uint w = getVarOrWord();
-	uint h = getVarOrWord();
-	uint number = getVarOrByte();
-	if (number < _numTextBoxes)
-		defineBox(id, x, y, w, h, (number << 8) + 129, 208, _dummyItem2);
-}
-
-void AGOSEngine::o_setShortText() {
-	// 66: set item name
-	uint var = getVarOrByte();
-	uint stringId = getNextStringID();
-	if (var < _numTextBoxes) {
-		_shortText[var] = stringId;
-	}
-}
-
-void AGOSEngine::o_setLongText() {
-	// 67: set item description
-	uint var = getVarOrByte();
-	uint stringId = getNextStringID();
-	if (getFeatures() & GF_TALKIE) {
-		uint speechId = getNextWord();
-		if (var < _numTextBoxes) {
-			_longText[var] = stringId;
-			_longSound[var] = speechId;
-		}
-	} else {
-		if (var < _numTextBoxes) {
-			_longText[var] = stringId;
-		}
-	}
-}
-
 void AGOSEngine::o_end() {
 	// 68: exit interpreter
 	shutdown();
@@ -1084,218 +1044,6 @@
 	setTextColor(getVarOrByte());
 }
 
-void AGOSEngine::o_screenTextBox() {
-	// 161: setup text
-	TextLocation *tl = getTextLocation(getVarOrByte());
-
-	tl->x = getVarOrWord();
-	tl->y = getVarOrByte();
-	tl->width = getVarOrWord();
-}
-	
-void AGOSEngine::o_screenTextMsg() {
-	// 162: print string
-	uint vgaSpriteId = getVarOrByte();
-	uint color = getVarOrByte();
-	uint stringId = getNextStringID();
-	const byte *string_ptr = NULL;
-	uint speechId = 0;
-	TextLocation *tl;
-
-	if (stringId != 0xFFFF)
-		string_ptr = getStringPtrByID(stringId);
-
-	if (getFeatures() & GF_TALKIE) {
-		if (getGameType() == GType_FF || getGameType() == GType_PP)
-			speechId = (uint16)getVarOrWord();
-		else
-			speechId = (uint16)getNextWord();
-	}
-
-	if (getGameType() == GType_FF || getGameType() == GType_PP)
-		vgaSpriteId = 1;
-
-	tl = getTextLocation(vgaSpriteId);
-	if (_speech && speechId != 0)
-		playSpeech(speechId, vgaSpriteId);
-	if (((getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE)) || getGameType() == GType_FF) &&
-		speechId == 0) {
-		stopAnimateSimon2(2, vgaSpriteId + 2);
-	}
-
-	if (string_ptr != NULL && (speechId == 0 || _subtitles))
-		printScreenText(vgaSpriteId, color, (const char *)string_ptr, tl->x, tl->y, tl->width);
-
-}
-
-void AGOSEngine::o_playEffect() {
-	// 163: play sound
-	uint soundId = getVarOrWord();
-
-	if (getGameId() == GID_SIMON1DOS)
-		playSting(soundId);
-	else
-		_sound->playEffects(soundId);
-}
-
-void AGOSEngine::o_getDollar2() {
-	// 164
-	_showPreposition = true;
-
-	setup_cond_c_helper();
-
-	_objectItem = _hitAreaObjectItem;
-
-	if (_objectItem == _dummyItem2)
-		_objectItem = me();
-
-	if (_objectItem == _dummyItem3)
-		_objectItem = derefItem(me()->parent);
-
-	if (_objectItem != NULL) {
-		_scriptNoun2 = _objectItem->noun;
-		_scriptAdj2 = _objectItem->adjective;
-	} else {
-		_scriptNoun2 = -1;
-		_scriptAdj2 = -1;
-	}
-
-	_showPreposition = false;
-}
-
-void AGOSEngine::o_isAdjNoun() {
-	// 165: item unk1 unk2 is
-	Item *item = getNextItemPtr();
-	int16 a = getNextWord(), b = getNextWord();
-	setScriptCondition(item->adjective == a && item->noun == b);
-}
-
-void AGOSEngine::o_b2Set() {
-	// 166: set bit2
-	uint bit = getVarOrByte();
-	_bitArrayTwo[bit / 16] |= (1 << (bit & 15));
-}
-
-void AGOSEngine::o_b2Clear() {
-	// 167: clear bit2
-	uint bit = getVarOrByte();
-	_bitArrayTwo[bit / 16] &= ~(1 << (bit & 15));
-}
-
-void AGOSEngine::o_b2Zero() {
-	// 168: is bit2 clear
-	uint bit = getVarOrByte();
-	setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) == 0);
-}
-
-void AGOSEngine::o_b2NotZero() {
-	// 169: is bit2 set
-	uint bit = getVarOrByte();
-	setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) != 0);
-}
-
-void AGOSEngine::o_lockZones() {
-	// 175: vga pointer op 1
-	_vgaMemBase = _vgaMemPtr;
-}
-
-void AGOSEngine::o_unlockZones() {
-	// 176: vga pointer op 2
-	_vgaMemPtr = _vgaFrozenBase;
-	_vgaMemBase = _vgaFrozenBase;
-}
-
-void AGOSEngine::o_getPathPosn() {
-	// 178: path find
-	uint x = getVarOrWord();
-	uint y = getVarOrWord();
-	uint var_1 = getVarOrByte();
-	uint var_2 = getVarOrByte();
-
-	const uint16 *p;
-	uint i, j;
-	uint prev_i;
-	uint x_diff, y_diff;
-	uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF;
-	uint maxPath = (getGameType() == GType_FF || getGameType() == GType_PP) ? 100 : 20;
-
-	if (getGameType() == GType_FF || getGameType() == GType_PP) {
-		x += _scrollX;
-		y += _scrollY;
-	} else if (getGameType() == GType_SIMON2) {
-		x += _scrollX * 8;
-	}
-
-	int end = (getGameType() == GType_FF) ? 9999 : 999;
-	prev_i = maxPath + 1 - readVariable(12);
-	for (i = maxPath; i != 0; --i) {
-		p = (const uint16 *)_pathFindArray[maxPath - i];
-		if (!p)
-			continue;
-		for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {
-			x_diff = ABS((int16)(readUint16Wrapper(&p[0]) - x));
-			y_diff = ABS((int16)(readUint16Wrapper(&p[1]) - 12 - y));
-
-			if (x_diff < y_diff) {
-				x_diff /= 4;
-				y_diff *= 4;
-			}
-			x_diff += y_diff /= 4;
-
-			if (x_diff < best_dist || x_diff == best_dist && prev_i == i) {
-				best_dist = x_diff;
-				best_i = maxPath + 1 - i;
-				best_j = j;
-			}
-		}
-	}
-
-	writeVariable(var_1, best_i);
-	writeVariable(var_2, best_j);
-}
-
-void AGOSEngine::o_scnTxtLongText() {
-	// 179: conversation responses and room descriptions
-	uint vgaSpriteId = getVarOrByte();
-	uint color = getVarOrByte();
-	uint stringId = getVarOrByte();
-	uint speechId = 0;
-	TextLocation *tl;
-
-	const char *string_ptr = (const char *)getStringPtrByID(_longText[stringId]);
-	if (getFeatures() & GF_TALKIE)
-		speechId = _longSound[stringId];
-
-	if (getGameType() == GType_FF || getGameType() == GType_PP)
-		vgaSpriteId = 1;
-	tl = getTextLocation(vgaSpriteId);
-
-	if (_speech && speechId != 0)
-		playSpeech(speechId, vgaSpriteId);
-	if (string_ptr != NULL && _subtitles)
-		printScreenText(vgaSpriteId, color, string_ptr, tl->x, tl->y, tl->width);
-}
-
-void AGOSEngine::o_mouseOn() {
-	// 180: force mouseOn
-	scriptMouseOn();
-}
-
-void AGOSEngine::o_unloadZone() {
-	// 184: clear vgapointer entry
-	uint a = getVarOrWord();
-	VgaPointersEntry *vpe = &_vgaBufferPointers[a];
-
-	vpe->sfxFile = NULL;
-	vpe->vgaFile1 = NULL;
-	vpe->vgaFile2 = NULL;
-}
-
-void AGOSEngine::o_unfreezeZones() {
-	// 186: vga pointer op 3
-	unfreezeBottom();
-}
-
 // -----------------------------------------------------------------------
 
 byte AGOSEngine::getByte() {

Modified: scummvm/trunk/engines/agos/script_e1.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_e1.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script_e1.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -130,7 +130,7 @@
 
 	op[162] = &AGOSEngine::oe1_cFlag;
 
-	op[164] = &AGOSEngine::o1_rescan;
+	op[164] = &AGOSEngine::oe1_rescan;
 
 	op[176] = &AGOSEngine::oe1_setUserItem;
 	op[177] = &AGOSEngine::oe1_getUserItem;
@@ -153,8 +153,8 @@
 
 	op[224] = &AGOSEngine::o_picture;
 	op[225] = &AGOSEngine::o_loadZone;
-	op[226] = &AGOSEngine::o1_animate;
-	op[227] = &AGOSEngine::o1_stopAnimate;
+	op[226] = &AGOSEngine::oe1_animate;
+	op[227] = &AGOSEngine::oe1_stopAnimate;
 	op[228] = &AGOSEngine::o_killAnimate;
 	op[229] = &AGOSEngine::o_defWindow;
 	op[230] = &AGOSEngine::o_window;
@@ -187,7 +187,7 @@
 	op[260] = &AGOSEngine::oe1_ifTime;
 	op[261] = &AGOSEngine::o_here;
 	op[262] = &AGOSEngine::o_doClassIcons;
-	op[263] = &AGOSEngine::o1_playTune;
+	op[263] = &AGOSEngine::os1_playTune;
 	op[266] = &AGOSEngine::o_setAdjNoun;
 	op[267] = &AGOSEngine::oe1_zoneDisk;
 	op[268] = &AGOSEngine::o_saveUserGame;
@@ -406,6 +406,11 @@
 		setScriptCondition((c->flags & (1 << bit)) != 0);
 }
 
+void AGOSEngine::oe1_rescan() {
+	// 164: restart subroutine
+	setScriptReturn(-10);
+}
+
 void AGOSEngine::oe1_setUserItem() {
 	// 176: set user item
 	Item *i = getNextItemPtr();
@@ -508,6 +513,28 @@
 		_objectItem = nextMaster(item, ad, no);
 }
 
+void AGOSEngine::oe1_animate() {
+	// 226: animate
+	uint vgaSpriteId = getVarOrWord();
+	uint windowNum = getVarOrByte();
+	uint x = getVarOrWord();
+	uint y = getVarOrWord();
+	uint palette = getVarOrWord();
+
+	if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && vgaSpriteId >= 400) {
+		_lastVgaWaitFor = 0;
+	}
+
+	_lockWord |= 0x40;
+	animate(windowNum, vgaSpriteId / 100, vgaSpriteId, x, y, palette);
+	_lockWord &= ~0x40;
+}
+
+void AGOSEngine::oe1_stopAnimate() {
+	// 227: stop animate
+	stopAnimateSimon1(getVarOrWord());
+}
+
 void AGOSEngine::oe1_menu() {
 	// 233: agos menu
 	uint b = getVarOrWord();

Modified: scummvm/trunk/engines/agos/script_e2.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_e2.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script_e2.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -46,16 +46,16 @@
 	op[73] = &AGOSEngine::oe2_pObj;
 	op[74] = &AGOSEngine::oe1_pName;
 	op[75] = &AGOSEngine::oe1_pcName;
-	op[83] = &AGOSEngine::o1_rescan;
+	op[83] = &AGOSEngine::oe1_rescan;
 	op[89] = &AGOSEngine::oe1_loadGame;
 	op[94] = &AGOSEngine::oe1_findMaster;
 	op[95] = &AGOSEngine::oe1_nextMaster;
-	op[98] = &AGOSEngine::o1_animate;
-	op[99] = &AGOSEngine::o1_stopAnimate;
+	op[98] = &AGOSEngine::oe1_animate;
+	op[99] = &AGOSEngine::oe1_stopAnimate;
 	op[113] = &AGOSEngine::oe2_drawItem;
 	op[123] = &AGOSEngine::oe1_setTime;
 	op[124] = &AGOSEngine::oe1_ifTime;
-	op[127] = &AGOSEngine::o1_playTune;
+	op[127] = &AGOSEngine::os1_playTune;
 	op[144] = &AGOSEngine::oe2_setDoorOpen;
 	op[145] = &AGOSEngine::oe2_setDoorClosed;
 	op[146] = &AGOSEngine::oe2_setDoorLocked;
@@ -74,14 +74,14 @@
 	op[171] = &AGOSEngine::oe2_ifExitOpen;
 	op[172] = &AGOSEngine::oe2_ifExitClosed;
 	op[173] = &AGOSEngine::oe2_ifExitLocked;
-	op[175] = &AGOSEngine::o_getDollar2;
+	op[175] = &AGOSEngine::oe2_getDollar2;
 	op[177] = &AGOSEngine::oe2_unk177;
 	op[178] = &AGOSEngine::oe2_unk178;
-	op[179] = &AGOSEngine::o_isAdjNoun;
-	op[180] = &AGOSEngine::o_b2Set;
-	op[181] = &AGOSEngine::o_b2Clear;
-	op[182] = &AGOSEngine::o_b2Zero;
-	op[183] = &AGOSEngine::o_b2NotZero;
+	op[179] = &AGOSEngine::oe2_isAdjNoun;
+	op[180] = &AGOSEngine::oe2_b2Set;
+	op[181] = &AGOSEngine::oe2_b2Clear;
+	op[182] = &AGOSEngine::oe2_b2Zero;
+	op[183] = &AGOSEngine::oe2_b2NotZero;
 }
 
 // -----------------------------------------------------------------------
@@ -285,6 +285,31 @@
 	setScriptCondition(getExitState(i, n, d) == 3);
 }
 
+void AGOSEngine::oe2_getDollar2() {
+	// 175
+	_showPreposition = true;
+
+	setup_cond_c_helper();
+
+	_objectItem = _hitAreaObjectItem;
+
+	if (_objectItem == _dummyItem2)
+		_objectItem = me();
+
+	if (_objectItem == _dummyItem3)
+		_objectItem = derefItem(me()->parent);
+
+	if (_objectItem != NULL) {
+		_scriptNoun2 = _objectItem->noun;
+		_scriptAdj2 = _objectItem->adjective;
+	} else {
+		_scriptNoun2 = -1;
+		_scriptAdj2 = -1;
+	}
+
+	_showPreposition = false;
+}
+
 void AGOSEngine::oe2_unk177() {
 	// 177: set unknown vga event
 	uint a = getVarOrByte();
@@ -297,4 +322,35 @@
 	debug(0, "oe2_unk178: stub (%d)", a);
 }
 
+void AGOSEngine::oe2_isAdjNoun() {
+	// 179: item unk1 unk2 is
+	Item *item = getNextItemPtr();
+	int16 a = getNextWord(), b = getNextWord();
+	setScriptCondition(item->adjective == a && item->noun == b);
+}
+
+void AGOSEngine::oe2_b2Set() {
+	// 180: set bit2
+	uint bit = getVarOrByte();
+	_bitArrayTwo[bit / 16] |= (1 << (bit & 15));
+}
+
+void AGOSEngine::oe2_b2Clear() {
+	// 181: clear bit2
+	uint bit = getVarOrByte();
+	_bitArrayTwo[bit / 16] &= ~(1 << (bit & 15));
+}
+
+void AGOSEngine::oe2_b2Zero() {
+	// 182: is bit2 clear
+	uint bit = getVarOrByte();
+	setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) == 0);
+}
+
+void AGOSEngine::oe2_b2NotZero() {
+	// 183: is bit2 set
+	uint bit = getVarOrByte();
+	setScriptCondition((_bitArrayTwo[bit / 16] & (1 << (bit & 15))) != 0);
+}
+
 } // End of namespace AGOS

Modified: scummvm/trunk/engines/agos/script_ff.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_ff.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script_ff.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -33,66 +33,66 @@
 void AGOSEngine::setupFeebleOpcodes(OpcodeProc *op) {
 	setupCommonOpcodes(op);
 
-	op[23] = &AGOSEngine::o3_chance;
-	op[37] = &AGOSEngine::o3_jumpOut;
-	op[65] = &AGOSEngine::o3_addTextBox;
-	op[66] = &AGOSEngine::o_setShortText;
-	op[67] = &AGOSEngine::o_setLongText;
-	op[70] = &AGOSEngine::o3_printLongText;
-	op[83] = &AGOSEngine::o2_rescan;
-	op[98] = &AGOSEngine::o2_animate;
-	op[99] = &AGOSEngine::o2_stopAnimate;
-	op[107] = &AGOSEngine::o3_addBox;
-	op[122] = &AGOSEngine::o3_oracleTextDown;
-	op[123] = &AGOSEngine::o3_oracleTextUp;
-	op[124] = &AGOSEngine::o3_ifTime;
-	op[131] = &AGOSEngine::o3_setTime;
-	op[132] = &AGOSEngine::o3_saveUserGame;
-	op[133] = &AGOSEngine::o3_loadUserGame;
-	op[134] = &AGOSEngine::o3_listSaveGames;
-	op[135] = &AGOSEngine::o3_checkCD;
-	op[161] = &AGOSEngine::o3_screenTextBox;
-	op[162] = &AGOSEngine::o_screenTextMsg;
-	op[164] = &AGOSEngine::o_getDollar2;
-	op[165] = &AGOSEngine::o3_isAdjNoun;
-	op[166] = &AGOSEngine::o_b2Set;
-	op[167] = &AGOSEngine::o_b2Clear;
-	op[168] = &AGOSEngine::o_b2Zero;
-	op[169] = &AGOSEngine::o_b2NotZero;
-	op[171] = &AGOSEngine::o3_hyperLinkOn;
-	op[172] = &AGOSEngine::o3_hyperLinkOff;
-	op[173] = &AGOSEngine::o3_checkPaths;
-	op[175] = &AGOSEngine::o_lockZones;
-	op[176] = &AGOSEngine::o_unlockZones;
-	op[177] = &AGOSEngine::o3_screenTextPObj;
-	op[178] = &AGOSEngine::o_getPathPosn;
-	op[179] = &AGOSEngine::o_scnTxtLongText;
-	op[180] = &AGOSEngine::o_mouseOn;
-	op[181] = &AGOSEngine::o3_mouseOff;
-	op[182] = &AGOSEngine::o3_loadVideo;
-	op[183] = &AGOSEngine::o3_playVideo;
-	op[184] = &AGOSEngine::o_unloadZone;
-	op[186] = &AGOSEngine::o_unfreezeZones;
-	op[187] = &AGOSEngine::o3_centreScroll;
-	op[188] = &AGOSEngine::o2_isShortText;
-	op[189] = &AGOSEngine::o2_clearMarks;
-	op[190] = &AGOSEngine::o2_waitMark;
-	op[191] = &AGOSEngine::o3_resetPVCount;
-	op[192] = &AGOSEngine::o3_setPathValues;
-	op[193] = &AGOSEngine::o3_stopClock;
-	op[194] = &AGOSEngine::o3_restartClock;
-	op[195] = &AGOSEngine::o3_setColour;
-	op[196] = &AGOSEngine::o3_b3Set;
-	op[197] = &AGOSEngine::o3_b3Clear;
-	op[198] = &AGOSEngine::o3_b3Zero;
-	op[199] = &AGOSEngine::o3_b3NotZero;
+	op[23] = &AGOSEngine::off_chance;
+	op[37] = &AGOSEngine::off_jumpOut;
+	op[65] = &AGOSEngine::off_addTextBox;
+	op[66] = &AGOSEngine::oww_setShortText;
+	op[67] = &AGOSEngine::oww_setLongText;
+	op[70] = &AGOSEngine::off_printLongText;
+	op[83] = &AGOSEngine::os2_rescan;
+	op[98] = &AGOSEngine::os2_animate;
+	op[99] = &AGOSEngine::os2_stopAnimate;
+	op[107] = &AGOSEngine::off_addBox;
+	op[122] = &AGOSEngine::off_oracleTextDown;
+	op[123] = &AGOSEngine::off_oracleTextUp;
+	op[124] = &AGOSEngine::off_ifTime;
+	op[131] = &AGOSEngine::off_setTime;
+	op[132] = &AGOSEngine::off_saveUserGame;
+	op[133] = &AGOSEngine::off_loadUserGame;
+	op[134] = &AGOSEngine::off_listSaveGames;
+	op[135] = &AGOSEngine::off_checkCD;
+	op[161] = &AGOSEngine::off_screenTextBox;
+	op[162] = &AGOSEngine::os1_screenTextMsg;
+	op[164] = &AGOSEngine::oe2_getDollar2;
+	op[165] = &AGOSEngine::off_isAdjNoun;
+	op[166] = &AGOSEngine::oe2_b2Set;
+	op[167] = &AGOSEngine::oe2_b2Clear;
+	op[168] = &AGOSEngine::oe2_b2Zero;
+	op[169] = &AGOSEngine::oe2_b2NotZero;
+	op[171] = &AGOSEngine::off_hyperLinkOn;
+	op[172] = &AGOSEngine::off_hyperLinkOff;
+	op[173] = &AGOSEngine::off_checkPaths;
+	op[175] = &AGOSEngine::oww_lockZones;
+	op[176] = &AGOSEngine::oww_unlockZones;
+	op[177] = &AGOSEngine::off_screenTextPObj;
+	op[178] = &AGOSEngine::os1_getPathPosn;
+	op[179] = &AGOSEngine::os1_scnTxtLongText;
+	op[180] = &AGOSEngine::os1_mouseOn;
+	op[181] = &AGOSEngine::off_mouseOff;
+	op[182] = &AGOSEngine::off_loadVideo;
+	op[183] = &AGOSEngine::off_playVideo;
+	op[184] = &AGOSEngine::os1_unloadZone;
+	op[186] = &AGOSEngine::os1_unfreezeZones;
+	op[187] = &AGOSEngine::off_centreScroll;
+	op[188] = &AGOSEngine::os2_isShortText;
+	op[189] = &AGOSEngine::os2_clearMarks;
+	op[190] = &AGOSEngine::os2_waitMark;
+	op[191] = &AGOSEngine::off_resetPVCount;
+	op[192] = &AGOSEngine::off_setPathValues;
+	op[193] = &AGOSEngine::off_stopClock;
+	op[194] = &AGOSEngine::off_restartClock;
+	op[195] = &AGOSEngine::off_setColour;
+	op[196] = &AGOSEngine::off_b3Set;
+	op[197] = &AGOSEngine::off_b3Clear;
+	op[198] = &AGOSEngine::off_b3Zero;
+	op[199] = &AGOSEngine::off_b3NotZero;
 }
 
 // -----------------------------------------------------------------------
 // Feeble Files Opcodes
 // -----------------------------------------------------------------------
 
-void AGOSEngine::o3_chance() {
+void AGOSEngine::off_chance() {
 	// 23
 	uint a = getVarOrWord();
 
@@ -112,13 +112,13 @@
 		setScriptCondition(false);
 }
 
-void AGOSEngine::o3_jumpOut() {
+void AGOSEngine::off_jumpOut() {
 	// 37
 	getVarOrByte();
 	setScriptReturn(1);
 }
 
-void AGOSEngine::o3_addTextBox() {
+void AGOSEngine::off_addTextBox() {
 	// 65: add hit area
 	uint flags = kBFTextBox | kBFBoxItem;
 	uint id = getVarOrWord();
@@ -139,14 +139,14 @@
 		defineBox(id, x, y, w, h, flags + (num << 8), 208, _dummyItem2);
 }
 
-void AGOSEngine::o3_printLongText() {
+void AGOSEngine::off_printLongText() {
 	// 70: show string from array
 	int num = getVarOrByte();
 	const char *str = (const char *)getStringPtrByID(_longText[num]);
 	sendInteractText(num, "%d. %s\n", num, str);
 }
 
-void AGOSEngine::o3_addBox() {
+void AGOSEngine::off_addBox() {
 	// 107: add item hitarea
 	uint flags = 0;
 	uint id = getVarOrWord();
@@ -176,17 +176,17 @@
 	defineBox(id, x, y, w, h, flags, verb, item);
 }
 
-void AGOSEngine::o3_oracleTextDown() {
+void AGOSEngine::off_oracleTextDown() {
 	// 122: oracle text down
 	oracleTextDown();
 }
 
-void AGOSEngine::o3_oracleTextUp() {
+void AGOSEngine::off_oracleTextUp() {
 	// 123: oracle text up
 	oracleTextUp();
 }
 
-void AGOSEngine::o3_ifTime() {
+void AGOSEngine::off_ifTime() {
 	// 124: if time
 	time_t t;
 
@@ -200,13 +200,13 @@
 		setScriptCondition(false);
 }
 
-void AGOSEngine::o3_setTime() {
+void AGOSEngine::off_setTime() {
 	// 131
 	time(&_timeStore);
 	_timeStore -= _gameStoppedClock;
 }
 
-void AGOSEngine::o3_saveUserGame() {
+void AGOSEngine::off_saveUserGame() {
 	// 132: save game
 	_noOracleScroll = 0;
 	_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
@@ -214,17 +214,17 @@
 	_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
 }
 
-void AGOSEngine::o3_loadUserGame() {
+void AGOSEngine::off_loadUserGame() {
 	// 133: load game
 	loadGame(readVariable(55));
 }
 
-void AGOSEngine::o3_listSaveGames() {
+void AGOSEngine::off_listSaveGames() {
 	// 134: dummy opcode?
 	listSaveGames(1);
 }
 
-void AGOSEngine::o3_checkCD() {
+void AGOSEngine::off_checkCD() {
 	// 135: switch CD
 	uint disc = readVariable(97);
 
@@ -240,7 +240,7 @@
 	debug(0, "Switch to CD number %d", disc);
 }
 
-void AGOSEngine::o3_screenTextBox() {
+void AGOSEngine::off_screenTextBox() {
 	// 161: setup text
 	TextLocation *tl = getTextLocation(getVarOrByte());
 
@@ -249,7 +249,7 @@
 	tl->width = getVarOrWord();
 }
 
-void AGOSEngine::o3_isAdjNoun() {
+void AGOSEngine::off_isAdjNoun() {
 	// 165: item unk1 unk2 is
 	Item *item = getNextItemPtr();
 	int16 a = getNextWord(), b = getNextWord();
@@ -261,17 +261,17 @@
 		setScriptCondition(false);
 }
 
-void AGOSEngine::o3_hyperLinkOn() {
+void AGOSEngine::off_hyperLinkOn() {
 	// 171: oracle hyperlink on
 	hyperLinkOn(getVarOrWord());
 }
 
-void AGOSEngine::o3_hyperLinkOff() {
+void AGOSEngine::off_hyperLinkOff() {
 	// 172: oracle hyperlink off
 	hyperLinkOff();
 }
 
-void AGOSEngine::o3_checkPaths() {
+void AGOSEngine::off_checkPaths() {
 	// 173 check paths
 	int i, count;
 	const uint8 *pathVal1 = _pathValues1;
@@ -307,7 +307,7 @@
 	_variableArray2[52] = result;
 }
 
-void AGOSEngine::o3_screenTextPObj() {
+void AGOSEngine::off_screenTextPObj() {
 	// 177: inventory descriptions
 	uint vgaSpriteId = getVarOrByte();
 	uint color = getVarOrByte();
@@ -336,29 +336,29 @@
 	}
 }
 
-void AGOSEngine::o3_mouseOff() {
+void AGOSEngine::off_mouseOff() {
 	// 181: force mouseOff
 	scriptMouseOff();
 	clearName();
 }
 
-void AGOSEngine::o3_loadVideo() {
+void AGOSEngine::off_loadVideo() {
 	// 182: load video file
 	const byte *filename = getStringPtrByID(getNextStringID());
 	_moviePlay->load((const char *)filename);
 }
 
-void AGOSEngine::o3_playVideo() {
+void AGOSEngine::off_playVideo() {
 	// 183: play video
 	_moviePlay->play();
 }
 
-void AGOSEngine::o3_centreScroll() {
+void AGOSEngine::off_centreScroll() {
 	// 187
 	centreScroll();
 }
 
-void AGOSEngine::o3_resetPVCount() {
+void AGOSEngine::off_resetPVCount() {
 	// 191
 	if (getBitFlag(83)) {
 		_PVCount1 = 0;
@@ -369,7 +369,7 @@
 	}
 }
 
-void AGOSEngine::o3_setPathValues() {
+void AGOSEngine::off_setPathValues() {
 	// 192
 	uint8 a = getVarOrByte();
 	uint8 b = getVarOrByte();
@@ -388,19 +388,19 @@
 	}
 }
 
-void AGOSEngine::o3_stopClock() {
+void AGOSEngine::off_stopClock() {
 	// 193: pause clock
 	_clockStopped = time(NULL);
 }
 
-void AGOSEngine::o3_restartClock() {
+void AGOSEngine::off_restartClock() {
 	// 194: resume clock
 	if (_clockStopped != 0)
 		_gameStoppedClock += time(NULL) - _clockStopped;
 	_clockStopped = 0;
 }
 
-void AGOSEngine::o3_setColour() {
+void AGOSEngine::off_setColour() {
 	// 195: set palette colour
 	uint c = getVarOrByte() * 4;
 	uint r = getVarOrByte();
@@ -414,25 +414,25 @@
 	_paletteFlag = 2;
 }
 
-void AGOSEngine::o3_b3Set() {
+void AGOSEngine::off_b3Set() {
 	// 196: set bit3
 	uint bit = getVarOrByte();
 	_bitArrayThree[bit / 16] |= (1 << (bit & 15));
 }
 
-void AGOSEngine::o3_b3Clear() {
+void AGOSEngine::off_b3Clear() {
 	// 197: clear bit3
 	uint bit = getVarOrByte();
 	_bitArrayThree[bit / 16] &= ~(1 << (bit & 15));
 }
 
-void AGOSEngine::o3_b3Zero() {
+void AGOSEngine::off_b3Zero() {
 	// 198: is bit3 clear
 	uint bit = getVarOrByte();
 	setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) == 0);
 }
 
-void AGOSEngine::o3_b3NotZero() {
+void AGOSEngine::off_b3NotZero() {
 	// 199: is bit3 set
 	uint bit = getVarOrByte();
 	setScriptCondition((_bitArrayThree[bit / 16] & (1 << (bit & 15))) != 0);

Modified: scummvm/trunk/engines/agos/script_pp.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_pp.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script_pp.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -32,61 +32,61 @@
 void AGOSEngine::setupPuzzleOpcodes(OpcodeProc *op) {
 	setupCommonOpcodes(op);
 
-	op[23] = &AGOSEngine::o3_chance;
-	op[30] = &AGOSEngine::o4_iconifyWindow;
-	op[32] = &AGOSEngine::o4_restoreOopsPosition;
-	op[38] = &AGOSEngine::o4_loadMouseImage;
-	op[63] = &AGOSEngine::o4_message;
-	op[65] = &AGOSEngine::o3_addTextBox;
-	op[66] = &AGOSEngine::o4_setShortText;
-	op[67] = &AGOSEngine::o_setLongText;
-	op[70] = &AGOSEngine::o3_printLongText;
-	op[83] = &AGOSEngine::o2_rescan;
-	op[98] = &AGOSEngine::o2_animate;
-	op[99] = &AGOSEngine::o2_stopAnimate;
-	op[105] = &AGOSEngine::o4_loadHiScores;
-	op[106] = &AGOSEngine::o4_checkHiScores;
-	op[107] = &AGOSEngine::o3_addBox;
-	op[120] = &AGOSEngine::o4_sync;
-	op[122] = &AGOSEngine::o3_oracleTextDown;
-	op[123] = &AGOSEngine::o3_oracleTextUp;
-	op[124] = &AGOSEngine::o3_ifTime;
-	op[131] = &AGOSEngine::o3_setTime;
-	op[132] = &AGOSEngine::o4_saveUserGame;
-	op[133] = &AGOSEngine::o4_loadUserGame;
-	op[134] = &AGOSEngine::o3_listSaveGames;
-	op[161] = &AGOSEngine::o3_screenTextBox;
-	op[162] = &AGOSEngine::o_screenTextMsg;
-	op[164] = &AGOSEngine::o_getDollar2;
-	op[165] = &AGOSEngine::o3_isAdjNoun;
-	op[171] = &AGOSEngine::o3_hyperLinkOn;
-	op[172] = &AGOSEngine::o3_hyperLinkOff;
-	op[173] = &AGOSEngine::o4_saveOopsPosition;
-	op[175] = &AGOSEngine::o_lockZones;
-	op[176] = &AGOSEngine::o_unlockZones;
-	op[177] = &AGOSEngine::o3_screenTextPObj;
-	op[178] = &AGOSEngine::o_getPathPosn;
-	op[179] = &AGOSEngine::o_scnTxtLongText;
-	op[180] = &AGOSEngine::o_mouseOn;
-	op[181] = &AGOSEngine::o3_mouseOff;
-	op[184] = &AGOSEngine::o_unloadZone;
-	op[186] = &AGOSEngine::o_unfreezeZones;
-	op[187] = &AGOSEngine::o4_resetGameTime;
-	op[188] = &AGOSEngine::o2_isShortText;
-	op[189] = &AGOSEngine::o2_clearMarks;
-	op[190] = &AGOSEngine::o2_waitMark;
-	op[191] = &AGOSEngine::o4_resetPVCount;
-	op[192] = &AGOSEngine::o4_setPathValues;
-	op[193] = &AGOSEngine::o3_stopClock;
-	op[194] = &AGOSEngine::o4_restartClock;
-	op[195] = &AGOSEngine::o3_setColour;
+	op[23] = &AGOSEngine::off_chance;
+	op[30] = &AGOSEngine::opp_iconifyWindow;
+	op[32] = &AGOSEngine::opp_restoreOopsPosition;
+	op[38] = &AGOSEngine::opp_loadMouseImage;
+	op[63] = &AGOSEngine::opp_message;
+	op[65] = &AGOSEngine::off_addTextBox;
+	op[66] = &AGOSEngine::opp_setShortText;
+	op[67] = &AGOSEngine::oww_setLongText;
+	op[70] = &AGOSEngine::off_printLongText;
+	op[83] = &AGOSEngine::os2_rescan;
+	op[98] = &AGOSEngine::os2_animate;
+	op[99] = &AGOSEngine::os2_stopAnimate;
+	op[105] = &AGOSEngine::opp_loadHiScores;
+	op[106] = &AGOSEngine::opp_checkHiScores;
+	op[107] = &AGOSEngine::off_addBox;
+	op[120] = &AGOSEngine::opp_sync;
+	op[122] = &AGOSEngine::off_oracleTextDown;
+	op[123] = &AGOSEngine::off_oracleTextUp;
+	op[124] = &AGOSEngine::off_ifTime;
+	op[131] = &AGOSEngine::off_setTime;
+	op[132] = &AGOSEngine::opp_saveUserGame;
+	op[133] = &AGOSEngine::opp_loadUserGame;
+	op[134] = &AGOSEngine::off_listSaveGames;
+	op[161] = &AGOSEngine::off_screenTextBox;
+	op[162] = &AGOSEngine::os1_screenTextMsg;
+	op[164] = &AGOSEngine::oe2_getDollar2;
+	op[165] = &AGOSEngine::off_isAdjNoun;
+	op[171] = &AGOSEngine::off_hyperLinkOn;
+	op[172] = &AGOSEngine::off_hyperLinkOff;
+	op[173] = &AGOSEngine::opp_saveOopsPosition;
+	op[175] = &AGOSEngine::oww_lockZones;
+	op[176] = &AGOSEngine::oww_unlockZones;
+	op[177] = &AGOSEngine::off_screenTextPObj;
+	op[178] = &AGOSEngine::os1_getPathPosn;
+	op[179] = &AGOSEngine::os1_scnTxtLongText;
+	op[180] = &AGOSEngine::os1_mouseOn;
+	op[181] = &AGOSEngine::off_mouseOff;
+	op[184] = &AGOSEngine::os1_unloadZone;
+	op[186] = &AGOSEngine::os1_unfreezeZones;
+	op[187] = &AGOSEngine::opp_resetGameTime;
+	op[188] = &AGOSEngine::os2_isShortText;
+	op[189] = &AGOSEngine::os2_clearMarks;
+	op[190] = &AGOSEngine::os2_waitMark;
+	op[191] = &AGOSEngine::opp_resetPVCount;
+	op[192] = &AGOSEngine::opp_setPathValues;
+	op[193] = &AGOSEngine::off_stopClock;
+	op[194] = &AGOSEngine::opp_restartClock;
+	op[195] = &AGOSEngine::off_setColour;
 }
 
 // -----------------------------------------------------------------------
 // Puzzle Pack Opcodes
 // -----------------------------------------------------------------------
 
-void AGOSEngine::o4_iconifyWindow() {
+void AGOSEngine::opp_iconifyWindow() {
 	// 30
 	getNextItemPtr();
 	if (_clockStopped != 0)
@@ -95,7 +95,7 @@
 	_system->setFeatureState(OSystem::kFeatureIconifyWindow, true);
 }
 
-void AGOSEngine::o4_restoreOopsPosition() {
+void AGOSEngine::opp_restoreOopsPosition() {
 	// 32: restore oops position
 	uint i;
 
@@ -117,14 +117,14 @@
 	}
 }
 
-void AGOSEngine::o4_loadMouseImage() {
+void AGOSEngine::opp_loadMouseImage() {
 	// 38: load mouse image
 	getNextItemPtr();
 	getVarOrByte();
 	loadMouseImage();
 }
 
-void AGOSEngine::o4_message() {
+void AGOSEngine::opp_message() {
 	// 63: show string nl
 
 	if (getBitFlag(105)) {
@@ -136,7 +136,7 @@
 	}
 }
 
-void AGOSEngine::o4_setShortText() {
+void AGOSEngine::opp_setShortText() {
 	// 66: set item name
 	uint var = getVarOrByte();
 	uint stringId = getNextStringID();
@@ -147,18 +147,18 @@
 	}
 }
 
-void AGOSEngine::o4_loadHiScores() {
+void AGOSEngine::opp_loadHiScores() {
 	// 105: load high scores
 	getVarOrByte();
 }
 
-void AGOSEngine::o4_checkHiScores() {
+void AGOSEngine::opp_checkHiScores() {
 	// 106: check high scores
 	getVarOrByte();
 	getVarOrByte();
 }
 
-void AGOSEngine::o4_sync() {
+void AGOSEngine::opp_sync() {
 	// 120: sync
 	uint a = getVarOrWord();
 	if (a == 8001 || a == 8101 || a == 8201 || a == 8301 || a == 8401) {
@@ -167,7 +167,7 @@
 	sendSync(a);
 }
 
-void AGOSEngine::o4_saveUserGame() {
+void AGOSEngine::opp_saveUserGame() {
 	// 132: save game
 	if (_clockStopped != 0)
 		_gameTime += time(NULL) - _clockStopped;
@@ -183,7 +183,7 @@
 	//saveHiScores()
 }
 
-void AGOSEngine::o4_loadUserGame() {
+void AGOSEngine::opp_loadUserGame() {
 	// 133: load usergame
 
 	// NoPatience or Jumble
@@ -196,7 +196,7 @@
 	loadGame(1);
 }
 
-void AGOSEngine::o4_saveOopsPosition() {
+void AGOSEngine::opp_saveOopsPosition() {
 	// 173: save oops position
 	if (!isVgaQueueEmpty()) {
 		_oopsValid = true;
@@ -208,18 +208,18 @@
 	}
 }
 
-void AGOSEngine::o4_resetGameTime() {
+void AGOSEngine::opp_resetGameTime() {
 	// 187: reset game time
 	_gameTime = 0;
 }
 
-void AGOSEngine::o4_resetPVCount() {
+void AGOSEngine::opp_resetPVCount() {
 	// 191
 	_PVCount = 0;
 	_GPVCount = 0;
 }
 
-void AGOSEngine::o4_setPathValues() {
+void AGOSEngine::opp_setPathValues() {
 	// 192
 	_pathValues[_PVCount++] = getVarOrByte();
 	_pathValues[_PVCount++] = getVarOrByte();
@@ -227,7 +227,7 @@
 	_pathValues[_PVCount++] = getVarOrByte();
 }
 
-void AGOSEngine::o4_restartClock() {
+void AGOSEngine::opp_restartClock() {
 	// 194: resume clock
 	if (_clockStopped != 0)
 		_gameTime += time(NULL) - _clockStopped;

Modified: scummvm/trunk/engines/agos/script_s1.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_s1.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script_s1.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -32,62 +32,53 @@
 void AGOSEngine::setupSimon1Opcodes(OpcodeProc *op) {
 	setupCommonOpcodes(op);
 
-	op[65] = &AGOSEngine::o_addTextBox;
-	op[66] = &AGOSEngine::o_setShortText;
-	op[67] = &AGOSEngine::o_setLongText;
-	op[70] = &AGOSEngine::o1_printLongText;
-	op[83] = &AGOSEngine::o1_rescan;
-	op[98] = &AGOSEngine::o1_animate;
-	op[99] = &AGOSEngine::o1_stopAnimate;
-	op[127] = &AGOSEngine::o1_playTune;
-	op[161] = &AGOSEngine::o_screenTextBox;
-	op[162] = &AGOSEngine::o_screenTextMsg;
-	op[163] = &AGOSEngine::o_playEffect;
-	op[164] = &AGOSEngine::o_getDollar2;
-	op[165] = &AGOSEngine::o_isAdjNoun;
-	op[166] = &AGOSEngine::o_b2Set;
-	op[167] = &AGOSEngine::o_b2Clear;
-	op[168] = &AGOSEngine::o_b2Zero;
-	op[169] = &AGOSEngine::o_b2NotZero;
-	op[175] = &AGOSEngine::o_lockZones;
-	op[176] = &AGOSEngine::o_unlockZones;
-	op[177] = &AGOSEngine::o1_screenTextPObj;
-	op[178] = &AGOSEngine::o_getPathPosn;
-	op[179] = &AGOSEngine::o_scnTxtLongText;
-	op[180] = &AGOSEngine::o_mouseOn;
-	op[181] = &AGOSEngine::o1_mouseOff;
-	op[182] = &AGOSEngine::o1_loadBeard;
-	op[183] = &AGOSEngine::o1_unloadBeard;
-	op[184] = &AGOSEngine::o_unloadZone;
-	op[185] = &AGOSEngine::o1_loadStrings;
-	op[186] = &AGOSEngine::o_unfreezeZones;
-	op[187] = &AGOSEngine::o1_specialFade;
+	op[65] = &AGOSEngine::oww_addTextBox;
+	op[66] = &AGOSEngine::oww_setShortText;
+	op[67] = &AGOSEngine::oww_setLongText;
+	op[70] = &AGOSEngine::oww_printLongText;
+	op[83] = &AGOSEngine::oe1_rescan;
+	op[88] = &AGOSEngine::o_haltAnimation;
+	op[89] = &AGOSEngine::o_restartAnimation;
+	op[98] = &AGOSEngine::os1_animate;
+	op[99] = &AGOSEngine::oe1_stopAnimate;
+	op[127] = &AGOSEngine::os1_playTune;
+	op[161] = &AGOSEngine::os1_screenTextBox;
+	op[162] = &AGOSEngine::os1_screenTextMsg;
+	op[163] = &AGOSEngine::os1_playEffect;
+	op[164] = &AGOSEngine::oe2_getDollar2;
+	op[165] = &AGOSEngine::oe2_isAdjNoun;
+	op[166] = &AGOSEngine::oe2_b2Set;
+	op[167] = &AGOSEngine::oe2_b2Clear;
+	op[168] = &AGOSEngine::oe2_b2Zero;
+	op[169] = &AGOSEngine::oe2_b2NotZero;
+	op[175] = &AGOSEngine::oww_lockZones;
+	op[176] = &AGOSEngine::oww_unlockZones;
+	op[177] = &AGOSEngine::os1_screenTextPObj;
+	op[178] = &AGOSEngine::os1_getPathPosn;
+	op[179] = &AGOSEngine::os1_scnTxtLongText;
+	op[180] = &AGOSEngine::os1_mouseOn;
+	op[181] = &AGOSEngine::os1_mouseOff;
+	op[182] = &AGOSEngine::os1_loadBeard;
+	op[183] = &AGOSEngine::os1_unloadBeard;
+	op[184] = &AGOSEngine::os1_unloadZone;
+	op[185] = &AGOSEngine::os1_loadStrings;
+	op[186] = &AGOSEngine::os1_unfreezeZones;
+	op[187] = &AGOSEngine::os1_specialFade;
 }
 
 // -----------------------------------------------------------------------
 // Simon 1 Opcodes
 // -----------------------------------------------------------------------
 
-void AGOSEngine::o1_printLongText() {
-	// 70: show string from array
-	const char *str = (const char *)getStringPtrByID(_longText[getVarOrByte()]);
-	showMessageFormat("%s\n", str);
-}
-
-void AGOSEngine::o1_rescan() {
-	// 83: restart subroutine
-	setScriptReturn(-10);
-}
-
-void AGOSEngine::o1_animate() {
-	// 98: start vga
+void AGOSEngine::os1_animate() {
+	// 98: animate
 	uint vgaSpriteId = getVarOrWord();
 	uint windowNum = getVarOrByte();
 	uint x = getVarOrWord();
 	uint y = getVarOrWord();
 	uint palette = getVarOrWord();
 
-	if (getGameType() == GType_SIMON1 && (getFeatures() & GF_TALKIE) && vgaSpriteId >= 400) {
+	if (getFeatures() & GF_TALKIE && vgaSpriteId >= 400) {
 		_lastVgaWaitFor = 0;
 	}
 
@@ -96,12 +87,7 @@
 	_lockWord &= ~0x40;
 }
 
-void AGOSEngine::o1_stopAnimate() {
-	// 99: kill sprite
-	stopAnimateSimon1(getVarOrWord());
-}
-
-void AGOSEngine::o1_playTune() {
+void AGOSEngine::os1_playTune() {
 	// 127: deals with music
 	int music = getVarOrWord();
 	int track = getVarOrWord();
@@ -122,7 +108,61 @@
 	}
 }
 
-void AGOSEngine::o1_screenTextPObj() {
+void AGOSEngine::os1_screenTextBox() {
+	// 161: setup text
+	TextLocation *tl = getTextLocation(getVarOrByte());
+
+	tl->x = getVarOrWord();
+	tl->y = getVarOrByte();
+	tl->width = getVarOrWord();
+}
+	
+void AGOSEngine::os1_screenTextMsg() {
+	// 162: print string
+	uint vgaSpriteId = getVarOrByte();
+	uint color = getVarOrByte();
+	uint stringId = getNextStringID();
+	const byte *string_ptr = NULL;
+	uint speechId = 0;
+	TextLocation *tl;
+
+	if (stringId != 0xFFFF)
+		string_ptr = getStringPtrByID(stringId);
+
+	if (getFeatures() & GF_TALKIE) {
+		if (getGameType() == GType_FF || getGameType() == GType_PP)
+			speechId = (uint16)getVarOrWord();
+		else
+			speechId = (uint16)getNextWord();
+	}
+
+	if (getGameType() == GType_FF || getGameType() == GType_PP)
+		vgaSpriteId = 1;
+
+	tl = getTextLocation(vgaSpriteId);
+	if (_speech && speechId != 0)
+		playSpeech(speechId, vgaSpriteId);
+	if (((getGameType() == GType_SIMON2 && (getFeatures() & GF_TALKIE)) || getGameType() == GType_FF) &&
+		speechId == 0) {
+		stopAnimateSimon2(2, vgaSpriteId + 2);
+	}
+
+	if (string_ptr != NULL && (speechId == 0 || _subtitles))
+		printScreenText(vgaSpriteId, color, (const char *)string_ptr, tl->x, tl->y, tl->width);
+
+}
+
+void AGOSEngine::os1_playEffect() {
+	// 163: play sound
+	uint soundId = getVarOrWord();
+
+	if (getGameId() == GID_SIMON1DOS)
+		playSting(soundId);
+	else
+		_sound->playEffects(soundId);
+}
+
+void AGOSEngine::os1_screenTextPObj() {
 	// 177: inventory descriptions
 	uint vgaSpriteId = getVarOrByte();
 	uint color = getVarOrByte();
@@ -163,12 +203,88 @@
 	}
 }
 
-void AGOSEngine::o1_mouseOff() {
+void AGOSEngine::os1_getPathPosn() {
+	// 178: path find
+	uint x = getVarOrWord();
+	uint y = getVarOrWord();
+	uint var_1 = getVarOrByte();
+	uint var_2 = getVarOrByte();
+
+	const uint16 *p;
+	uint i, j;
+	uint prev_i;
+	uint x_diff, y_diff;
+	uint best_i = 0, best_j = 0, best_dist = 0xFFFFFFFF;
+	uint maxPath = (getGameType() == GType_FF || getGameType() == GType_PP) ? 100 : 20;
+
+	if (getGameType() == GType_FF || getGameType() == GType_PP) {
+		x += _scrollX;
+		y += _scrollY;
+	} else if (getGameType() == GType_SIMON2) {
+		x += _scrollX * 8;
+	}
+
+	int end = (getGameType() == GType_FF) ? 9999 : 999;
+	prev_i = maxPath + 1 - readVariable(12);
+	for (i = maxPath; i != 0; --i) {
+		p = (const uint16 *)_pathFindArray[maxPath - i];
+		if (!p)
+			continue;
+		for (j = 0; readUint16Wrapper(&p[0]) != end; j++, p += 2) {
+			x_diff = ABS((int16)(readUint16Wrapper(&p[0]) - x));
+			y_diff = ABS((int16)(readUint16Wrapper(&p[1]) - 12 - y));
+
+			if (x_diff < y_diff) {
+				x_diff /= 4;
+				y_diff *= 4;
+			}
+			x_diff += y_diff /= 4;
+
+			if (x_diff < best_dist || x_diff == best_dist && prev_i == i) {
+				best_dist = x_diff;
+				best_i = maxPath + 1 - i;
+				best_j = j;
+			}
+		}
+	}
+
+	writeVariable(var_1, best_i);
+	writeVariable(var_2, best_j);
+}
+
+void AGOSEngine::os1_scnTxtLongText() {
+	// 179: conversation responses and room descriptions
+	uint vgaSpriteId = getVarOrByte();
+	uint color = getVarOrByte();
+	uint stringId = getVarOrByte();
+	uint speechId = 0;
+	TextLocation *tl;
+
+	const char *string_ptr = (const char *)getStringPtrByID(_longText[stringId]);
+	if (getFeatures() & GF_TALKIE)
+		speechId = _longSound[stringId];
+
+	if (getGameType() == GType_FF || getGameType() == GType_PP)
+		vgaSpriteId = 1;
+	tl = getTextLocation(vgaSpriteId);
+
+	if (_speech && speechId != 0)
+		playSpeech(speechId, vgaSpriteId);
+	if (string_ptr != NULL && _subtitles)
+		printScreenText(vgaSpriteId, color, string_ptr, tl->x, tl->y, tl->width);
+}
+
+void AGOSEngine::os1_mouseOn() {
+	// 180: force mouseOn
+	scriptMouseOn();
+}
+
+void AGOSEngine::os1_mouseOff() {
 	// 181: force mouseOff
 	scriptMouseOff();
 }
 
-void AGOSEngine::o1_loadBeard() {
+void AGOSEngine::os1_loadBeard() {
 	// 182: load beard
 	if (_beardLoaded == false) {
 		_beardLoaded = true;
@@ -178,7 +294,7 @@
 	}
 }
 
-void AGOSEngine::o1_unloadBeard() {
+void AGOSEngine::os1_unloadBeard() {
 	// 183: unload beard
 	if (_beardLoaded == true) {
 		_beardLoaded = false;
@@ -188,7 +304,17 @@
 	}
 }
 
-void AGOSEngine::o1_loadStrings() {
+void AGOSEngine::os1_unloadZone() {
+	// 184: unload zone
+	uint a = getVarOrWord();
+	VgaPointersEntry *vpe = &_vgaBufferPointers[a];
+
+	vpe->sfxFile = NULL;
+	vpe->vgaFile1 = NULL;
+	vpe->vgaFile2 = NULL;
+}
+
+void AGOSEngine::os1_loadStrings() {
 	// 185: load sound files
 	_soundFileId = getVarOrWord();
 	if (getPlatform() == Common::kPlatformAmiga && getFeatures() & GF_TALKIE) {
@@ -200,7 +326,12 @@
 	}
 }
 
-void AGOSEngine::o1_specialFade() {
+void AGOSEngine::os1_unfreezeZones() {
+	// 186: freeze zone
+	unfreezeBottom();
+}
+
+void AGOSEngine::os1_specialFade() {
 	// 187: fade to black
 	uint i;
 

Modified: scummvm/trunk/engines/agos/script_s2.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_s2.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script_s2.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -30,49 +30,51 @@
 void AGOSEngine::setupSimon2Opcodes(OpcodeProc *op) {
 	setupCommonOpcodes(op);
 
-	op[65] = &AGOSEngine::o_addTextBox;
-	op[66] = &AGOSEngine::o_setShortText;
-	op[67] = &AGOSEngine::o_setLongText;
-	op[70] = &AGOSEngine::o2_printLongText;
-	op[83] = &AGOSEngine::o2_rescan;
-	op[98] = &AGOSEngine::o2_animate;
-	op[99] = &AGOSEngine::o2_stopAnimate;
-	op[127] = &AGOSEngine::o2_playTune;
-	op[161] = &AGOSEngine::o_screenTextBox;
-	op[162] = &AGOSEngine::o_screenTextMsg;
-	op[163] = &AGOSEngine::o_playEffect;
-	op[164] = &AGOSEngine::o_getDollar2;
-	op[165] = &AGOSEngine::o_isAdjNoun;
-	op[166] = &AGOSEngine::o_b2Set;
-	op[167] = &AGOSEngine::o_b2Clear;
-	op[168] = &AGOSEngine::o_b2Zero;
-	op[169] = &AGOSEngine::o_b2NotZero;
-	op[175] = &AGOSEngine::o_lockZones;
-	op[176] = &AGOSEngine::o_unlockZones;
-	op[177] = &AGOSEngine::o2_screenTextPObj;
-	op[178] = &AGOSEngine::o_getPathPosn;
-	op[179] = &AGOSEngine::o_scnTxtLongText;
-	op[180] = &AGOSEngine::o_mouseOn;
-	op[181] = &AGOSEngine::o2_mouseOff;
-	op[184] = &AGOSEngine::o_unloadZone;
-	op[186] = &AGOSEngine::o_unfreezeZones;
-	op[188] = &AGOSEngine::o2_isShortText;
-	op[189] = &AGOSEngine::o2_clearMarks;
-	op[190] = &AGOSEngine::o2_waitMark;
+	op[65] = &AGOSEngine::oww_addTextBox;
+	op[66] = &AGOSEngine::oww_setShortText;
+	op[67] = &AGOSEngine::oww_setLongText;
+	op[70] = &AGOSEngine::os2_printLongText;
+	op[83] = &AGOSEngine::os2_rescan;
+	op[88] = &AGOSEngine::o_haltAnimation;
+	op[89] = &AGOSEngine::o_restartAnimation;
+	op[98] = &AGOSEngine::os2_animate;
+	op[99] = &AGOSEngine::os2_stopAnimate;
+	op[127] = &AGOSEngine::os2_playTune;
+	op[161] = &AGOSEngine::os1_screenTextBox;
+	op[162] = &AGOSEngine::os1_screenTextMsg;
+	op[163] = &AGOSEngine::os1_playEffect;
+	op[164] = &AGOSEngine::oe2_getDollar2;
+	op[165] = &AGOSEngine::oe2_isAdjNoun;
+	op[166] = &AGOSEngine::oe2_b2Set;
+	op[167] = &AGOSEngine::oe2_b2Clear;
+	op[168] = &AGOSEngine::oe2_b2Zero;
+	op[169] = &AGOSEngine::oe2_b2NotZero;
+	op[175] = &AGOSEngine::oww_lockZones;
+	op[176] = &AGOSEngine::oww_unlockZones;
+	op[177] = &AGOSEngine::os2_screenTextPObj;
+	op[178] = &AGOSEngine::os1_getPathPosn;
+	op[179] = &AGOSEngine::os1_scnTxtLongText;
+	op[180] = &AGOSEngine::os1_mouseOn;
+	op[181] = &AGOSEngine::os2_mouseOff;
+	op[184] = &AGOSEngine::os1_unloadZone;
+	op[186] = &AGOSEngine::os1_unfreezeZones;
+	op[188] = &AGOSEngine::os2_isShortText;
+	op[189] = &AGOSEngine::os2_clearMarks;
+	op[190] = &AGOSEngine::os2_waitMark;
 }
 
 // -----------------------------------------------------------------------
 // Simon 2 Opcodes
 // -----------------------------------------------------------------------
 
-void AGOSEngine::o2_printLongText() {
+void AGOSEngine::os2_printLongText() {
 	// 70: show string from array
 	const char *str = (const char *)getStringPtrByID(_longText[getVarOrByte()]);
 	writeVariable(51, strlen(str) / 53 * 8 + 8);
 	showMessageFormat("%s\n", str);
 }
 
-void AGOSEngine::o2_rescan() {
+void AGOSEngine::os2_rescan() {
 	// 83: restart subroutine
 	if (_exitCutscene) {
 		if (getBitFlag(9)) {
@@ -85,7 +87,7 @@
 	setScriptReturn(-10);
 }
 
-void AGOSEngine::o2_animate() {
+void AGOSEngine::os2_animate() {
 	// 98: start vga
 	uint zoneNum = getVarOrWord();
 	uint vgaSpriteId = getVarOrWord();
@@ -99,14 +101,14 @@
 	_lockWord &= ~0x40;
 }
 
-void AGOSEngine::o2_stopAnimate() {
+void AGOSEngine::os2_stopAnimate() {
 	// 99: kill sprite
 	uint a = getVarOrWord();
 	uint b = getVarOrWord();
 	stopAnimateSimon2(a, b);
 }
 
-void AGOSEngine::o2_playTune() {
+void AGOSEngine::os2_playTune() {
 	// 127: deals with music
 	int music = getVarOrWord();
 	int track = getVarOrWord();
@@ -128,7 +130,7 @@
 		midi.startTrack(track);
 }
 
-void AGOSEngine::o2_screenTextPObj() {
+void AGOSEngine::os2_screenTextPObj() {
 	// 177: inventory descriptions
 	uint vgaSpriteId = getVarOrByte();
 	uint color = getVarOrByte();
@@ -177,7 +179,7 @@
 						speechId = 51;
 						break;
 					default:
-						error("o2_screenTextPObj: invalid case %d", speechIdOffs);
+						error("os2_screenTextPObj: invalid case %d", speechIdOffs);
 					}
 				}
 			}
@@ -213,26 +215,26 @@
 	}
 }
 
-void AGOSEngine::o2_mouseOff() {
+void AGOSEngine::os2_mouseOff() {
 	// 181: force mouseOff
 	scriptMouseOff();
 	changeWindow(1);
 	showMessageFormat("\xC");
 }
 
-void AGOSEngine::o2_isShortText() {
+void AGOSEngine::os2_isShortText() {
 	// 188: string2 is
 	uint i = getVarOrByte();
 	uint str = getNextStringID();
 	setScriptCondition(str < _numTextBoxes && _shortText[i] == str);
 }
 
-void AGOSEngine::o2_clearMarks() {
+void AGOSEngine::os2_clearMarks() {
 	// 189: clear_op189_flag
 	_marks = 0;
 }
 
-void AGOSEngine::o2_waitMark() {
+void AGOSEngine::os2_waitMark() {
 	// 190
 	uint i = getVarOrByte();
 	if (!(_marks & (1 << i)))

Modified: scummvm/trunk/engines/agos/script_ww.cpp
===================================================================
--- scummvm/trunk/engines/agos/script_ww.cpp	2006-10-25 11:43:20 UTC (rev 24500)
+++ scummvm/trunk/engines/agos/script_ww.cpp	2006-10-25 13:38:35 UTC (rev 24501)
@@ -45,20 +45,20 @@
 	op[39] = &AGOSEngine::oe1_weigh;
 	op[54] = &AGOSEngine::oww_moveDirn;
 	op[55] = &AGOSEngine::oww_goto;
-	op[65] = &AGOSEngine::o_addTextBox;
-	op[66] = &AGOSEngine::o_setShortText;
-	op[67] = &AGOSEngine::o_setLongText;
-	op[70] = &AGOSEngine::o1_printLongText;
-	op[83] = &AGOSEngine::o1_rescan;
+	op[65] = &AGOSEngine::oww_addTextBox;
+	op[66] = &AGOSEngine::oww_setShortText;
+	op[67] = &AGOSEngine::oww_setLongText;
+	op[70] = &AGOSEngine::oww_printLongText;
+	op[83] = &AGOSEngine::oe1_rescan;
 	op[85] = &AGOSEngine::oww_whereTo;
 	op[89] = &AGOSEngine::oe1_loadGame;
 	op[94] = &AGOSEngine::oe1_findMaster;
 	op[95] = &AGOSEngine::oe1_nextMaster;
-	op[98] = &AGOSEngine::o1_animate;
-	op[99] = &AGOSEngine::o1_stopAnimate;
+	op[98] = &AGOSEngine::oe1_animate;
+	op[99] = &AGOSEngine::oe1_stopAnimate;
 	op[105] = &AGOSEngine::oww_menu;
 	op[106] = &AGOSEngine::oww_textMenu;
-	op[127] = &AGOSEngine::o1_playTune;
+	op[127] = &AGOSEngine::os1_playTune;
 	op[144] = &AGOSEngine::oe2_setDoorOpen;
 	op[145] = &AGOSEngine::oe2_setDoorClosed;
 	op[146] = &AGOSEngine::oe2_setDoorLocked;
@@ -67,19 +67,19 @@
 	op[149] = &AGOSEngine::oe2_ifDoorClosed;
 	op[150] = &AGOSEngine::oe2_ifDoorLocked;
 	op[162] = &AGOSEngine::oww_screenTextMsg;
-	op[175] = &AGOSEngine::o_getDollar2;
-	op[179] = &AGOSEngine::o_isAdjNoun;
-	op[180] = &AGOSEngine::o_b2Set;
-	op[181] = &AGOSEngine::o_b2Clear;
-	op[182] = &AGOSEngine::o_b2Zero;
-	op[183] = &AGOSEngine::o_b2NotZero;
+	op[175] = &AGOSEngine::oe2_getDollar2;
+	op[179] = &AGOSEngine::oe2_isAdjNoun;
+	op[180] = &AGOSEngine::oe2_b2Set;
+	op[181] = &AGOSEngine::oe2_b2Clear;
+	op[182] = &AGOSEngine::oe2_b2Zero;
+	op[183] = &AGOSEngine::oe2_b2NotZero;
 	op[184] = &AGOSEngine::oww_boxMessage;
 	op[185] = &AGOSEngine::oww_boxMsg;
 	op[186] = &AGOSEngine::oww_boxLongText;
 	op[187] = &AGOSEngine::oww_printBox;
 	op[188] = &AGOSEngine::oww_boxPObj;
-	op[189] = &AGOSEngine::o_lockZones;
-	op[190] = &AGOSEngine::o_unlockZones;
+	op[189] = &AGOSEngine::oww_lockZones;
+	op[190] = &AGOSEngine::oww_unlockZones;
 }
 
 // -----------------------------------------------------------------------
@@ -102,6 +102,50 @@
 	setItemParent(me(), derefItem(item));
 }
 
+void AGOSEngine::oww_addTextBox() {
+	// 65: add hit area
+	uint id = getVarOrWord();
+	uint x = getVarOrWord();
+	uint y = getVarOrWord();
+	uint w = getVarOrWord();
+	uint h = getVarOrWord();
+	uint number = getVarOrByte();
+	if (number < _numTextBoxes)
+		defineBox(id, x, y, w, h, (number << 8) + 129, 208, _dummyItem2);
+}
+
+void AGOSEngine::oww_setShortText() {
+	// 66: set item name
+	uint var = getVarOrByte();
+	uint stringId = getNextStringID();
+	if (var < _numTextBoxes) {
+		_shortText[var] = stringId;
+	}
+}
+
+void AGOSEngine::oww_setLongText() {
+	// 67: set item description
+	uint var = getVarOrByte();
+	uint stringId = getNextStringID();
+	if (getFeatures() & GF_TALKIE) {
+		uint speechId = getNextWord();
+		if (var < _numTextBoxes) {
+			_longText[var] = stringId;
+			_longSound[var] = speechId;
+		}
+	} else {
+		if (var < _numTextBoxes) {
+			_longText[var] = stringId;
+		}
+	}
+}
+
+void AGOSEngine::oww_printLongText() {
+	// 70: show string from array
+	const char *str = (const char *)getStringPtrByID(_longText[getVarOrByte()]);
+	showMessageFormat("%s\n", str);
+}
+
 void AGOSEngine::oww_whereTo() {
 	// 85: where to
 	Item *i = getNextItemPtr();
@@ -159,4 +203,15 @@
 		boxTextMsg((const char *)getStringPtrByID(subObject->objectFlagValue[0]));
 }
 
+void AGOSEngine::oww_lockZones() {
+	// 189: lock zone
+	_vgaMemBase = _vgaMemPtr;
+}
+
+void AGOSEngine::oww_unlockZones() {
+	// 190: unlock zone
+	_vgaMemPtr = _vgaFrozenBase;
+	_vgaMemBase = _vgaFrozenBase;
+}
+
 } // End of namespace AGOS


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list