[Scummvm-cvs-logs] SF.net SVN: scummvm: [25825] scummvm/trunk

cyx at users.sourceforge.net cyx at users.sourceforge.net
Sat Feb 24 19:39:09 CET 2007


Revision: 25825
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25825&view=rev
Author:   cyx
Date:     2007-02-24 10:39:08 -0800 (Sat, 24 Feb 2007)

Log Message:
-----------
some fixes and additions for FOTAQ amiga versions

Modified Paths:
--------------
    scummvm/trunk/engines/queen/command.cpp
    scummvm/trunk/engines/queen/command.h
    scummvm/trunk/engines/queen/cutaway.cpp
    scummvm/trunk/engines/queen/defs.h
    scummvm/trunk/engines/queen/display.cpp
    scummvm/trunk/engines/queen/display.h
    scummvm/trunk/engines/queen/graphics.cpp
    scummvm/trunk/engines/queen/grid.cpp
    scummvm/trunk/engines/queen/journal.cpp
    scummvm/trunk/engines/queen/logic.cpp
    scummvm/trunk/engines/queen/logic.h
    scummvm/trunk/engines/queen/queen.cpp
    scummvm/trunk/engines/queen/resource.cpp
    scummvm/trunk/engines/queen/talk.cpp
    scummvm/trunk/sound/mods/rjp1.cpp

Modified: scummvm/trunk/engines/queen/command.cpp
===================================================================
--- scummvm/trunk/engines/queen/command.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/command.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -46,12 +46,12 @@
 	memset(_command, 0, sizeof(_command));
 }
 
