[Scummvm-cvs-logs] SF.net SVN: scummvm: [28848] scummvm/trunk/engines/agi

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Sep 3 17:03:50 CEST 2007


Revision: 28848
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28848&view=rev
Author:   thebluegr
Date:     2007-09-03 08:03:50 -0700 (Mon, 03 Sep 2007)

Log Message:
-----------
Some updates for Mickey: objects are shown now (though still incorrectly), implemented some incomplete code for the ship's blinking lights, implemented the scene animation function

Modified Paths:
--------------
    scummvm/trunk/engines/agi/loader_preagi.cpp
    scummvm/trunk/engines/agi/picture.cpp
    scummvm/trunk/engines/agi/picture.h
    scummvm/trunk/engines/agi/preagi_mickey.cpp

Modified: scummvm/trunk/engines/agi/loader_preagi.cpp
===================================================================
--- scummvm/trunk/engines/agi/loader_preagi.cpp	2007-09-03 12:23:50 UTC (rev 28847)
+++ scummvm/trunk/engines/agi/loader_preagi.cpp	2007-09-03 15:03:50 UTC (rev 28848)
@@ -138,6 +138,7 @@
 	int ec = errOK;
 	uint8 *data = NULL;
 	char szFile[255] = {0};
+	Common::File infile;
 
 	if (n > MAX_DIRS)
 		return errBadResource;
@@ -153,7 +154,6 @@
 			data = new uint8[4096];
 
 			sprintf(szFile, IDS_MSA_PATH_PIC, n);
-			Common::File infile;
 			if (!infile.open(szFile))
 				return errBadResource;
 			infile.read(data, infile.size());
@@ -185,7 +185,23 @@
 		*/
 		break;
 	case rVIEW:
-		//
+			data = new uint8[4096];
+
+			sprintf(szFile, IDS_MSA_PATH_OBJ, IDS_MSA_NAME_OBJ[n]);
+
+			if (!infile.open(szFile))
+				return errBadResource;
+			infile.read(data, infile.size());
+
+			if (data != NULL) {
+				_vm->_game.pictures[n].rdata = data;
+				_vm->_game.dirPic[n].len = infile.size();
+				_vm->_game.dirPic[n].flags |= RES_LOADED;
+			} else {
+				ec = errBadResource;
+			}
+
+			infile.close();
 		break;
 	default:
 		ec = errBadResource;

Modified: scummvm/trunk/engines/agi/picture.cpp
===================================================================
--- scummvm/trunk/engines/agi/picture.cpp	2007-09-03 12:23:50 UTC (rev 28847)
+++ scummvm/trunk/engines/agi/picture.cpp	2007-09-03 15:03:50 UTC (rev 28848)
@@ -773,8 +773,8 @@
  * Show AGI picture.
  * This function copies a ``hidden'' AGI picture to the output device.
  */
-void PictureMgr::showPic(int x, int pic_width, int pic_height) {
-	int i, y;
+void PictureMgr::showPic(int x, int y, int pic_width, int pic_height) {
+	int i, y1;
 	int offset;
 	width = pic_width;
 	height = pic_height;
@@ -783,12 +783,22 @@
 
 	i = 0;
 	offset = _vm->_game.lineMinPrint * CHAR_LINES;
-	for (y = 0; y < height; y++) {
-		_gfx->putPixelsA(x, y + offset, width, &_vm->_game.sbuf16c[i]);
+	for (y1 = y; y1 < y + height; y1++) {
+		_gfx->putPixelsA(x, y1 + offset, width, &_vm->_game.sbuf16c[i]);
 		i += width;
 	}
 
 	_gfx->flushScreen();
 }
 
+// preagi needed functions (for plotPattern)
+void PictureMgr::setPattern(uint8 code, uint8 num) {
+	patCode = code;
+	patNum = num;
+}
+
+void PictureMgr::setColor(uint8 color) {
+	scrColour = color;
+}
+
 } // End of namespace Agi

Modified: scummvm/trunk/engines/agi/picture.h
===================================================================
--- scummvm/trunk/engines/agi/picture.h	2007-09-03 12:23:50 UTC (rev 28847)
+++ scummvm/trunk/engines/agi/picture.h	2007-09-03 15:03:50 UTC (rev 28848)
@@ -69,7 +69,6 @@
 	void yCorner();
 	void fill();
 	int plotPatternPoint(int x, int y, int bitpos);
-	void plotPattern(int x, int y);
 	void plotBrush();
 	void drawPicture();
 
@@ -85,8 +84,14 @@
 
 	int decodePicture(int n, int clear, bool agi256 = false, int pic_width = _DEFAULT_WIDTH, int pic_height = _DEFAULT_HEIGHT);
 	int unloadPicture(int);
-	void showPic(int x = 0, int pic_width = _DEFAULT_WIDTH, int pic_height = _DEFAULT_HEIGHT);
+	void showPic(int x = 0, int y = 0, int pic_width = _DEFAULT_WIDTH, int pic_height = _DEFAULT_HEIGHT);
 	uint8 *convertV3Pic(uint8 *src, uint32 len);
+
+	void plotPattern(int x, int y);		// public because it's used directly by preagi
+
+	// preagi needed functions (for plotPattern)
+	void setPattern(uint8 code, uint8 num);
+	void setColor(uint8 color);
 };
 
 } // End of namespace Agi

