[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