[ART_TYPES]
This file defines classes for the art objects that are emitted by the Hybrix designer. (The term emitted means that the Hybrix designer automatically generates a code definition for that object.)
- Art resources are objects such as tilemaps, clips, songs, and instruments that are created using the Hybrix designer.
- Unlike board symbols, art objects have a predefined structure that cannot be customized.
- The
ARTmembers are initialized using data blocks. The data blocks are not shown in the editor because they can be very verbose. - If an art resource has a name, it can also be accessed using the identifier from the [GENERATED] file.
# =============================================================================
# ART_TYPES (FRAMEWORK FILE) VERSION 2025-08-10
# =============================================================================
# THIS FILE DEFINES CLASSES FOR ART OBJECTS THAT ARE EMITTED BY THE HYBRIX
# DESIGNER. UNLIKE SYMBOLS, ART OBJECTS HAVE A PREDEFINED STRUCTURE THAT
# CANNOT BE CUSTOMIZED.
# -----------------------------------------------------------------------------
# AN ANIMATED BITMAP
CLASS CLIP
VAR FRAMES: CLIP_FRAME[]
VAR WIDTH: BYTE, HEIGHT: BYTE
END CLASS
# -----------------------------------------------------------------------------
# ONE BITMAP FRAME BELONGING TO A CLIP
CLASS CLIP_FRAME
VAR PIXELS: BYTE[]
# MEASURED IN VIDEO FRAMES
# 1 = FULL 30 FPS; 2 = 1/2 SPEED; 3 = 1/3 SPEED; . . .
# 0 OR 255 = STOP ANIMATION ON THIS FRAME
VAR DURATION: BYTE
END CLASS
# -----------------------------------------------------------------------------
CLASS TILE
# THE ARRAY INDEX IS X*TILE_WIDTH+Y
VAR PIXELS: BYTE[]
END CLASS
# -----------------------------------------------------------------------------
CLASS TILESET
# THE TILE INDEX IS ITS INDEX IN THIS ARRAY
VAR TILES: TILE[]
VAR JUMBO: BOOL
END CLASS
# -----------------------------------------------------------------------------
CLASS TILEMAP
VAR COL_COUNT: PAIR
VAR ROW_COUNT: PAIR
# THE ARRAY INDEX IS: ROW*COL_COUNT+COL
# EACH TILE CODE IS A 16-BIT PAIR:
# BITS 0..9 ENCODE THE TILE INDEX (0..1023) FROM THE TILESET
# BITS 10..14 ENCODE THE THEME INDEX (0..31) INTO IO::THEMES
# BIT 15 IF SET, IO::MATTE_COLOR REPLACES ANY CLEAR PIXELS IN THIS TILE
VAR TILE_CODES: PAIR[]
# ---------------------------------------------------------------------------
FUNC COPY_FROM(SOURCE: TILEMAP)
SOURCE.COL_COUNT -> .COL_COUNT
SOURCE.ROW_COUNT -> .ROW_COUNT
NEW PAIR[](SOURCE.TILE_CODES.SIZE) -> .TILE_CODES
.TILE_CODES.COPY_FROM(SOURCE.TILE_CODES)
END FUNC
END CLASS
# -----------------------------------------------------------------------------
# A SINGLE NOTE PLAYED BY A TRACK OF A SONG_PATTERN
CLASS TRACK_EVENT # SIZE 4
# MIDI NOTE NUMBER
# 0 = C"-1" 8.176 HZ
# 12 = C0 16.352 HZ
# 59 = B3 246.942 HZ
# 60 = C4 261.626 HZ MIDDLE C
# 69 = A4 440.000 HZ INSTRUMENT FUNDAMENTAL FREQUENCY
# 127 = G9 12543.854 HZ
#
# 254 = RELEASE ENVELOPES
# 255 = REST
#
# C2(36) D2(38) E2(40) F2(41) G2(43) A2(45) B2(47)
# C3(48) D3(50) E3(52) F3(53) G3(55) A3(57) B3(59)
# C4(60) D4(62) E4(64) F4(65) G4(67) A4(69) B4(71)
# C5(72) D5(74) E5(76) F5(77) G5(79) A5(81) B5(83)
VAR NOTE: BYTE
# INDEX INTO ART::INSTRUMENTS[]
VAR INSTRUMENT: BYTE
# ENCODED AS U2.6 FIXED POINT (0 .. 3.984375)
VAR MOD_BYTE: BYTE
# CLASSIC MOD TRACKERS USE THREE TIMING CONSTANTS:
# - BEATS/MIN, ALSO CALLED "TEMPO", TYPICAL IS 120 BPM
# - ROWS/BEAT, TYPICAL IS 4 ROWS PER BEAT
# - TICKS/ROW, ALSO CALLED "SPEED", TYPICAL IS 6 TICKS/ROW
# NOTES ARE PLAYED BY "ROWS", AND "TICKS" WERE USED FOR INTERPOLATIONS ONLY.
# OUR DURATION IS MEASURED IN TICKS SO THAT IT FITS IN AN 8-BIT VALUE.
#
# 120 BPM = 48 TICKS/SECOND = 459 SAMPLES/TICK
VAR DURATION_TICKS: BYTE
END CLASS
# -----------------------------------------------------------------------------
CLASS TRACK
# MUST HAVE AT LEAST ONE EVENT
VAR EVENTS: TRACK_EVENT[]
END CLASS
# -----------------------------------------------------------------------------
CLASS SONG_PATTERN
# ONE TRACK FOR EACH SOUND CHANNEL
VAR TRACKS: TRACK[]
END CLASS
# -----------------------------------------------------------------------------
CLASS SONG
VAR PATTERNS: SONG_PATTERN[]
END CLASS