Modified: scummvm/trunk/engines/agi/preagi_mickey.cpp
===================================================================
--- scummvm/trunk/engines/agi/preagi_mickey.cpp	2007-09-03 12:23:50 UTC (rev 28847)
+++ scummvm/trunk/engines/agi/preagi_mickey.cpp	2007-09-03 15:03:50 UTC (rev 28848)
@@ -601,37 +601,32 @@
 // Graphics
 
 void Mickey::drawObj(ENUM_MSA_OBJECT iObj, int x0, int y0) {
-	uint8 *buffer = new uint8[4096];
-	char szFile[255] = {0};
+	// FIXME: objects are rendered incorrectly
 
-	sprintf(szFile, IDS_MSA_PATH_OBJ, IDS_MSA_NAME_OBJ[iObj]);
+	// FIXME: Not sure about object dimensions
+	int objWidth = 44;
+	int objHeight = 44;
+	_vm->preAgiLoadResource(rVIEW, iObj);
+	_vm->_picture->decodePicture(iObj, false, false, objWidth, objHeight);
+	_vm->_picture->showPic(x0, y0, objWidth, objHeight);
+	_vm->_gfx->doUpdate();
+	_vm->_system->updateScreen();	// TODO: this should go in the game's main loop
 
-	Common::File infile;
-
-	if(!infile.open(szFile))
-		return;
-	
-	
-	infile.read(buffer, infile.size());
-
-#if 0
-	// TODO
+	// TrollVM code
+	/*
 	if (iObj == IDI_MSA_OBJECT_CRYSTAL) {
 		AGI_DrawPic(IDI_MSA_PIC_X0 + x0, IDI_MSA_PIC_Y0 + y0, IDF_AGI_PIC_V2 | IDF_AGI_STEP, buffer);
 	} else {
 		AGI_DrawPic(IDI_MSA_PIC_X0 + x0, IDI_MSA_PIC_Y0 + y0, IDF_AGI_PIC_V2, buffer);
 	}
-#endif
-
-	infile.close();
-	delete [] buffer;
+	*/
 }
 
 void Mickey::drawPic(int iPic) {
 	_vm->preAgiLoadResource(rPICTURE, iPic);
 	// Note that decodePicture clears the screen
 	_vm->_picture->decodePicture(iPic, true, false, IDI_MSA_PIC_WIDTH, IDI_MSA_PIC_HEIGHT);
-	_vm->_picture->showPic(10, IDI_MSA_PIC_WIDTH, IDI_MSA_PIC_HEIGHT);
+	_vm->_picture->showPic(10, 0, IDI_MSA_PIC_WIDTH, IDI_MSA_PIC_HEIGHT);
 	_vm->_gfx->doUpdate();
 	_vm->_system->updateScreen();	// TODO: this should go in the game's main loop
 }
@@ -705,29 +700,47 @@
 	case IDI_MSA_PIC_SHIP_JUPITER:
 	case IDI_MSA_PIC_SHIP_MARS:
 	case IDI_MSA_PIC_SHIP_URANUS:
-
+		{
 		// draw blinking ship lights
 
-		int iColor;
+#if 0
+		// TODO
+		uint8 iColor = 0;
+		uint8 x = 53;
+		uint8 y = 45;
+		int i = 0;
+		int lightWidth = 8;
+		int lightHeight = 8;
 
+		_vm->_picture->setPattern(2, 0);
+
 		for (int i = 0; i < 12; i++) {
 			iColor = game.nFrame + i;
 			if (iColor > 15) iColor -= 15;
 
-			objLight[1] = iColor;
-			objLight[4] += 7;
-			
-#if 0
-			// TODO
-			AGI_DrawPic(0, 0, IDF_AGI_PIC_V2 | IDF_AGI_CIRCLE, (uint8 *)objLight);
-#endif
+			_vm->_picture->setColor(iColor);
+			y += 7;
+			_vm->_picture->plotPattern(x, y);
+
+			for (int y1 = y; y1 < lightHeight; y1++) {
+				_vm->_gfx->putPixelsA(x, y1, lightWidth, &_vm->_game.sbuf16c[i]);
+				i += lightWidth;
+			}
+
+			_vm->_gfx->flushScreen();
+			_vm->_gfx->doUpdate();
+			_vm->_system->updateScreen();	// TODO: this should go in the game's main loop
+
+
+			//AGI_DrawPic(0, 0, IDF_AGI_PIC_V2 | IDF_AGI_CIRCLE, (uint8 *)objLight);	// TrollVM
 		}
 
 		game.nFrame--;
 		if (game.nFrame < 0) game.nFrame = 15;
+#endif
 
 		playSound(IDI_MSA_SND_PRESS_BLUE);
-
+		}
 		break;
 
 	case IDI_MSA_PIC_SHIP_CONTROLS:
@@ -795,13 +808,8 @@
 }
 
 void Mickey::animate() {
-#if 0
-	// TODO
-	if ((int)SDL_GetTicks() > (game.nTicks + IDI_MSA_ANIM_DELAY)) {
-		game.nTicks = SDL_GetTicks();
-		drawRoomAnimation();
-	}
-#endif
+	_vm->_system->delayMillis(IDI_MSA_ANIM_DELAY);
+	drawRoomAnimation();
 }
 
 void Mickey::printRoomDesc() {
@@ -1151,7 +1159,7 @@
 	_vm->_gfx->doUpdate();
 	_vm->_system->updateScreen();	// TODO: this should go in the game's main loop
 
-	_vm->_system->delayMillis(25);
+	_vm->_system->delayMillis(IDI_MSA_ANIM_DELAY);
 
 	//Set back to black
 	_vm->_gfx->clearScreen(0);


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