diff options
-rw-r--r-- | scumm/script.cpp | 11 | ||||
-rw-r--r-- | scumm/script_v6.cpp | 11 | ||||
-rw-r--r-- | scumm/script_v8.cpp | 42 |
3 files changed, 50 insertions, 14 deletions
diff --git a/scumm/script.cpp b/scumm/script.cpp index a70a5b81c7..d21b0b8797 100644 --- a/scumm/script.cpp +++ b/scumm/script.cpp @@ -1063,17 +1063,6 @@ int Scumm::getArrayId() return -1; } -void Scumm::arrayop_1(int a, byte *ptr) -{ - ArrayHeader *ah; - int r; - int len = getStringLen(ptr); - - r = defineArray(a, 4, 0, len); - ah = (ArrayHeader *)getResourceAddress(rtString, r); - copyString(ah->data, ptr, len); -} - void Scumm::copyString(byte *dst, byte *src, int len) { if (!src) { diff --git a/scumm/script_v6.cpp b/scumm/script_v6.cpp index 60e05252e4..6cd1f16df1 100644 --- a/scumm/script_v6.cpp +++ b/scumm/script_v6.cpp @@ -1924,6 +1924,17 @@ void Scumm_v6::o6_getVerbEntrypoint() push(getVerbEntrypoint(v, e)); } +void Scumm::arrayop_1(int a, byte *ptr) +{ + ArrayHeader *ah; + int r; + int len = getStringLen(ptr); + + r = defineArray(a, 4, 0, len); + ah = (ArrayHeader *)getResourceAddress(rtString, r); + copyString(ah->data, ptr, len); +} + void Scumm_v6::o6_arrayOps() { int a, b, c, d, num; diff --git a/scumm/script_v8.cpp b/scumm/script_v8.cpp index 36b28a6cac..d98c639ea6 100644 --- a/scumm/script_v8.cpp +++ b/scumm/script_v8.cpp @@ -598,8 +598,21 @@ void Scumm_v8::o8_arrayOps() switch (subOp) { case 0x14: // SO_ASSIGN_STRING + { + int idx = pop(); + ArrayHeader *ah; + int r; + int len = getStringLen(NULL); + + r = defineArray(array, 4, 0, len); + ah = (ArrayHeader *)getResourceAddress(rtString, r); + copyString(ah->data + idx, NULL, len); + } + break; case 0x15: // SO_ASSIGN_SCUMMVAR_LIST + // TODO case 0x16: // SO_ASSIGN_2DIM_LIST + // TODO default: error("o8_arrayOps: default case %d (array %d)", subOp, array); } @@ -764,13 +777,22 @@ void Scumm_v8::o8_roomOps() { // TODO byte subOp = fetchScriptByte(); + int a; + switch (subOp) { case 0x52: // SO_ROOM_PALETTE Set room palette -// case 0x53: // SO_339 -// case 0x54: // SO_340 case 0x55: // SO_ROOM_INTENSITY Set room intensity -// case 0x56: // SO_342 + error("o8_roomOps: default case %d", subOp); + break; case 0x57: // SO_ROOM_FADE Fade room + a = pop(); + if (a) { + _switchRoomEffect = (byte)(a); + _switchRoomEffect2 = (byte)(a >> 8); + } else { + fadeIn(_newEffect); + } + break; case 0x58: // SO_ROOM_RGB_INTENSITY Set room color intensity case 0x59: // SO_ROOM_TRANSFORM Transform room case 0x5A: // SO_ROOM_CYCLE_SPEED Set palette cycling speed @@ -881,10 +903,24 @@ void Scumm_v8::o8_verbOps() void Scumm_v8::o8_system() { + // TODO + byte subOp = fetchScriptByte(); + switch (subOp) { + default: + error("o8_system: default case %d", subOp); + } } void Scumm_v8::o8_kludge() { + // TODO + int16 args[30]; + getStackList(args, sizeof(args) / sizeof(args[0])); + + switch (args[0]) { + default: + warning("o8_kludge: default case %d", args[0]); + } } /* |