diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp index 91ce37bbe8e..3960c1c43fc 100644 --- a/engines/freescape/freescape.cpp +++ b/engines/freescape/freescape.cpp @@ -408,6 +408,9 @@ void FreescapeEngine::executeCode(FCLInstructionVector &code, bool shot, bool co case Token::INVIS: executeMakeInvisible(instruction); break; + case Token::VIS: + executeMakeVisible(instruction); + break; } ip++; @@ -422,6 +425,13 @@ void FreescapeEngine::executeMakeInvisible(FCLInstruction &instruction) { obj->makeInvisible(); } +void FreescapeEngine::executeMakeVisible(FCLInstruction &instruction) { + uint16 objectID = instruction.source; + debug("Making obj %d visible!", objectID); + Object *obj = _currentArea->objectWithID(objectID); + obj->makeVisible(); +} + void FreescapeEngine::executeGoto(FCLInstruction &instruction) { uint16 areaID = instruction.source; uint16 entranceID = instruction.destination; diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h index 489810749ee..2dd17276c35 100644 --- a/engines/freescape/freescape.h +++ b/engines/freescape/freescape.h @@ -123,7 +123,7 @@ public: void executeGoto(FCLInstruction &instruction); void executeIfThenElse(FCLInstruction &instruction); void executeMakeInvisible(FCLInstruction &instruction); - + void executeMakeVisible(FCLInstruction &instruction); // Rendering void drawFrame(); diff --git a/engines/freescape/language/8bitDetokeniser.cpp b/engines/freescape/language/8bitDetokeniser.cpp index 7c0a016aba7..20781f82cc0 100644 --- a/engines/freescape/language/8bitDetokeniser.cpp +++ b/engines/freescape/language/8bitDetokeniser.cpp @@ -120,6 +120,7 @@ Common::String *detokenise8bitCondition(Common::Array &tokenisedCondition case 7: case 4: detokenisedStream += "VIS ("; + currentInstruction = FCLInstruction(Token::VIS); break; // hence each getting two case statement entries case 8: case 5: diff --git a/engines/freescape/objects/object.cpp b/engines/freescape/objects/object.cpp index fb6921f86f6..3c9ecac1d0e 100644 --- a/engines/freescape/objects/object.cpp +++ b/engines/freescape/objects/object.cpp @@ -16,10 +16,11 @@ uint16 Object::getObjectFlags() { return _flags; } Math::Vector3d Object::getOrigin() { return _origin; } Math::Vector3d Object::getSize() { return _size; } -//void Object::draw(Freescape::Renderer *gfx) { -// gfx; -//} bool Object::isDrawable() { return false; } bool Object::isPlanar() { return false; } +bool Object::isInvisible() { return _flags & 0x80; } +void Object::makeInvisible() { _flags = _flags | 0x80; } +void Object::makeVisible() { _flags = _flags & ~0x80; } + Object::~Object() {} diff --git a/engines/freescape/objects/object.h b/engines/freescape/objects/object.h index 9123ee00076..032b715f573 100644 --- a/engines/freescape/objects/object.h +++ b/engines/freescape/objects/object.h @@ -49,8 +49,9 @@ public: virtual bool isDrawable(); virtual bool isPlanar(); - bool isInvisible() { return _flags & 0x80; } - void makeInvisible() { _flags = _flags | 0x80; } + bool isInvisible(); + void makeInvisible(); + void makeVisible(); virtual ~Object();