aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scumm/script.cpp11
-rw-r--r--scumm/script_v6.cpp11
-rw-r--r--scumm/script_v8.cpp42
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]);
+ }
}
/*