Color

From Wiki of ZZT
Revision as of 15:23, 24 December 2025 by Asie (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

The ZZT engine uses the color text mode of the IBM PC. As such, by default, the world format supports 16 foreground colors and 8 background colors. In addition, the color can optionally be marked as blinking, in which case the foreground character appears and disappears at a hardware-specific rate (typically every 32 frames).

Color palette

The canon ZZT palette as used by the community matches the official definition of these colors as used on EGA and later adapters:

(TODO: Some kind of swatch?)

However, the engine does not guarantee these colors anywhere - it relies on the palette provided by the graphics adapter, emulator or engine port. As such, some notable variants exist:

  • The official IBM 5153 color monitor has a different palette in practice[1]. While not common among ZZTers, this may have been the monitor used by the IBM PC configuration ZZT was developed on[2].
  • Some graphics card adapters and monitors did not correctly convert color #6 to brown, instead displaying it as a dark yellow.
  • On Windows XP (2000?) using NTVDM, a different palette is used altogether. (TODO) This was a popular platform for interacting with ZZT games throughout the early-mid 2000s.

Monochrome mode

ZZT includes a monochrome option, which translates the colors to shades of grey for users of monochrome display adapters.

Unfortunately, in the process of adapting the color translation algorithm to Super ZZT's user interface, it regressed the display of ZZT's worlds and interface. These changes got pulled into the ZZT codebase with version 3.1.

Accessing additional colors

In the built-in editor, most of these combinations are not used or only used for built-in elements and thus not exposed to the user.

In the editor

The built-in editor only supports directly editing elements in seven colors: blue, green, cyan, red, purple, yellow and white. These correspond to the seven bright colors in the default 16-color CGA palette.

However, non-standard colors can be used by copying an existing tile of such a color, for example by using a toolkit board, and placing it on your own board. Alternatively, one can use an external editor, which generally allow use of all supported colors.

Using ZZT-OOP

ZZT-OOP element kind statements only support seven named colors: blue, green, cyan, red, purple, yellow and white, matching the ones available in the built-in editor. With the exception of doors, named colors apply to an element's foreground color, and are paired with a black background.

A handful of additional colors can be obtained through ZZT-OOP by using the change and put commands on built-in entities with hard-coded colors. This was most likely first discovered by Tim Gallagher in 1992[3].

Below are examples of how to obtain gems of various colors using ZZT-OOP. These are also implemented as a demonstration board in the Mystical Winds Encyclopedia.

Dark colors on black

Brown on black

#put e torch

#change torch gem

Alternatively:

#put e bear

#change bear gem


Dark cyan on black

#put e ammo

#change ammo gem


Dark purple on black

#put e energizer

#change energizer gem


Gray on black

#put e shark

#change shark gem


Black on dark colors

Black on dark green

#put e forest

#change forest gem


Black on gray

#put e empty

#put e gem


White on dark colors

White on gray

#put e door

#change door gem


White on dark blue

#put e blue door

#change door gem


White on dark green

#put e green door

#change door gem


White on dark red

#put e red door

#change door gem


White on dark purple

#put e purple door

#change door gem


White on brown

#put e yellow door

#change door gem


Blinking white on black and dark colors

Blinking white on black

#put e forest

#change forest door

#change door gem


Blinking white on dark cyan

#put e ammo

#put e door

#put e gem

Note: The ammo won't automatically be overwritten by the newly-created door. You can delete it with #change ammo empty, or put the object next to an obstacle such that the ammo gets crushed when the door is created.


Blinking white on dark purple

#put e energizer

#put e door

#change door gem


Blinking white on brown

#put e torch

#put e door

#change door gem


Alternatively:

#put e bear

#put e door

#change door gem

Note: The bear needs to be crushed by an obstacle when the door is created.


Blinking white on gray

#put e shark

#put e door

#change door gem


References