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

kirben at users.sourceforge.net kirben at users.sourceforge.net
Sun Oct 8 09:42:46 CEST 2006


Revision: 24190
          http://svn.sourceforge.net/scummvm/?rev=24190&view=rev
Author:   kirben
Date:     2006-10-08 00:42:34 -0700 (Sun, 08 Oct 2006)

Log Message:
-----------
Add a few palette differences and fix input in Elvira 1

Modified Paths:
--------------
    scummvm/trunk/engines/agos/agos.cpp
    scummvm/trunk/engines/agos/agos.h
    scummvm/trunk/engines/agos/items.cpp
    scummvm/trunk/engines/agos/rooms.cpp
    scummvm/trunk/engines/agos/vga.cpp

Modified: scummvm/trunk/engines/agos/agos.cpp
===================================================================
--- scummvm/trunk/engines/agos/agos.cpp	2006-10-08 07:25:42 UTC (rev 24189)
+++ scummvm/trunk/engines/agos/agos.cpp	2006-10-08 07:42:34 UTC (rev 24190)
@@ -145,7 +145,6 @@
 	_hitarea_unk_3 = 0;
 	_mortalFlag = 0;
 	_updateScreen = false;
-	_usePaletteDelay = 0;
 	_syncFlag2 = 0;
 	_inCallBack = 0;
 	_cepeFlag = 0;
@@ -253,15 +252,18 @@
 	_scrollUpHitArea = 0;
 	_scrollDownHitArea = 0;
 
-	_fastFadeInFlag = 0;
 
 	_noOverWrite = 0;
 	_rejectBlock = false;
 
+	_fastFadeCount = 0;
+	_fastFadeInFlag = 0;
 	_fastFadeOutFlag = 0;
 	_unkPalFlag = 0;
+	_usePaletteDelay = 0;
 	_exitCutscene = 0;
 	_paletteFlag = 0;
+	_bottomPalette = 0;
 	_picture8600 = 0;
 
 	_soundFileId = 0;
@@ -271,8 +273,6 @@
 	_showPreposition = 0;
 	_showMessageFlag = 0;
 
-	_fastFadeCount = 0;
-
 	_vgaSpriteChanged = 0;
 
 	_block = 0;
