A utility to display Chrono Trigger scene and world maps complete with debug information. It supports the North American SNES version and the Steam version. It can display relevant tile and palette animations for the maps, as well as display actor sprites and animation from script data.
ctviewer [OPTIONS] <PATH>
Arguments:
<PATH>The source data path.
The source data path can be a headered or unheadered North American SNES ROM file, the path to the resources.bin file
from the Steam version, or a directory with the extracted contents of that resources.bin file. You can use the
"CT Explore" utility by River Nixx (download from https://rivernyxx.com/downloads.html) to extract the data from the
Steam version into a directory.
Options:
-w,--world <WORLD>Index of the world to load [default: -1 / none]-s,--scene <SCENE>Index of the scene to load [default: -1 / none]--scale <SCALE>Display scale factor, integer [default: -1 / auto]--scale-linearScale output using linear scaling instead of nearest-d,--display-aspect-ratioSet the display aspect ratio [default: 1.333 for a 4/3 ratio]-p,--pixel-aspect-ratioSet the pixel aspect ratio [default: 1.143]--no-vsyncDisable vertical sync-u,--ui-themeThe user interface theme index, from 0 to 7 [default: 0]-h,--helpPrint help
Examples:
ctviewer chrono-trigger.smc -s 144: view Denadaro North Face from the SNES version.ctviewer chrono-trigger.smc -w 2: view 2100 A.D. from the SNES version.ctviewer "C:\Steam\steamapps\common\Chrono Trigger\resources.bin" -s 5 -d: view Leene Square and output debug info and bitmaps from the PC version.
When viewing scenes or worlds, the following keys are available:
wasdto move aroundescto exitfto advance dialog text1toggle rendering of layer 12toggle rendering of layer 23toggle rendering of layer 34toggle rendering of sprites5toggle rendering of the map palettebackspaceto dump information and debug data tostdoutand/debug_output\to write a screenshot of the internal render buffer todebug_output/screenshot.bmp
When viewing worlds, the following keys are available:
zdisable debug renderingxrender collision datacrender exitsvrender music data
When viewing scenes, the following keys are available:
zdisable debug renderingxrender player collision datacrender NPC and battle collision datavrender Z plane data and flagsbrender tile movement datanrender door datamrender sprite priority data,render exits.render treasures/render actor data
Information about exits, treasure and actors is displayed when the mouse is over them. You can move to another scene or world by clicking on exits.
Left-clicking on an actor will activate it. Right-clicking will "touch" it. Clicking with the middle button will display debug information about them until somewhere else is middle-clicked. In that mode use the spacebar to advance the actor script execution one step.
These are some screenshots from various scenes. They have been scaled to a 4/3 aspect ratio.
- The format of world sprite animation and assembly data is still not entirely understood.
- World layer 3 animation is currently hardcoded. It is unknown where this information is stored.
- Scanline animation effects (usually on layer 3) are not present. This requires a different tilemap rendering approach.
- World palette animations are hardcoded. It is unknown where this information is stored.
- World camera wrapping works, but not smoothly.
- There are many scripting features not implemented, and plenty of bugs or incompatibilities left to resolve in the ones that are.
- The map extensions are not supported, as a result widescreen display isn't either.
- The priority map data is not used to rearrange layer priorities, so some scene maps like 97 (Black Omen upper level 4) look wrong.
- Install Rust from https://www.rust-lang.org/tools/install/.
- SDL3 libraries are required to be in the path to be able to build and run it. Get the
SDL3.lib,SDL3.dll,SDL3_ttf.libandSDL3_ttf.dlldevelopment libraries for your platform from https://github.com/libsdl-org/SDL/releases - Build and run a debug build using Cargo with
cargo run -- [parameters]. - Build and run an optimized release build with
cargo run -r -- [parameters].
- Geiger for some of the invaluable documentation about CT's internals.
- Micheal Springer for Temporal Flux.
- rivernyxx for CTExplore.
- Mauron for help with some scene script specifics.
- The Mesen emulator and its contributors
- ...many other people who documented (small) parts of Chrono Trigger over the past decades.








