mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-25 05:34:27 +00:00
SCI32: Implement kCelHigh and kCelWide SCI32 versions
The SCI16 versions do not implement the scaling algorithm used by SCI32 so would be off by one in some cases.
This commit is contained in:
parent
9ae52541ce
commit
362b46259f
@ -491,6 +491,8 @@ reg_t kSetShowStyle(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kSetPalStyleRange(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kGetHighPlanePri(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kFrameOut(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kCelHigh32(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kCelWide32(EngineState *s, int argc, reg_t *argv);
|
||||
|
||||
reg_t kIsOnMe(EngineState *s, int argc, reg_t *argv); // kOnMe for SCI2, kIsOnMe for SCI2.1
|
||||
reg_t kInPolygon(EngineState *s, int argc, reg_t *argv);
|
||||
|
@ -461,8 +461,12 @@ static SciKernelMapEntry s_kernelMap[] = {
|
||||
#ifdef ENABLE_SCI32
|
||||
{ MAP_CALL(CantBeHere), SIG_SCI32, SIGFOR_ALL, "ol", NULL, NULL },
|
||||
#endif
|
||||
{ MAP_CALL(CelHigh), SIG_EVERYWHERE, "ii(i)", NULL, kCelHigh_workarounds },
|
||||
{ MAP_CALL(CelWide), SIG_EVERYWHERE, "ii(i)", NULL, kCelWide_workarounds },
|
||||
{ MAP_CALL(CelHigh), SIG_SCI16, SIGFOR_ALL, "ii(i)", NULL, kCelHigh_workarounds },
|
||||
{ MAP_CALL(CelWide), SIG_SCI16, SIGFOR_ALL, "ii(i)", NULL, kCelWide_workarounds },
|
||||
#ifdef ENABLE_SCI32
|
||||
{ "CelHigh", kCelHigh32, SIG_SCI32, SIGFOR_ALL, "iii", NULL, NULL },
|
||||
{ "CelWide", kCelWide32, SIG_SCI32, SIGFOR_ALL, "iii", NULL, NULL },
|
||||
#endif
|
||||
{ MAP_CALL(CheckFreeSpace), SIG_SCI32, SIGFOR_ALL, "r.*", NULL, NULL },
|
||||
{ MAP_CALL(CheckFreeSpace), SIG_SCI11, SIGFOR_ALL, "r(i)", NULL, NULL },
|
||||
{ MAP_CALL(CheckFreeSpace), SIG_EVERYWHERE, "r", NULL, NULL },
|
||||
|
@ -310,6 +310,22 @@ reg_t kSetShowStyle(EngineState *s, int argc, reg_t *argv) {
|
||||
return NULL_REG;
|
||||
}
|
||||
|
||||
reg_t kCelHigh32(EngineState *s, int argc, reg_t *argv) {
|
||||
GuiResourceId resourceId = argv[0].toUint16();
|
||||
int16 loopNo = argv[1].toSint16();
|
||||
int16 celNo = argv[2].toSint16();
|
||||
CelObjView celObj(resourceId, loopNo, celNo);
|
||||
return make_reg(0, mulru(celObj._height, Ratio(g_sci->_gfxFrameout->getCurrentBuffer().scriptHeight, celObj._scaledHeight)));
|
||||
}
|
||||
|
||||
reg_t kCelWide32(EngineState *s, int argc, reg_t *argv) {
|
||||
GuiResourceId resourceId = argv[0].toUint16();
|
||||
int16 loopNo = argv[1].toSint16();
|
||||
int16 celNo = argv[2].toSint16();
|
||||
CelObjView celObj(resourceId, loopNo, celNo);
|
||||
return make_reg(0, mulru(celObj._width, Ratio(g_sci->_gfxFrameout->getCurrentBuffer().scriptWidth, celObj._scaledWidth)));
|
||||
}
|
||||
|
||||
reg_t kCelInfo(EngineState *s, int argc, reg_t *argv) {
|
||||
// Used by Shivers 1, room 23601 to determine what blocks on the red door puzzle board
|
||||
// are occupied by pieces already
|
||||
|
Loading…
x
Reference in New Issue
Block a user