@@ -1305,7 +1305,7 @@
 		_lastHitArea3 = NULL;
 
 		for (;;) {
-			if ((getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) && _keyPressed == 35)
+			if (getGameType() != GType_FF && getGameType() != GType_PP && _keyPressed == 35)
 				displayBoxStars();
 			if (getGameType() == GType_PP) {
 				if (checkArrows() != 0) {
@@ -1753,7 +1753,16 @@
 	runVgaScript();
 	_vcPtr = vc_ptr_org;
 
+	if (getGameType() == GType_ELVIRA1 && _windowNum == 3 && _bottomPalette != 0) {
+		byte *dst = getBackBuf() + 42560;
+		int size = 21440;
 
+		while (size--) {
+			*dst += 0x10;
+			dst++;
+		}
+	}
+
 	if (getGameType() == GType_FF || getGameType() == GType_PP) {
 		fillFrontFromBack(0, 0, _screenWidth, _screenHeight);
 		fillBackGroundFromBack(_screenHeight);

Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h	2006-10-08 07:25:42 UTC (rev 24189)
+++ scummvm/trunk/engines/agos/agos.h	2006-10-08 07:42:34 UTC (rev 24190)
@@ -274,7 +274,6 @@
 	bool _hitarea_unk_3;
 	bool _mortalFlag;
 	bool _updateScreen;
-	bool _usePaletteDelay;
 	bool _syncFlag2;
 	bool _inCallBack;
 	bool _cepeFlag;
@@ -378,7 +377,9 @@
 
 	bool _fastFadeOutFlag;
 	bool _unkPalFlag;
+	bool _usePaletteDelay;
 	byte _paletteFlag;
+	int _bottomPalette;
 	uint _fastFadeCount;
 	volatile uint16 _fastFadeInFlag;
 
@@ -1066,6 +1067,7 @@
 	void oe1_means();
 	void oe1_setUserItem();
 	void oe1_getUserItem();
+	void oe1_whereTo();
 	void oe1_clearUserItem();
 	void oe1_findMaster();
 	void oe1_nextMaster();

Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp	2006-10-08 07:25:42 UTC (rev 24189)
+++ scummvm/trunk/engines/agos/items.cpp	2006-10-08 07:42:34 UTC (rev 24190)
@@ -269,7 +269,7 @@
 	op[177] = &AGOSEngine::oe1_getUserItem;
 	op[178] = &AGOSEngine::oe1_clearUserItem;
 
-	op[180] = &AGOSEngine::oww_whereTo;
+	op[180] = &AGOSEngine::oe1_whereTo;
 
 	op[198] = &AGOSEngine::o_comment;
 
@@ -1168,15 +1168,24 @@
 	uint w = getVarOrWord();
 	uint h = getVarOrWord();
 	uint flags = getVarOrWord();
-	uint fill_color = getVarOrWord();
-	uint text_color = 0;
+	uint color = getVarOrWord();
 
+	uint fillColor, textColor;
+	if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2 ||
+		getGameType() == GType_WW) {
+		fillColor = color % 100;
+		textColor = color / 100;
+	} else {
+		fillColor = getVarOrWord();
+		textColor = 0;
+	}
+
 	num &= 7;
 
 	if (_windowArray[num])
 		closeWindow(num);
 
-	_windowArray[num] = openWindow(x, y, w, h, flags, fill_color, text_color);
+	_windowArray[num] = openWindow(x, y, w, h, flags, fillColor, textColor);
 
 	if (num == _curWindow) {
 		_textWindow = _windowArray[num];
@@ -1960,6 +1969,18 @@
 		_objectItem = derefItem(getUserItem(i, n));
 }
 
+void AGOSEngine::oe1_whereTo() {
+	// 180: where to
+	Item *i = getNextItemPtr();
+	int16 d = getVarOrByte();
+	int16 f = getVarOrByte();
+
+	if (f == 1)
+		_subjectItem = derefItem(getExitOf_e1(i, d));
+	else
+		_objectItem = derefItem(getExitOf_e1(i, d));
+}
+
 void AGOSEngine::oe1_clearUserItem() {
 	// 178: clear user item
 	Item *i = getNextItemPtr();

Modified: scummvm/trunk/engines/agos/rooms.cpp
===================================================================
--- scummvm/trunk/engines/agos/rooms.cpp	2006-10-08 07:25:42 UTC (rev 24189)
+++ scummvm/trunk/engines/agos/rooms.cpp	2006-10-08 07:42:34 UTC (rev 24190)
@@ -86,7 +86,7 @@
 	x = derefItem(g->dest[d]);
 	if (x == NULL)
 		return 0;
-	if (findChildOfType(x, 1))
+	if (isRoom(x))
 		return itemPtrToID(x);
 	if (x->state != 0)
 		return 0;

Modified: scummvm/trunk/engines/agos/vga.cpp
===================================================================
--- scummvm/trunk/engines/agos/vga.cpp	2006-10-08 07:25:42 UTC (rev 24189)
+++ scummvm/trunk/engines/agos/vga.cpp	2006-10-08 07:42:34 UTC (rev 24190)
@@ -1485,6 +1485,7 @@
 			src = state->depack_src + (state->width * state->y_skip) * 8;
 			dst = state->surf_addr;
 			state->x_skip *= 4;
+
 			do {
 				for (count = 0; count != state->draw_width; count++) {
 					byte color;
@@ -1498,7 +1499,6 @@
 				dst += _screenWidth;
 				src += state->width * 8;
 			} while (--state->draw_height);
-			/* vc10_helper_7 */
 		}
 	}
 }
@@ -1759,6 +1759,7 @@
 	}
 }
 
