Open main menu
ZVision
Engine developer RichieSams
Companies that used it Activision
Games that use it Zork Nemesis, Zork: Grand Inquisitor
Date added to ScummVM Error: Invalid time.
First release containing it N/A

The ZVision was the engine used by Activision in Zork Nemesis and Zork: Grand Inquisitor.

This engine is being added by the GSoC student RichieSams to ScummVM as part of the GSoC 2013.

The ScummVM engine uses Marisa Chan's ZVision re-implementation, which is available from http://github.com/Marisa-Chan/Zengine, as a reference.

It should be noted that from a technical viewpoint, this engine has nothing in common with the MADE engine used for Return to Zork. It should also not be confused with the Z-machine which is the original Virtual Machine used for the original Zork text adventure games.

Immediate TODO's

  • Finish InputControl implementation
  • Implement SaveControl
  • Test the SaveManager against gjse.scr (save room) and gjre.scr (restore room)
  • Add a dirty rectangling system for RenderManager AlphaEntries so we're not rendering them to the backbuffer every frame
  • Add graceful failure for when .str isn't parsed correctly.
  • Get Courier Prime and FreeSerif added to the packaged fonts, then fall back on them when fonts can't be found
  • Figure out why animations aren't working any more

List of TODO's for ZVision to be playable

  • Fix audio problems in videos
    • This is a problem with Video::VideoDecoder
    • Essentially, Zork videos require the sound chunks to be read as one continuous stream
    • The current model puts each chunk into a separate AudioStream and then queues the streams
    • This is being worked on by clone2727
  • Finish implementing the rest of the ResultActions. (See actions.h)
    • ActionDebug
    • ActionDisableVenus
    • ActionDisplayMessage
    • ActionDissolve
    • ActionDistort
    • ActionFlushMouseEvents
    • ActionInventory
    • ActionKill
    • ActionEnableMenuBar
    • ActionPanTrack
    • ActionPreferences
    • ActionRegion
    • ActionRestoreGame
    • ActionRotateTo
    • ActionSaveGame
    • ActionSetVenus
    • ActionStop
    • ActionSyncSound
    • ActionTTYText
    • ActionUniverseMusic
  • Finish implementing the rest of the Controls
    • InputControl
    • SaveControl
    • SlotControl
    • SafeControl
    • FistControl
    • HotMovieControl
    • PaintControl
    • TilterControl
  • Implement inventory support
  • Implement the menu
  • Implement subtitles
  • Implement saving preferences
    • Scroll speed
    • etc.

ZGI specific TODO's

  • Determine why gary.scr doesn't load properly
    • This is the first "room". It loads up the environment variables, the opening movie, and then the main menu
  • Implement spellbook support
  • Add a different resolution for ZGI

Other TODO's

  • Make sure all image rendering is endian safe
  • Look into NOT flatting all the files to root
    • This would require keeping track of what room you're in so that you can use the correct parent folder
    • Look at NEMESIS.ZIX and INQUIS.ZIX
  • Re-order the if-then statements in scr ResultAction parsing to use the order of highest occurance (See scr_file_handling.cpp: Line 150)
  • Evaluate all in-engine warnings/debug messages and perhaps move them to higher debug channels (Or ZVision specific debug channels)
  • Clean out unused member functions from the Console class (See console.h)
  • Convert pointer initializers to nullptr instead of 0
  • Add 'true' UTF-16 support for non-english versions of the game. (See StringManager)

Current Progress