ZVision

From ScummVM :: Wiki
Revision as of 18:23, 22 June 2014 by MetaFox (talk | contribs) (adding date that it was added to the ScummVM code tree)
Jump to navigation Jump to search
ZVision
Engine developer RichieSams
Companies that used it Activision
Games that use it Zork Nemesis, Zork: Grand Inquisitor
Date added to ScummVM 2013-10-17
First release containing it N/A

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

This engine was 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
  • Check for the difference between the CD version of ZGI and the DVD version
    • Potentially higher resolution (Window and/or videos)
    • Potentially different video file format

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