+// TODO: Split this code into specific games!
 void AGOSEngine::vc22_setSpritePalette() {
 	byte *offs, *palptr, *src;
 	uint16 a = 0, b, num, palSize;
@@ -1786,9 +1787,12 @@
 		palptr = _displayPalette;
 		offs = _curVgaFile1 + READ_BE_UINT16(_curVgaFile1 + 6);
 
+		_bottomPalette = 1;
+
 		if (getGameType() == GType_ELVIRA1) {
 			if (b >= 1000) {
 				b -= 1000;
+				_bottomPalette = 0;
 			} else {
 				num = 13;
 
@@ -1806,6 +1810,86 @@
 				palptr[15 * 4 + 1] = 192;
 				palptr[15 * 4 + 2] = 40;
 				palptr[15 * 4 + 3] = 0;
+
+				palptr[16 * 4 + 0] = 0;
+				palptr[16 * 4 + 1] = 0;
+				palptr[16 * 4 + 2] = 0;
+				palptr[16 * 4 + 3] = 0;
+
+				palptr[17 * 4 + 0] = 16;
+				palptr[17 * 4 + 1] = 0;
+				palptr[17 * 4 + 2] = 0;
+				palptr[17 * 4 + 3] = 0;
+
+				palptr[18 * 4 + 0] = 8;
+				palptr[18 * 4 + 1] = 8;
+				palptr[18 * 4 + 2] = 0;
+				palptr[18 * 4 + 3] = 0;
+
+				palptr[19 * 4 + 0] = 48;
+				palptr[19 * 4 + 1] = 24;
+				palptr[19 * 4 + 2] = 0;
+				palptr[19 * 4 + 3] = 0;
+
+				palptr[20 * 4 + 0] = 56;
+				palptr[20 * 4 + 1] = 40;
+				palptr[20 * 4 + 2] = 0;
+				palptr[20 * 4 + 3] = 0;
+
+				palptr[21 * 4 + 0] = 0;
+				palptr[21 * 4 + 1] = 0;
+				palptr[21 * 4 + 2] = 24;
+				palptr[21 * 4 + 3] = 0;
+
+				palptr[22 * 4 + 0] = 8;
+				palptr[22 * 4 + 1] = 16;
+				palptr[22 * 4 + 2] = 24;
+				palptr[22 * 4 + 3] = 0;
+
+				palptr[23 * 4 + 0] = 24;
+				palptr[23 * 4 + 1] = 32;
+				palptr[23 * 4 + 2] = 40;
+				palptr[23 * 4 + 3] = 0;
+
+				palptr[24 * 4 + 0] = 16;
+				palptr[24 * 4 + 1] = 24;
+				palptr[24 * 4 + 2] = 0;
+				palptr[24 * 4 + 3] = 0;
+
+				palptr[25 * 4 + 0] = 24;
+				palptr[25 * 4 + 1] = 8;
+				palptr[25 * 4 + 2] = 0;
+				palptr[25 * 4 + 3] = 0;
+
+				palptr[26 * 4 + 0] = 16;
+				palptr[26 * 4 + 1] = 16;
+				palptr[26 * 4 + 2] = 0;
+				palptr[26 * 4 + 3] = 0;
+
+				palptr[27 * 4 + 0] = 40;
+				palptr[27 * 4 + 1] = 40;
+				palptr[27 * 4 + 2] = 32;
+				palptr[27 * 4 + 3] = 0;
+
+				palptr[28 * 4 + 0] = 32;
+				palptr[28 * 4 + 1] = 32;
+				palptr[28 * 4 + 2] = 24;
+				palptr[28 * 4 + 3] = 0;
+
+				palptr[29 * 4 + 0] = 40;
+				palptr[29 * 4 + 1] = 0;
+				palptr[29 * 4 + 2] = 0;
+				palptr[29 * 4 + 3] = 0;
+
+				palptr[30 * 4 + 0] = 24;
+				palptr[30 * 4 + 1] = 24;
+				palptr[30 * 4 + 2] = 16;
+				palptr[30 * 4 + 3] = 0;
+
+				palptr[31 * 4 + 0] = 48;
+				palptr[31 * 4 + 1] = 48;
+				palptr[31 * 4 + 2] = 40;
+				palptr[31 * 4 + 3] = 0;
 			}
 		}
 	}
@@ -2004,9 +2088,10 @@
 }
 
 void AGOSEngine::vc35_clearWindow() {
-	/* unused */
-	_vcPtr += 4;
-	_vgaSpriteChanged++;
+	uint16 num = vcReadNextWord();
+	uint16 color = vcReadNextWord();
+
+	debug(0, "vc35_clearWindow: window %d color %d\n", num, color);
 }
 
 void AGOSEngine::vc36_setWindowImage() {


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