Document the Board struct a little more

This commit is contained in:
2026-03-18 12:39:15 -07:00
parent 11339ef6ae
commit 15bfe7712b
+42 -1
View File
@@ -121,22 +121,63 @@ pub struct Keys {
pub white: bool, pub white: bool,
} }
/// A ZZT board. /// An individual ZZT board.
///
/// Boards mainly exist within a containing [`World`]. But as part of a editing workflow, they can
/// also be packaged as standalone .BRD files, which use the same format; use
/// [`Board::from_brd_bytes`] to parse one.
#[derive(Clone)] #[derive(Clone)]
pub struct Board { pub struct Board {
/// The board's title.
///
/// Board titles are not shown during gameplay; they exist for organizational purposes while
/// editing.
///
/// The file format supports a maximum length of 50 characters. But editors usually impose
/// shorter limits: ZZT's internal editor artificially limits titles to 34 characters, and
/// titles longer than 42 characters may cause visual glitches when displayed in a
/// standard-width message box.
pub name: String, pub name: String,
/// The 60x25 terrain grid, stored in order from left-to-right, top-to-bottom.
///
/// For convenience, [`Board::tile`] and [`Board::set_tile`] are available for coordinate-based
/// access, but in some cases if you are updating lots of tiles, it may be more efficient to
/// directly mutate this array.
pub tiles: [Tile; 1500], pub tiles: [Tile; 1500],
/// Maximum number of bullets the player can have on screen at once on this board.
pub max_shots: u8, pub max_shots: u8,
/// Whether the board is dark.
pub is_dark: bool, pub is_dark: bool,
/// Board index of the northern neighbor, or `None` for no exit.
///
/// Internally, ZZT uses zero to indicate "no exit". For this reason, it is impossible for a
/// board edge to link to the title screen, because board index 0 is unrepresentable.
pub exit_north: Option<NonZero<u8>>, pub exit_north: Option<NonZero<u8>>,
/// Board index of the southern neighbor, or `None` for no exit.
pub exit_south: Option<NonZero<u8>>, pub exit_south: Option<NonZero<u8>>,
/// Board index of the western neighbor, or `None` for no exit.
pub exit_west: Option<NonZero<u8>>, pub exit_west: Option<NonZero<u8>>,
/// Board index of the eastern neighbor, or `None` for no exit.
pub exit_east: Option<NonZero<u8>>, pub exit_east: Option<NonZero<u8>>,
/// Whether the player restarts at the board entrance after taking damage.
pub restart_on_zap: bool, pub restart_on_zap: bool,
/// The currently-flashing status bar message (max 58 characters).
pub message: String, pub message: String,
/// X coordinate where the player entered the board (1-based).
///
/// The entrance coordinates are part of the "re-enter when zapped" feature. The values only
/// really matter if the user starts out on this board; they will be overwritten with the
/// player's actual entry coordinates during play.
pub enter_x: u8, pub enter_x: u8,
/// Y coordinate where the player entered the board (1-based).
pub enter_y: u8, pub enter_y: u8,
/// Time limit for the board in seconds (0 = no limit).
pub time_limit: i16, pub time_limit: i16,
/// Status elements on this board (objects, creatures, the player, etc.).
///
/// ZZT 3.2 supports a maximum of 151 stats per board. The file format can handle more than
/// that, and zztff will happily read/write more than 151 stats, but ZZT may crash if this limit
/// is exceeded.
pub stats: Vec<Stat>, pub stats: Vec<Stat>,
} }