diff options
-rw-r--r-- | engines/simon/items.cpp | 31 | ||||
-rw-r--r-- | engines/simon/simon.h | 1 |
2 files changed, 32 insertions, 0 deletions
diff --git a/engines/simon/items.cpp b/engines/simon/items.cpp index 5c8193b3e7..991f03e1f6 100644 --- a/engines/simon/items.cpp +++ b/engines/simon/items.cpp @@ -318,6 +318,7 @@ void SimonEngine::setupOpcodes() { opcode_table[83] = &SimonEngine::o2_rescan; opcode_table[98] = &SimonEngine::o2_animate; opcode_table[99] = &SimonEngine::o2_stopAnimate; + opcode_table[107] = &SimonEngine::o3_addBox; opcode_table[122] = &SimonEngine::o3_oracleTextDown; opcode_table[123] = &SimonEngine::o3_oracleTextUp; opcode_table[124] = &SimonEngine::o3_ifTime; @@ -1791,6 +1792,36 @@ void SimonEngine::o3_printLongText() { printInteractText(num, str); } +void SimonEngine::o3_addBox() { + // 107: add item hitarea + uint flags = 0; + uint id = getVarOrWord(); + uint params = id / 1000; + uint x, y, w, h, verb; + Item *item; + + id = id % 1000; + + if (params & 1) + flags |= kBFInvertTouch; + if (params & 2) + flags |= kBFNoTouchName; + if (params & 4) + flags |= kBFBoxItem; + if (params & 8) + flags |= kBFTextBox; + if (params & 16) + flags |= 0x10; + + x = getVarOrWord(); + y = getVarOrWord(); + w = getVarOrWord(); + h = getVarOrWord(); + item = getNextItemPtrStrange(); + verb = getVarOrWord(); + defineBox(id, x, y, w, h, flags, verb, item); +} + void SimonEngine::o3_oracleTextDown() { // 122: oracle text down oracleTextDown(); diff --git a/engines/simon/simon.h b/engines/simon/simon.h index 60f622e85a..57f2353707 100644 --- a/engines/simon/simon.h +++ b/engines/simon/simon.h @@ -966,6 +966,7 @@ public: void o3_jumpOut(); void o3_addTextBox(); void o3_printLongText(); + void o3_addBox(); void o3_oracleTextDown(); void o3_oracleTextUp(); void o3_ifTime(); |