mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-18 16:03:05 +00:00
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
svn-id: r28848
This commit is contained in:
parent
750ad32030
commit
b555a15697
@ -138,6 +138,7 @@ int AgiLoader_preagi::loadResource(int t, int n) {
|
||||
int ec = errOK;
|
||||
uint8 *data = NULL;
|
||||
char szFile[255] = {0};
|
||||
Common::File infile;
|
||||
|
||||
if (n > MAX_DIRS)
|
||||
return errBadResource;
|
||||
@ -153,7 +154,6 @@ int AgiLoader_preagi::loadResource(int t, int n) {
|
||||
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 @@ int AgiLoader_preagi::loadResource(int t, int n) {
|
||||
*/
|
||||
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;
|
||||
|
@ -773,8 +773,8 @@ int PictureMgr::unloadPicture(int n) {
|
||||
* 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 @@ void PictureMgr::showPic(int x, int pic_width, int pic_height) {
|
||||
|
||||
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
|
||||
|
@ -69,7 +69,6 @@ private:
|
||||
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 @@ public:
|
||||
|
||||
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
|
||||
|
@ -601,37 +601,32 @@ void Mickey::debug() {
|
||||
// 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 @@ void Mickey::drawRoomAnimation() {
|
||||
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::drawLogo() {
|
||||
}
|
||||
|
||||
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 @@ void Mickey::flashScreen() {
|
||||
_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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user