-void CmdText::display(uint8 color) {
-	_vm->display()->textCurrentColor(color);
+void CmdText::display(InkColor color) {
+	_vm->display()->textCurrentColor(_vm->display()->getInkColor(color));
 	_vm->display()->setTextCentered(_y, _command, false);
 }
 
-void CmdText::displayTemp(uint8 color, Verb v, const char *name, bool outlined) {
+void CmdText::displayTemp(InkColor color, Verb v, const char *name, bool outlined) {
 	char temp[MAX_COMMAND_LEN] = "";
 	if (_isReversed) {
 		if (name != NULL)
@@ -64,17 +64,17 @@
 			strcat(temp, name);
 		}
 	}
-	_vm->display()->textCurrentColor(color);
+	_vm->display()->textCurrentColor(_vm->display()->getInkColor(color));
 	_vm->display()->setTextCentered(_y, temp, outlined);
 }
 
-void CmdText::displayTemp(uint8 color, const char *name, bool outlined) {
+void CmdText::displayTemp(InkColor color, const char *name, bool outlined) {
 	char temp[MAX_COMMAND_LEN];
 	if (_isReversed)
 		sprintf(temp, "%s %s", name, _command);
 	else
 		sprintf(temp, "%s %s", _command, name);
-	_vm->display()->textCurrentColor(color);
+	_vm->display()->textCurrentColor(_vm->display()->getInkColor(color));
 	_vm->display()->setTextCentered(_y, temp, outlined);
 }
 

Modified: scummvm/trunk/engines/queen/command.h
===================================================================
--- scummvm/trunk/engines/queen/command.h	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/command.h	2007-02-24 18:39:08 UTC (rev 25825)
@@ -38,13 +38,13 @@
 	void clear();
 
 	//! display the command sentence using the specified color
-	void display(uint8 color);
+	void display(InkColor color);
 
 	//! display a temporary command sentence using the specified parameters
-	void displayTemp(uint8 color, Verb v, const char *name = NULL, bool outlined = false);
+	void displayTemp(InkColor color, Verb v, const char *name = NULL, bool outlined = false);
 
 	//! display a temporary command sentence using the specified parameters
-	void displayTemp(uint8 color, const char *name, bool outlined = false);
+	void displayTemp(InkColor color, const char *name, bool outlined = false);
 
 	//! set the verb for the command sentence
 	void setVerb(Verb v);

Modified: scummvm/trunk/engines/queen/cutaway.cpp
===================================================================
--- scummvm/trunk/engines/queen/cutaway.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/cutaway.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -41,11 +41,9 @@
 		const char *filename,
 		char *nextFilename,
 		QueenEngine *vm) {
-	if (vm->resource()->fileExists(filename)) {
-		Cutaway *cutaway = new Cutaway(filename, vm);
-		cutaway->run(nextFilename);
-		delete cutaway;
-	}
+	Cutaway *cutaway = new Cutaway(filename, vm);
+	cutaway->run(nextFilename);
+	delete cutaway;
 }
 
 Cutaway::Cutaway(
@@ -495,6 +493,7 @@
 		anim.bank = 15;
 	} else {
 		if (anim.bank != 13) {
+			assert(anim.bank - 1 < MAX_BANK_NAME_COUNT);
 			_vm->bankMan()->load(_bankNames[anim.bank-1], CUTAWAY_BANK);
 			anim.bank = 8;
 		} else {
@@ -518,7 +517,8 @@
 	anim.scale = (int16)READ_BE_INT16(ptr);
 	ptr += 2;
 
-	if (_vm->resource()->isDemo()) {
+	if ((_vm->resource()->isDemo() && _vm->resource()->getPlatform() == Common::kPlatformPC) ||
+		(_vm->resource()->isInterview() && _vm->resource()->getPlatform() == Common::kPlatformAmiga)) {
 		anim.song = 0;
 	} else {
 		anim.song = (int16)READ_BE_INT16(ptr);

Modified: scummvm/trunk/engines/queen/defs.h
===================================================================
--- scummvm/trunk/engines/queen/defs.h	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/defs.h	2007-02-24 18:39:08 UTC (rev 25825)
@@ -53,16 +53,17 @@
 	DIR_BACK  = 4
 };
 
-enum {
-	INK_BG_PANEL      = 226,
-	INK_JOURNAL       = 248,
-	INK_PINNACLE_ROOM = 243,
-	INK_CMD_SELECT    = 255,
-	INK_CMD_NORMAL    = 225,
-	INK_CMD_LOCK      = 234,
-	INK_TALK_NORMAL   = 7,
-	INK_JOE           = 14,
-	INK_OUTLINED_TEXT = 16
+enum InkColor {
+	INK_BG_PANEL = 0,
+	INK_JOURNAL,
+	INK_PINNACLE_ROOM,
+	INK_CMD_SELECT,
+	INK_CMD_NORMAL,
+	INK_TALK_NORMAL,
+	INK_JOE,
+	INK_OUTLINED_TEXT,
+	
+	INK_COUNT
 };
 
 enum {

Modified: scummvm/trunk/engines/queen/display.cpp
===================================================================
--- scummvm/trunk/engines/queen/display.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/display.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -76,6 +76,8 @@
 	memset(_texts, 0, sizeof(_texts));
 
 	memset(&_dynalum, 0, sizeof(_dynalum));
+
+	setupInkColors();
 }
 
 Display::~Display() {
@@ -174,15 +176,19 @@
 }
 
 void Display::palSetJoeDress() {
-	memcpy(_pal.room + 144 * 3, _palJoeDress, 16 * 3);
-	memcpy(_pal.screen + 144 * 3, _palJoeDress, 16 * 3);
-	palSet(_pal.screen, 144, 159, true);
+	if (_vm->resource()->getPlatform() == Common::kPlatformPC) {
+		memcpy(_pal.room + 144 * 3, _palJoeDress, 16 * 3);
+		memcpy(_pal.screen + 144 * 3, _palJoeDress, 16 * 3);
+		palSet(_pal.screen, 144, 159, true);
+	}
 }
 
 void Display::palSetJoeNormal() {
-	memcpy(_pal.room + 144 * 3, _palJoeClothes, 16 * 3);
-	memcpy(_pal.screen + 144 * 3, _palJoeClothes, 16 * 3);
-	palSet(_pal.screen, 144, 159, true);
+	if (_vm->resource()->getPlatform() == Common::kPlatformPC) {
+		memcpy(_pal.room + 144 * 3, _palJoeClothes, 16 * 3);
+		memcpy(_pal.screen + 144 * 3, _palJoeClothes, 16 * 3);
+		palSet(_pal.screen, 144, 159, true);
+	}
 }
 
 void Display::palSetPanel() {
@@ -260,30 +266,71 @@
 	*palStart   = b;
 }
 
+void Display::palSetAmigaColor(uint8 color, uint16 rgb) {
+	uint8 b = rgb & 0xF; rgb >>= 4;
+	uint8 g = rgb & 0xF; rgb >>= 4;
+	uint8 r = rgb & 0xF;
+	_pal.room[color * 3] = (r << 4) | r;
+	_pal.room[color * 3 + 1] = (g << 4) | g;
+	_pal.room[color * 3 + 2] = (b << 4) | b;
+}
+
 void Display::palCustomColors(uint16 roomNum) {
 	debug(9, "Display::palCustomColors(%d)", roomNum);
-	int i;
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		switch (roomNum) {
+		case 28:
+			palSetAmigaColor(27, 0xC60);
+			palSetAmigaColor(28, 0xA30);
+			palSetAmigaColor(29, 0x810);
+			palSetAmigaColor(30, 0x600);
+			break;
+		case 29:
+			palSetAmigaColor(27, 0X58B);
+			palSetAmigaColor(28, 0x369);
+			palSetAmigaColor(29, 0x158);
+			palSetAmigaColor(30, 0x046);
+			break;
+		case 30:
+			palSetAmigaColor(27, 0x5A4);
+			palSetAmigaColor(28, 0x384);
+			palSetAmigaColor(29, 0x171);
+			palSetAmigaColor(30, 0x056);
+			break;
+		case 31:
+			palSetAmigaColor(27, 0xDA4);
+			palSetAmigaColor(28, 0xB83);
+			palSetAmigaColor(29, 0x873);
+			palSetAmigaColor(30, 0x652);
+			break;
+		case 45:
+			palSetAmigaColor(20, 0xA58);
+			palSetAmigaColor(21, 0x845);
+			break;
+		}
+		return;
+	}
 	switch (roomNum) {
 	case 31:
-		for (i = 72; i < 84; i++) {
+		for (int i = 72; i < 84; i++) {
 			_pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 90 / 100;
 			_pal.room[i * 3 + 2] = _pal.room[i * 3 + 2] * 70 / 100;
 		}
 		break;
 	case 29:
-		for (i = 72; i < 84; i++) {
+		for (int i = 72; i < 84; i++) {
 			_pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 60 / 100;
 			_pal.room[i * 3 + 2] = _pal.room[i * 3 + 2] * 60 / 100;
 		}
 		break;
 	case 30:
-		for (i = 72; i < 84; i++) {
+		for (int i = 72; i < 84; i++) {
 			_pal.room[i * 3 + 0] = _pal.room[i * 3 + 0] * 60 / 100;
 			_pal.room[i * 3 + 1] = _pal.room[i * 3 + 1] * 80 / 100;
 		}
 		break;
 	case 28:
-		for (i = 72; i < 84; i++) {
+		for (int i = 72; i < 84; i++) {
 			_pal.room[i * 3 + 0] = _pal.room[i * 3 + 0] * 80 / 100;
 			_pal.room[i * 3 + 2] = _pal.room[i * 3 + 1] * 60 / 100;
 		}
@@ -304,6 +351,25 @@
 	int i;
 
 	++scrollx;
+
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		switch (roomNum) {
+		case 4:
+			if ((scrollx & 1) == 0) {
+				palScroll(24, 64);
+				loPal = 24;
+				hiPal = 64;
+			}
+			break;
+		case 74:
+			palScroll(28, 31);
+			loPal = 28;
+			hiPal = 31;
+			break;
+		}
+		return;
+	}
+
 	switch (roomNum) {
 	case 123: {
 			static int16 j = 0, jdir = 2;
@@ -511,36 +577,38 @@
 }
 
 void Display::palCustomLightsOff(uint16 roomNum) {
-	int end = 223;
-	int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 16;
-	int n = end - start + 1;
-
-	memset(_pal.screen + start * 3, 0, n * 3);
-	palSet(_pal.screen, start, end, true);
-
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		memset(_pal.screen, 0, 31 * 3);
+		_pal.screen[31 * 3] = 15;
+		_pal.screen[31 * 3 + 1] = 15;
+		_pal.screen[31 * 3 + 2] = 0;
+		palSet(_pal.screen, 0, 31, true);
+	} else {
+		const int end = 223;
+		const int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 16;
+		const int n = end - start + 1;
+		memset(_pal.screen + start * 3, 0, n * 3);
+		palSet(_pal.screen, start, end, true);
+	}
 	_pal.scrollable = false;
 }
 
 void Display::palCustomLightsOn(uint16 roomNum) {
-	int end = 223;
-	int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 0;
-	int n = end - start + 1;
-
-	memcpy(_pal.screen + start * 3, _pal.room + start * 3, n * 3);
-	palSet(_pal.screen, start, end, true);
-
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		memcpy(_pal.screen, _pal.room, 32 * 3);
+		palSet(_pal.screen, 0, 31, true);
+	} else {
+		const int end = 223;
+		const int start = (roomNum == ROOM_FLODA_FRONTDESK) ? 32 : 0;
+		const int n = end - start + 1;
+		memcpy(_pal.screen + start * 3, _pal.room + start * 3, n * 3);
+		palSet(_pal.screen, start, end, true);
+	}
 	_pal.dirtyMin = 0;
 	_pal.dirtyMax = 223;
 	_pal.scrollable = true;
 }
 
-void Display::palSetPanelColor(uint8 color, uint8 r, uint8 g, uint8 b) {
-	color -= 144;
-	_pal.panel[color * 3] = r;
-	_pal.panel[color * 3 + 1] = g;
-	_pal.panel[color * 3 + 2] = b;
-}
-
 int Display::getNumColorsForRoom(uint16 room) const {
 	int n = 224;
 	if (room >= 114 && room <= 125) {
@@ -599,7 +667,7 @@
 		if (_fullRefresh) {
 			memset(_dirtyBlocks, 0, _dirtyBlocksWidth * _dirtyBlocksHeight);
 		}
-		debug(7, "Display::update() - Full blit (%d)", _fullRefresh);
+		debug(9, "Display::update() - Full blit (%d)", _fullRefresh);
 	} else {
 		uint16 count = 0;
 		uint8 *scrBuf = _screenBuf;
@@ -628,7 +696,7 @@
 		if (count != 0) {
 			_system->updateScreen();
 		}
-		debug(7, "Display::update() - Dirtyblocks blit (%d)", count);
+		debug(9, "Display::update() - Dirtyblocks blit (%d)", count);
 	}
 }
 
@@ -642,14 +710,6 @@
 
 	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
 		decodeLBM(data, dataSize, _panelBuf, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 0, 32, 144);
-		// setup special colors
-		// XXX set correct color values
-		palSetPanelColor(INK_BG_PANEL, 255, 255, 255);
-		palSetPanelColor(INK_JOURNAL, 255, 255, 255);
-		palSetPanelColor(INK_PINNACLE_ROOM, 255, 255, 255);
-		palSetPanelColor(INK_CMD_SELECT, 255, 255, 255);
-		palSetPanelColor(INK_CMD_NORMAL, 255, 255, 255);
-		palSetPanelColor(INK_CMD_LOCK, 255, 255, 255);
 	} else {
 		WRITE_LE_UINT16(data + 14, PANEL_H - 10);
 		decodePCX(data, dataSize, _panelBuf + PANEL_W * 10, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 144, 256);
@@ -692,8 +752,8 @@
 }
 
 void Display::drawInventoryItem(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h) {
-	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
-		if (data != NULL) {
+	if (data != NULL) {
+		if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
 			uint8 *dst = _panelBuf + y * PANEL_W + x;
 			while (h--) {
 				for (int i = 0; i < w; ++i) {
@@ -702,14 +762,10 @@
 				dst += PANEL_W;
 			}
 		} else {
-			fill(_panelBuf, PANEL_W, x, y, w, h, 144 + 2);
+			blit(_panelBuf, PANEL_W, x, y, data, w, w, h, false, false);
 		}
 	} else {
-		if (data != NULL) {
-			blit(_panelBuf, PANEL_W, x, y, data, w, w, h, false, false);
-		} else {
-			fill(_panelBuf, PANEL_W, x, y, w, h, INK_BG_PANEL);
-		}
+		fill(_panelBuf, PANEL_W, x, y, w, h, getInkColor(INK_BG_PANEL));
 	}
 	setDirtyBlock(x, 150 + y, w, h);
 }
@@ -975,6 +1031,29 @@
 	}
 }
 
+void Display::setupInkColors() {
+	memset(_inkColors, 0, sizeof(_inkColors));
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		_inkColors[INK_BG_PANEL] = 144 + 2;
+		_inkColors[INK_JOURNAL] = 144 + 16;
+		_inkColors[INK_PINNACLE_ROOM] = 144 + 14;
+		_inkColors[INK_CMD_SELECT] = 144 + 17;
+		_inkColors[INK_CMD_NORMAL] = 144 + 1;
+		_inkColors[INK_TALK_NORMAL] = 144 + 1;
+		_inkColors[INK_JOE] = 144 + 17;
+		_inkColors[INK_OUTLINED_TEXT] = 0;
+	} else {
+		_inkColors[INK_BG_PANEL] = 226;
+		_inkColors[INK_JOURNAL] = 248;
+		_inkColors[INK_PINNACLE_ROOM] = 243;
+		_inkColors[INK_CMD_SELECT] = 255;
+		_inkColors[INK_CMD_NORMAL] = 225;
+		_inkColors[INK_TALK_NORMAL] = 7;
+		_inkColors[INK_JOE] = 14;
+		_inkColors[INK_OUTLINED_TEXT] = 16;
+	}
+}
+
 void Display::setFocusRect(const Common::Rect& rect) {
 	_system->setFocusRectangle(rect);
 }
@@ -1024,7 +1103,7 @@
 		const uint8 *ftch = _font + ch * 8;
 		if (outlined) {
 			for (int i = 0; i < 8; ++i) {
-				drawChar(x + dx[i], y + dy[i], INK_OUTLINED_TEXT, ftch);
+				drawChar(x + dx[i], y + dy[i], getInkColor(INK_OUTLINED_TEXT), ftch);
 			}
 		}
 		drawChar(x, y, color, ftch);

Modified: scummvm/trunk/engines/queen/display.h
===================================================================
--- scummvm/trunk/engines/queen/display.h	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/display.h	2007-02-24 18:39:08 UTC (rev 25825)
@@ -72,6 +72,8 @@
 	//! scroll some palette colors
 	void palScroll(int start, int end);
 
+	void palSetAmigaColor(uint8 color, uint16 rgb);
+
 	//! custom palette effect for the specified room
 	void palCustomColors(uint16 roomNum);
 
@@ -84,8 +86,6 @@
 	void palCustomLightsOff(uint16 roomNum);
 	void palCustomLightsOn(uint16 roomNum);
 
-	void palSetPanelColor(uint8 color, uint8 r, uint8 g, uint8 b);
-
 	//! mark all palette entries as dirty
 	void palSetAllDirty() { _pal.dirtyMin = 0; _pal.dirtyMax = 255; }
 
@@ -151,6 +151,10 @@
 	//! remove entries from the texts list
 	void clearTexts(uint16 y1, uint16 y2);
 
+	void setupInkColors();
+
+	uint8 getInkColor(InkColor color) const { return _inkColors[color]; }
+
 	//! change the current text color
 	void textCurrentColor(uint8 color) { _curTextColor = color; }
 
@@ -239,6 +243,8 @@
 	//! font justification sizes
 	uint8 _charWidth[256];
 
+	uint8 _inkColors[INK_COUNT];
+
 	Common::RandomSource _rnd;
 	Dynalum _dynalum;
 	OSystem *_system;

Modified: scummvm/trunk/engines/queen/graphics.cpp
===================================================================
--- scummvm/trunk/engines/queen/graphics.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/graphics.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -295,18 +295,22 @@
 			0x00, 0x00, 0x00, 0x20
 		};
 		uint8 cursorData[16 * 15];
+		memset(cursorData, 0, sizeof(cursorData));
 		const uint8 *src = defaultAmigaCursor;
 		int i = 0;
 		for (int h = 0; h < 15; ++h) {
 			for (int b = 0; b < 16; ++b) {
 				const uint16 mask = (1 << (15 - b));
-				cursorData[i] = 0;
+				uint8 color = 0;
 				if (READ_BE_UINT16(src + 0) & mask) {
-					cursorData[i] |= 4;
+					color |= 1;
 				}
 				if (READ_BE_UINT16(src + 2) & mask) {
-					cursorData[i] |= 8;
+					color |= 2;
 				}
+				if (color != 0) {
+					cursorData[i] = 0x90 + color;
+				}
 				++i;
 			}
 			src += 4;

Modified: scummvm/trunk/engines/queen/grid.cpp
===================================================================
--- scummvm/trunk/engines/queen/grid.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/grid.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -72,6 +72,7 @@
 
 void Grid::setZone(GridScreen screen, uint16 zoneNum, uint16 x1, uint16 y1, uint16 x2, uint16 y2) {
 	debug(9, "Grid::setZone(%d, %d, (%d,%d), (%d,%d))", screen, zoneNum, x1, y1, x2, y2);
+	assert(zoneNum < MAX_ZONES_NUMBER);
 	ZoneSlot *pzs = &_zones[screen][zoneNum];
 	pzs->valid = true;
 	pzs->box.x1 = x1;
@@ -82,6 +83,7 @@
 
 void Grid::setZone(GridScreen screen, uint16 zoneNum, const Box &box) {
 	debug(9, "Grid::setZone(%d, %d, (%d,%d), (%d,%d))", screen, zoneNum, box.x1, box.y1, box.x2, box.y2);
+	assert(zoneNum < MAX_ZONES_NUMBER);
 	ZoneSlot *pzs = &_zones[screen][zoneNum];
 	pzs->valid = true;
 	pzs->box = box;

Modified: scummvm/trunk/engines/queen/journal.cpp
===================================================================
--- scummvm/trunk/engines/queen/journal.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/journal.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -117,7 +117,7 @@
 	_vm->graphics()->clearBobs();
 	_vm->display()->clearTexts(0, GAME_SCREEN_HEIGHT - 1);
 	_vm->bankMan()->eraseFrames(false);
-	_vm->display()->textCurrentColor(INK_JOURNAL);
+	_vm->display()->textCurrentColor(_vm->display()->getInkColor(INK_JOURNAL));
 
 	_vm->grid()->clear(GS_ROOM);
 	for (int i = 0; i < MAX_ZONES; ++i) {
@@ -159,7 +159,7 @@
 	if (_textField.enabled) {
 		int16 x = _textField.x + _textField.posCursor;
 		int16 y = _textField.y + _currentSaveSlot * _textField.h + 8;
-		_vm->display()->drawBox(x, y, x + 6, y, INK_JOURNAL);
+		_vm->display()->drawBox(x, y, x + 6, y, _vm->display()->getInkColor(INK_JOURNAL));
 	}
 	_vm->display()->forceFullRefresh();
 	_vm->display()->update();

Modified: scummvm/trunk/engines/queen/logic.cpp
===================================================================
--- scummvm/trunk/engines/queen/logic.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/logic.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -57,6 +57,7 @@
 	_journal = new Journal(vm);
 	_scene = 0;
 	readQueenJas();
+	setupSpecialMoveTable();
 }
 
 Logic::~Logic() {
@@ -1451,10 +1452,76 @@
 	_vm->display()->showMouseCursor(true);
 }
 
+void Logic::setupSpecialMoveTable() {
+	memset(_specialMoves, 0, sizeof(_specialMoves));
+	if (_vm->resource()->isDemo()) {
+		_specialMoves[4]  = &Logic::asmMakeJoeUseUnderwear;
+		_specialMoves[5]  = &Logic::asmSwitchToDressPalette;
+		_specialMoves[14] = &Logic::asmEndDemo;
+	} else if (_vm->resource()->isInterview()) {
+		_specialMoves[1]  = &Logic::asmInterviewIntro;
+		_specialMoves[2]  = &Logic::asmEndInterview;
+	} else {
+		_specialMoves[2]  = &Logic::asmMakeJoeUseDress;
+		_specialMoves[3]  = &Logic::asmMakeJoeUseNormalClothes;
+		_specialMoves[4]  = &Logic::asmMakeJoeUseUnderwear;
+		_specialMoves[5]  = &Logic::asmSwitchToDressPalette;
+		_specialMoves[6]  = &Logic::asmSwitchToNormalPalette;
+		_specialMoves[7]  = &Logic::asmStartCarAnimation;       // room 74
+		_specialMoves[8]  = &Logic::asmStopCarAnimation;        // room 74
+		_specialMoves[9]  = &Logic::asmStartFightAnimation;     // room 69
+		_specialMoves[10] = &Logic::asmWaitForFrankPosition;    // c69e.cut
+		_specialMoves[11] = &Logic::asmMakeFrankGrowing;        // c69z.cut
+		_specialMoves[12] = &Logic::asmMakeRobotGrowing;        // c69z.cut
+		_specialMoves[13] = &Logic::asmShrinkRobot;
+		_specialMoves[14] = &Logic::asmEndGame;
+		_specialMoves[15] = &Logic::asmPutCameraOnDino;
+		_specialMoves[16] = &Logic::asmPutCameraOnJoe;
+		_specialMoves[17] = &Logic::asmAltIntroPanRight;        // cintr.cut
+		_specialMoves[18] = &Logic::asmAltIntroPanLeft;         // cintr.cut
+		_specialMoves[19] = &Logic::asmSetAzuraInLove;
+		_specialMoves[20] = &Logic::asmPanRightFromJoe;
+		_specialMoves[21] = &Logic::asmSetLightsOff;
+		_specialMoves[22] = &Logic::asmSetLightsOn;
+		_specialMoves[23] = &Logic::asmSetManequinAreaOn;
+		_specialMoves[24] = &Logic::asmPanToJoe;
+		_specialMoves[25] = &Logic::asmTurnGuardOn;
+		_specialMoves[26] = &Logic::asmPanLeft320To144;
+		_specialMoves[27] = &Logic::asmSmooch;
+		_specialMoves[28] = &Logic::asmMakeLightningHitPlane;
+		_specialMoves[29] = &Logic::asmScaleBlimp;
+		_specialMoves[30] = &Logic::asmScaleEnding;
+		_specialMoves[31] = &Logic::asmWaitForCarPosition;
+		_specialMoves[32] = &Logic::asmShakeScreen;
+		_specialMoves[33] = &Logic::asmAttemptPuzzle;
+		_specialMoves[34] = &Logic::asmScaleTitle;
+		_specialMoves[36] = &Logic::asmPanRightToHugh;
+		_specialMoves[37] = &Logic::asmMakeWhiteFlash;
+		_specialMoves[38] = &Logic::asmPanRightToJoeAndRita;
+		_specialMoves[39] = &Logic::asmPanLeftToBomb;            // cdint.cut
+		if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+			_specialMoves[5] = 0;
+			_specialMoves[6] = 0;
+			_specialMoves[13] = 0;
+			_specialMoves[17] = 0;
+			_specialMoves[18] = 0;
+			_specialMoves[27] = &Logic::asmSmoochNoScroll;
+			_specialMoves[32] = 0;
+			_specialMoves[34] = &Logic::asmScrollTitle;
+			_specialMoves[35] = 0;
+			_specialMoves[36] = 0;
+			_specialMoves[37] = 0;
+			_specialMoves[38] = 0;
+			_specialMoves[39] = 0;
+		}
+	}
+}
+
 void Logic::executeSpecialMove(uint16 sm) {
 	debug(6, "Special move: %d", sm);
-	if (!handleSpecialMove(sm))
-		warning("unhandled / invalid special move : %d", sm);
+	if (sm < ARRAYSIZE(_specialMoves) && _specialMoves[sm] != 0) {
+		(this->*_specialMoves[sm])();
+	}
 }
 
 void Logic::asmMakeJoeUseDress() {
@@ -1505,14 +1572,21 @@
 	_vm->bankMan()->unpack(1, 38, 15);
 	BobSlot *bobFrank = _vm->graphics()->bob(5);
 	bobFrank->frameNum = 38;
-	bobFrank->curPos(160, 200);
-
-	int i;
-	for (i = 10; i <= 100; i += 4) {
-		bobFrank->scale = i;
-		_vm->update();
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		bobFrank->x = 160;
+		bobFrank->scale = 100;
+		for (int i = 300; i >= 200; i -= 5) {
+			bobFrank->y = i;
+			_vm->update();
+		}		
+	} else {
+		bobFrank->curPos(160, 200);
+		for (int i = 10; i <= 100; i += 4) {
+			bobFrank->scale = i;
+			_vm->update();
+		}
 	}
-	for (i = 0; i <= 20; ++i) {
+	for (int i = 0; i <= 20; ++i) {
 		_vm->update();
 	}
 
@@ -1528,14 +1602,21 @@
 	_vm->bankMan()->unpack(1, 38, 15);
 	BobSlot *bobRobot = _vm->graphics()->bob(5);
 	bobRobot->frameNum = 38;
-	bobRobot->curPos(160, 200);
-
-	int i;
-	for (i = 10; i <= 100; i += 4) {
-		bobRobot->scale = i;
-		_vm->update();
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		bobRobot->x = 160;
+		bobRobot->scale = 100;
+		for (int i = 350; i >= 200; i -= 5) {
+			bobRobot->y = i;
+			_vm->update();
+		}		
+	} else {
+		bobRobot->curPos(160, 200);
+		for (int i = 10; i <= 100; i += 4) {
+			bobRobot->scale = i;
+			_vm->update();
+		}
 	}
-	for (i = 0; i <= 20; ++i) {
+	for (int i = 0; i <= 20; ++i) {
 		_vm->update();
 	}
 
@@ -1708,6 +1789,19 @@
 	}
 }
 
+void Logic::asmSmoochNoScroll() {
+	_vm->graphics()->putCameraOnBob(-1);
+	BobSlot *bobAzura = _vm->graphics()->bob(5);
+	BobSlot *bobJoe = _vm->graphics()->bob(6);
+	for (int i = 0; i < 320; i += 8) {
+		if (bobJoe->x - bobAzura->x > 128) {
+			bobAzura->x += 2;
+			bobJoe->x -= 2;
+		}
+		_vm->update();
+	}	
+}
+
 void Logic::asmMakeLightningHitPlane() {
 	_vm->graphics()->putCameraOnBob(-1);
 	short iy = 0, x, ydir = -1, j, k;
@@ -1717,7 +1811,11 @@
 
 	planeBob->y = 135;
 
-	planeBob->scale = 20;
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		planeBob->scale = 100;
+	} else {
+		planeBob->scale = 20;
+	}
 
 	for (x = 660; x > 163; x -= 6) {
 		planeBob->x = x;
@@ -1791,11 +1889,13 @@
 	BobSlot *bob = _vm->graphics()->bob(7);
 	int16 x = bob->x;
 	int16 y = bob->y;
+	bob->scale = 100;
 	while (bob->x > 150) {
 		bob->x = x * 256 / z + 150;
 		bob->y = y * 256 / z + 112;
-		bob->scale = 100 * 256 / z;
-
+		if (_vm->resource()->getPlatform() != Common::kPlatformAmiga) {
+			bob->scale = 100 * 256 / z;
+		}
 		++z;
 		if (z % 6 == 0) {
 			--x;
@@ -1808,14 +1908,14 @@
 void Logic::asmScaleEnding() {
 	_vm->graphics()->bob(7)->active = false; // Turn off blimp
 	BobSlot *b = _vm->graphics()->bob(20);
-	b->x = 160;
-	b->y = 100;
-	int i;
-	for (i = 5; i <= 100; i += 5) {
-		b->scale = i;
-		_vm->update();
+	b->curPos(160, 100);
+	if (_vm->resource()->getPlatform() != Common::kPlatformAmiga) {
+		for (int i = 5; i <= 100; i += 5) {
+			b->scale = i;
+			_vm->update();
+		}
 	}
-	for (i = 0; i < 50; ++i) {
+	for (int i = 0; i < 50; ++i) {
 		_vm->update();
 	}
 	_vm->display()->palFadeOut(_currentRoom);
@@ -1858,6 +1958,18 @@
 	}
 }
 
+void Logic::asmScrollTitle() {
+	BobSlot *bob = _vm->graphics()->bob(5);
+	bob->animating = false;
+	bob->x = 161;
+	bob->y = 300;
+	bob->scale = 100;
+	while (bob->y >= 120) {
+		bob->y -= 4;
+		_vm->update();
+	}
+}
+
 void Logic::asmPanRightToHugh() {
 	BobSlot *bob_thugA1 = _vm->graphics()->bob(20);
 	BobSlot *bob_thugA2 = _vm->graphics()->bob(21);
@@ -2063,23 +2175,6 @@
 	return false;
 }
 
-bool LogicDemo::handleSpecialMove(uint16 sm) {
-	switch (sm) {
-	case 4:
-		asmMakeJoeUseUnderwear();
-		break;
-	case 5:
-		asmSwitchToDressPalette();
-		break;
-	case 14:
-		asmEndDemo();
-		break;
-	default:
-		return false;
-	}
-	return true;
-}
-
 void LogicInterview::useJournal() {
 	// no-op
 }
@@ -2096,19 +2191,6 @@
 	return false;
 }
 
-bool LogicInterview::handleSpecialMove(uint16 sm) {
-	switch (sm) {
-	case 1:
-		asmInterviewIntro();
-		break;
-	case 2:
-		asmEndInterview();
-		break;
-	default:
-		return false;
-	}
-	return true;
-}
 
 void LogicGame::useJournal() {
 	_vm->command()->clear(false);
@@ -2124,13 +2206,13 @@
 		displayRoom(currentRoom(), RDM_FADE_NOJOE, 100, 2, true);
 		playCutaway("copy.cut");
 		playCutaway("clogo.cut");
-
-		if (ConfMan.getBool("alt_intro") && _vm->resource()->isCD()) {
-			playCutaway("cintr.cut");
-		} else {
-			playCutaway("cdint.cut");
+		if (_vm->resource()->getPlatform() != Common::kPlatformAmiga) {
+			if (ConfMan.getBool("alt_intro") && _vm->resource()->isCD()) {
+				playCutaway("cintr.cut");
+			} else {
+				playCutaway("cdint.cut");
+			}
 		}
-
 		playCutaway("cred.cut");
 		_vm->display()->palSetPanel();
 		sceneReset();
@@ -2145,64 +2227,4 @@
 	return false;
 }
 
-bool LogicGame::handleSpecialMove(uint16 sm) {
-	typedef void (LogicGame::*SpecialMoveProc)();
-	static const SpecialMoveProc asmTable[] = {
-		/* 00 */
-		0,
-		0,
-		&LogicGame::asmMakeJoeUseDress,
-		&LogicGame::asmMakeJoeUseNormalClothes,
-		/* 04 */
-		&LogicGame::asmMakeJoeUseUnderwear,
-		&LogicGame::asmSwitchToDressPalette,
-		&LogicGame::asmSwitchToNormalPalette,
-		&LogicGame::asmStartCarAnimation,       // room 74
-		/* 08 */
-		&LogicGame::asmStopCarAnimation,        // room 74
-		&LogicGame::asmStartFightAnimation,     // room 69
-		&LogicGame::asmWaitForFrankPosition,    // c69e.cut
-		&LogicGame::asmMakeFrankGrowing,        // c69z.cut
-		/* 12 */
-		&LogicGame::asmMakeRobotGrowing,        // c69z.cut
-		&LogicGame::asmShrinkRobot,
-		&LogicGame::asmEndGame,
-		&LogicGame::asmPutCameraOnDino,
-		/* 16 */
-		&LogicGame::asmPutCameraOnJoe,
-		&LogicGame::asmAltIntroPanRight,        // cintr.cut
-		&LogicGame::asmAltIntroPanLeft,         // cintr.cut
-		&LogicGame::asmSetAzuraInLove,
-		/* 20 */
-		&LogicGame::asmPanRightFromJoe,
-		&LogicGame::asmSetLightsOff,
-		&LogicGame::asmSetLightsOn,
-		&LogicGame::asmSetManequinAreaOn,
-		/* 24 */
-		&LogicGame::asmPanToJoe,
-		&LogicGame::asmTurnGuardOn,
-		&LogicGame::asmPanLeft320To144,
-		&LogicGame::asmSmooch,
-		/* 28 */
-		&LogicGame::asmMakeLightningHitPlane,
-		&LogicGame::asmScaleBlimp,
-		&LogicGame::asmScaleEnding,
-		&LogicGame::asmWaitForCarPosition,
-		/* 32 */
-		&LogicGame::asmShakeScreen,
-		&LogicGame::asmAttemptPuzzle,
-		&LogicGame::asmScaleTitle,
-		0,
-		/* 36 */
-		&LogicGame::asmPanRightToHugh,
-		&LogicGame::asmMakeWhiteFlash,
-		&LogicGame::asmPanRightToJoeAndRita,
-		&LogicGame::asmPanLeftToBomb            // cdint.cut
-	};
-	if (sm >= ARRAYSIZE(asmTable) || asmTable[sm] == 0)
-		return false;
-	(this->*asmTable[sm])();
-	return true;
-}
-
 } // End of namespace Queen

Modified: scummvm/trunk/engines/queen/logic.h
===================================================================
--- scummvm/trunk/engines/queen/logic.h	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/logic.h	2007-02-24 18:39:08 UTC (rev 25825)
@@ -207,6 +207,8 @@
 	//! enter the Journal (save/load, configuration)
 	virtual void useJournal() = 0;
 
+	void setupSpecialMoveTable();
+
 	//! execute a special move
 	void executeSpecialMove(uint16 sm);
 
@@ -222,6 +224,8 @@
 		TALK_SELECTED_COUNT = 86
 	};
 
+	typedef void (Logic::*SpecialMoveProc)();
+
 protected:
 
 	void readQueenJas();
@@ -252,6 +256,7 @@
 	void asmTurnGuardOn();
 	void asmPanLeft320To144();
 	void asmSmooch();
+	void asmSmoochNoScroll();
 	void asmMakeLightningHitPlane();
 	void asmScaleBlimp();
 	void asmScaleEnding();
@@ -259,6 +264,7 @@
 	void asmShakeScreen();
 	void asmAttemptPuzzle();
 	void asmScaleTitle();
+	void asmScrollTitle();
 	void asmPanRightToHugh();
 	void asmMakeWhiteFlash();
 	void asmPanRightToJoeAndRita();
@@ -268,7 +274,6 @@
 	void asmEndInterview();
 
 	virtual bool preChangeRoom() = 0;
-	virtual bool handleSpecialMove(uint16 sm) = 0;
 
 
 	uint16 _currentRoom;
@@ -361,6 +366,8 @@
 
 	//! cutscene counter
 	int _scene;
+	
+	SpecialMoveProc _specialMoves[40];
 
 	Credits *_credits;
 	Journal *_journal;
@@ -377,7 +384,6 @@
 protected:
 
 	bool preChangeRoom();
-	bool handleSpecialMove(uint16 sm);
 };
 
 class LogicInterview : public Logic {
@@ -389,7 +395,6 @@
 protected:
 
 	bool preChangeRoom();
-	bool handleSpecialMove(uint16 sm);
 };
 
 class LogicGame : public Logic {
@@ -401,7 +406,6 @@
 protected:
 
 	bool preChangeRoom();
-	bool handleSpecialMove(uint16 sm);
 };
 
 

Modified: scummvm/trunk/engines/queen/queen.cpp
===================================================================
--- scummvm/trunk/engines/queen/queen.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/queen.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -127,6 +127,7 @@
 void QueenEngine::registerDefaultSettings() {
 	ConfMan.registerDefault("talkspeed", Logic::DEFAULT_TALK_SPEED);
 	ConfMan.registerDefault("subtitles", true);
+	_subtitles = true;
 }
 
 void QueenEngine::checkOptionSettings() {
@@ -137,15 +138,15 @@
 		_talkSpeed = MAX_TEXT_SPEED;
 	}
 
+	// demo and interview versions don't have speech at all
+	if (_sound->speechOn() && (_resource->isDemo() || _resource->isInterview())) {
+		_sound->speechToggle(false);
+	}
+
 	// ensure text is always on when voice is off
 	if (!_sound->speechOn()) {
 		_subtitles = true;
 	}
-
-	// demo and interview versions don't have speech at all
-	if (_sound->speechOn() && (_resource->isDemo() || _resource->isInterview())) {
-		_sound->speechToggle(false);
-	}
 }
 
 void QueenEngine::readOptionSettings() {

Modified: scummvm/trunk/engines/queen/resource.cpp
===================================================================
--- scummvm/trunk/engines/queen/resource.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/resource.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -90,6 +90,10 @@
 }
 
 ResourceEntry *Resource::resourceEntry(const char *filename) const {
+	if (filename[0] == 0 || strlen(filename) >= 14) {
+		uint8 *p = 0;
+		*p = 0x1234;
+	}
 	assert(filename[0] && strlen(filename) < 14);
 
 	Common::String entryName(filename);

Modified: scummvm/trunk/engines/queen/talk.cpp
===================================================================
--- scummvm/trunk/engines/queen/talk.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/engines/queen/talk.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -1178,7 +1178,7 @@
 	int talkZone[5];
 	int i;
 
-	_vm->display()->textCurrentColor(INK_TALK_NORMAL);
+	_vm->display()->textCurrentColor(_vm->display()->getInkColor(INK_TALK_NORMAL));
 
 	_vm->graphics()->setupArrows();
 	BobSlot *arrowBobUp   = _vm->graphics()->bob(Graphics::ARROW_BOB_UP);
@@ -1269,7 +1269,7 @@
 						int16 y;
 						const Box *b = _vm->grid()->zone(GS_PANEL, oldZone);
 						for (y = b->y1; y < b->y2; y += 10)
-							_vm->display()->textColor(150 + y, INK_TALK_NORMAL);
+							_vm->display()->textColor(150 + y, _vm->display()->getInkColor(INK_TALK_NORMAL));
 						oldZone = 0;
 					}
 					if (mouseButton != 0) {
@@ -1292,13 +1292,13 @@
 						if (zone > 0) {
 							const Box *b = _vm->grid()->zone(GS_PANEL, zone);
 							for (y = b->y1; y < b->y2; y += 10)
-								_vm->display()->textColor(150 + y, INK_JOE);
+								_vm->display()->textColor(150 + y, _vm->display()->getInkColor(INK_JOE));
 						}
 
 						if (oldZone > 0) {
 							const Box *b = _vm->grid()->zone(GS_PANEL, oldZone);
 							for (y = b->y1; y < b->y2; y += 10)
-								_vm->display()->textColor(150 + y, INK_TALK_NORMAL);
+								_vm->display()->textColor(150 + y, _vm->display()->getInkColor(INK_TALK_NORMAL));
 						}
 
 						oldZone = zone;

Modified: scummvm/trunk/sound/mods/rjp1.cpp
===================================================================
--- scummvm/trunk/sound/mods/rjp1.cpp	2007-02-24 18:25:58 UTC (rev 25824)
+++ scummvm/trunk/sound/mods/rjp1.cpp	2007-02-24 18:39:08 UTC (rev 25825)
@@ -227,7 +227,9 @@
 void Rjp1::playChannel(Rjp1Channel *channel) {
 	if (channel->active) {
 		turnOnChannel(channel);
-		playSongSequence(channel);
+		if (channel->sequenceData) {
+			playSongSequence(channel);
+		}
 		modulateVolume(channel);
 		modulatePeriod(channel);
 	}


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