diff options
-rw-r--r-- | engines/sci/engine/kernel.h | 2 | ||||
-rw-r--r-- | engines/sci/engine/kernel_tables.h | 1 | ||||
-rw-r--r-- | engines/sci/engine/kgraphics.cpp | 51 |
3 files changed, 53 insertions, 1 deletions
diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h index 90b0ae2bee..c42214dd01 100644 --- a/engines/sci/engine/kernel.h +++ b/engines/sci/engine/kernel.h @@ -278,7 +278,6 @@ private: /******************** Kernel functions ********************/ -// New kernel functions reg_t kStrLen(EngineState *s, int argc, reg_t *argv); reg_t kGetFarText(EngineState *s, int argc, reg_t *argv); reg_t kReadNumber(EngineState *s, int argc, reg_t *argv); @@ -420,6 +419,7 @@ reg_t kPlatform(EngineState *s, int argc, reg_t *argv); reg_t kTextColors(EngineState *s, int argc, reg_t *argv); reg_t kTextFonts(EngineState *s, int argc, reg_t *argv); reg_t kShow(EngineState *s, int argc, reg_t *argv); +reg_t kRemapColors(EngineState *s, int argc, reg_t *argv); reg_t kDummy(EngineState *s, int argc, reg_t *argv); reg_t kEmpty(EngineState *s, int argc, reg_t *argv); reg_t kStub(EngineState *s, int argc, reg_t *argv); diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h index ce28611e50..b190335f56 100644 --- a/engines/sci/engine/kernel_tables.h +++ b/engines/sci/engine/kernel_tables.h @@ -405,6 +405,7 @@ static SciKernelMapEntry s_kernelMap[] = { { MAP_CALL(PriCoord), SIG_EVERYWHERE, "i", NULL, NULL }, { MAP_CALL(Random), SIG_EVERYWHERE, "i(i)(i)", NULL, NULL }, { MAP_CALL(ReadNumber), SIG_EVERYWHERE, "r", NULL, NULL }, + { MAP_CALL(RemapColors), SIG_EVERYWHERE, "i(i)(i)(i)(i)(i)", NULL, NULL }, { MAP_CALL(ResCheck), SIG_EVERYWHERE, "ii(iiii)", NULL, NULL }, { MAP_CALL(RespondsTo), SIG_EVERYWHERE, ".i", NULL, NULL }, { MAP_CALL(RestartGame), SIG_EVERYWHERE, "", NULL, NULL }, diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp index 673cf0199c..5bf9bc20c9 100644 --- a/engines/sci/engine/kgraphics.cpp +++ b/engines/sci/engine/kgraphics.cpp @@ -1196,6 +1196,57 @@ reg_t kShow(EngineState *s, int argc, reg_t *argv) { return s->r_acc; } +reg_t kRemapColors(EngineState *s, int argc, reg_t *argv) { + // TODO: This is all a stub/skeleton, thus we're invoking kStub() for now + kStub(s, argc, argv); + + uint16 operation = argv[0].toUint16(); + + switch (operation) { + case 0: { // Initialize remapping to base. 0 turns remapping off. + //int16 unk1 = (argc >= 2) ? argv[1].toSint16() : 0; + } + break; + case 1: { // unknown + // The demo of QFG4 calls this with 1+3 parameters, thus there are differences here + //int16 unk1 = argv[1].toSint16(); + //int16 unk2 = argv[2].toSint16(); + //int16 unk3 = argv[3].toSint16(); + //uint16 unk4 = argv[4].toUint16(); + //uint16 unk5 = (argc >= 6) ? argv[5].toUint16() : 0; + } + break; + case 2: { // remap by percent + //int16 unk1 = argv[1].toSint16(); + //uint16 percent = argv[2].toUint16(); + //uint16 unk3 = (argc >= 4) ? argv[3].toUint16() : 0; + } + break; + case 3: { // remap to gray + //int16 unk1 = argv[1].toSint16(); + //int16 percent = argv[2].toSint16(); // 0 - 100 + //uint16 unk3 = (argc >= 4) ? argv[3].toUint16() : 0; + } + break; + case 4: { // unknown + //int16 unk1 = argv[1].toSint16(); + //uint16 unk2 = argv[2].toUint16(); + //uint16 unk3 = argv[3].toUint16(); + //uint16 unk4 = (argc >= 5) ? argv[4].toUint16() : 0; + } + break; + case 5: { // increment color + //int16 unk1 = argv[1].toSint16(); + //uint16 unk2 = argv[2].toUint16(); + } + break; + default: + break; + } + + return s->r_acc; +} + #ifdef ENABLE_SCI32 reg_t kIsHiRes(EngineState *s, int argc, reg_t *argv) { |