mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-22 09:49:11 +00:00
SCI: implement scaling for kDrawCel
fixes qfg4 demo properly (bug #3034506, previous commit r51304) svn-id: r51332
This commit is contained in:
parent
95c68f0291
commit
57136cd86a
@ -332,7 +332,7 @@ static SciKernelMapEntry s_kernelMap[] = {
|
||||
{ MAP_CALL(DoBresen), SIG_EVERYWHERE, "o", NULL, NULL },
|
||||
{ MAP_CALL(DoSound), SIG_EVERYWHERE, "i(.*)", kDoSound_subops, NULL },
|
||||
{ MAP_CALL(DoSync), SIG_EVERYWHERE, "i(.*)", NULL, NULL }, // subop
|
||||
{ MAP_CALL(DrawCel), SIG_SCI11, SIGFOR_PC, "iiiii(i)(i)(r0)", NULL, NULL }, // for kq6 hires
|
||||
{ MAP_CALL(DrawCel), SIG_SCI11, SIGFOR_PC, "iiiii(i)(i)([ri])", NULL, NULL }, // reference for kq6 hires
|
||||
{ MAP_CALL(DrawCel), SIG_EVERYWHERE, "iiiii(i)(i)", NULL, NULL },
|
||||
{ MAP_CALL(DrawControl), SIG_EVERYWHERE, "o", NULL, NULL },
|
||||
{ MAP_CALL(DrawMenuBar), SIG_EVERYWHERE, "i", NULL, NULL },
|
||||
|
@ -1000,10 +1000,26 @@ reg_t kDrawCel(EngineState *s, int argc, reg_t *argv) {
|
||||
uint16 y = argv[4].toUint16();
|
||||
int16 priority = (argc > 5) ? argv[5].toSint16() : -1;
|
||||
uint16 paletteNo = (argc > 6) ? argv[6].toUint16() : 0;
|
||||
bool hiresMode = (argc > 7) ? true : false;
|
||||
reg_t upscaledHiresHandle = (argc > 7) ? argv[7] : NULL_REG;
|
||||
bool hiresMode = false;
|
||||
reg_t upscaledHiresHandle = NULL_REG;
|
||||
uint16 scaleX = 128;
|
||||
uint16 scaleY = 128;
|
||||
|
||||
g_sci->_gfxPaint16->kernelDrawCel(viewId, loopNo, celNo, x, y, priority, paletteNo, hiresMode, upscaledHiresHandle);
|
||||
if (argc > 7) {
|
||||
// this is either kq6 hires or scaling
|
||||
if (paletteNo > 0) {
|
||||
// it's scaling
|
||||
scaleX = argv[6].toUint16();
|
||||
scaleY = argv[7].toUint16();
|
||||
paletteNo = 0;
|
||||
} else {
|
||||
// KQ6 hires
|
||||
hiresMode = true;
|
||||
upscaledHiresHandle = argv[7];
|
||||
}
|
||||
}
|
||||
|
||||
g_sci->_gfxPaint16->kernelDrawCel(viewId, loopNo, celNo, x, y, priority, paletteNo, scaleX, scaleY, hiresMode, upscaledHiresHandle);
|
||||
|
||||
return s->r_acc;
|
||||
}
|
||||
|
@ -383,11 +383,11 @@ void GfxPaint16::kernelDrawPicture(GuiResourceId pictureId, int16 animationNr, b
|
||||
_ports->setPort(oldPort);
|
||||
}
|
||||
|
||||
void GfxPaint16::kernelDrawCel(GuiResourceId viewId, int16 loopNo, int16 celNo, uint16 leftPos, uint16 topPos, int16 priority, uint16 paletteNo, bool hiresMode, reg_t upscaledHiresHandle) {
|
||||
void GfxPaint16::kernelDrawCel(GuiResourceId viewId, int16 loopNo, int16 celNo, uint16 leftPos, uint16 topPos, int16 priority, uint16 paletteNo, uint16 scaleX, uint16 scaleY, bool hiresMode, reg_t upscaledHiresHandle) {
|
||||
// some calls are hiresMode even under kq6 DOS, that's why we check for
|
||||
// upscaled hires here
|
||||
if ((!hiresMode) || (!_screen->getUpscaledHires())) {
|
||||
drawCelAndShow(viewId, loopNo, celNo, leftPos, topPos, priority, paletteNo);
|
||||
drawCelAndShow(viewId, loopNo, celNo, leftPos, topPos, priority, paletteNo, scaleX, scaleY);
|
||||
} else {
|
||||
drawHiresCelAndShow(viewId, loopNo, celNo, leftPos, topPos, priority, paletteNo, upscaledHiresHandle);
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ public:
|
||||
void bitsFree(reg_t memoryHandle);
|
||||
|
||||
void kernelDrawPicture(GuiResourceId pictureId, int16 animationNr, bool animationBlackoutFlag, bool mirroredFlag, bool addToFlag, int16 EGApaletteNo);
|
||||
void kernelDrawCel(GuiResourceId viewId, int16 loopNo, int16 celNo, uint16 leftPos, uint16 topPos, int16 priority, uint16 paletteNo, bool hiresMode, reg_t upscaledHiresHandle);
|
||||
void kernelDrawCel(GuiResourceId viewId, int16 loopNo, int16 celNo, uint16 leftPos, uint16 topPos, int16 priority, uint16 paletteNo, uint16 scaleX, uint16 scaleY, bool hiresMode, reg_t upscaledHiresHandle);
|
||||
|
||||
void kernelGraphFillBoxForeground(const Common::Rect &rect);
|
||||
void kernelGraphFillBoxBackground(const Common::Rect &rect);
|
||||
|
Loading…
Reference in New Issue
Block a user