[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