Files
libretro/emulators/gargoyle.yml
T
Abdessamad Derraz 7459c2d73b docs: name the interpreter gargoyle now defaults to
scarier handles both Adrift 4 and Adrift 5 and is what the two default
to; scare and FrankenDrift each cover one format and win only where the
build asked for them. The profile still named scare and FrankenDrift as
the pair.
2026-09-05 08:44:58 +02:00

232 lines
10 KiB
YAML

emulator: Gargoyle
type: standalone
core_classification: game_engine
source: "https://github.com/garglk/garglk"
upstream: "https://github.com/garglk/garglk"
profiled_date: "2026-08-08"
source_commit: "5717fbf3f9d6f2341773d0cc03f19d96c463af72"
core_version: "2026.1"
display_name: "Interactive Fiction (Gargoyle)"
cores:
- gargoyle
systems:
- adrift
- advsys
- agt
- alan
- glulx
- hugo
- jacl
- level9
- magnetic-scrolls
- scott-adams
- scott-adams-plus
- tads
- taylormade
- zmachine
mode: standalone
notes: |
Interactive fiction player built on the Glk library implementation garglk,
shipping one interpreter binary per story format. The gargoyle binary reads
the first 32 bytes of the file, matches it against a magic-number table,
falls back to the extension, and executes the matching interpreter.
ref: garglk/launcher.cpp:100-177 (probe, extensions, interpreters), 379-419 (rungame)
Formats and the interpreter each one runs: Adrift 4 and Adrift 5 both
default to scarier, which handles the two; scare takes Adrift 4 and
FrankenDrift takes Adrift 5 only where the build asked for them, since each
covers a single format. Then AdvSys (advsys), AGT (agility), Alan 2 (alan2), Alan 3
(alan3), Glulx (git), Hugo (hugo), JACL (jacl), Level 9 (level9), Magnetic
Scrolls (magnetic), Scott Adams Graphic Adventures Plus (plus), Scott Adams
(scott), TADS 2 and 3 (tadsr), TaylorMade (taylor), Z-machine (bocfel).
Blorb files are unwrapped first and dispatched on the Exec chunk type.
ref: garglk/launcher.cpp:45-60 (interpreter names), 276-328 (runblorb)
Adrift 5 needs the FrankenDrift runner, a .NET build option that is off by
default, including in the official AppImage. Without it the launcher reports
that Adrift 5 is unsupported and stops.
ref: CMakeLists.txt:63 (WITH_FRANKENDRIFT), gargoyle-appimage.sh:14,
garglk/launcher.cpp:160-162,202-206
Every glyph is drawn through FreeType rather than by the operating system,
so a font file has to be reachable. The default config asks for the families
"Gargoyle Mono" and "Gargoyle Serif"; if fontconfig cannot resolve them, the
interpreter loads the shipped TTF files by name from the data directory,
then the executable directory, then the working directory, and calls
winabort() when all three miss.
ref: garglk.h:661-662 (defaults), garglk.ini:195,198, fontfc.cpp:83-154
(fontconfig lookup), draw.cpp:260-287 (path fallbacks), 300-350
(make_font, abort), 490-498 (file names)
Gargoyle Serif is Charis SIL and Gargoyle Mono is Go Mono, both renamed so
they can be installed system-wide without clashing. Font embedding was
dropped because the OFL and the GPL do not mix, which is why the files are
loaded from disk.
ref: fonts/README
Data directory by platform: /usr/share/gargoyle on Unix,
<binary>/../share/gargoyle for the AppImage, the install directory on
Windows, and the bundle Resources directory on macOS. Fonts sit at its root
and themes in its themes subdirectory. macOS keeps the eight Gargoyle faces
in Resources/Fonts and Unifont in Resources; the Windows installer also
registers the eight faces as system fonts.
ref: sysqt.cpp:898-942, sysmac.mm:986-1003, garglk/CMakeLists.txt:136,144,
510-534, gargoyle_osx.sh:120-121,207-209, installer.nsi:89-90,200-207
Themes are read from every *.json in the theme directories, which are the
Qt application data locations plus the executable directory on Windows and
the data directory for the AppImage. A parse failure is reported and the
file skipped. The light and dark themes are also compiled into the binary,
so the on-disk copies of those two replace identical entries.
ref: theme.cpp:266-319, sysqt.cpp:920-942, garglk/CMakeLists.txt:80-92
garglk.ini is not distributed: the default config is compiled in as a string
and written to the highest-priority user location on demand. Installing a
system copy is an off-by-default build option.
ref: config.cpp:399-449, garglk/CMakeLists.txt:14 (INSTALL_GARGLKINI),
garglk/CMakeLists.txt:60-78 (vtk_encode_string)
MIDI in Blorb resources goes through FluidSynth, which needs a SoundFont.
Gargoyle names none: the soundfont list is empty unless the user sets it in
garglk.ini or the build hardcodes one, and the fallback is whatever
FluidSynth reports as its own default.
ref: config.cpp:245-249,787-795, snddecode.cpp:373-395,
garglk/CMakeLists.txt:57 (DEFAULT_SOUNDFONT), INSTALL.md:137-141
Story files are content. Formats that carry companion data read it from the
story file's own name or directory, so it travels with the game: Level 9
graphics as PICTURE.DAT, Magnetic Scrolls graphics and hints as .gfx and
.hnt, Alan 3 resources as .a3r, TADS resources as .t3r, and the extra disk
sides the Scott Adams, Plus and TaylorMade interpreters read from C64,
Atari 8-bit and Apple II images.
ref: level9/Glk/glk.c:6415-6450, magnetic/Glk/glk.c:5758-5855,
terps/CMakeLists.txt:69,73,359,404,500 (c64diskimage, unp64)
exclusion_note: >
TADS character mapping files are not loaded by this build. The Glk port
reports utf-8 and asc7dflt as the local character sets, both built-in
tables, and its os_gen_charmap_filename() returns an empty name, so the
automatic .tcp lookup never runs; cmap_load() only fires for a path given
with -ctab. The agil.cfg read by AGiliTy lives in os_dos.c and os_dos16.c,
while the build compiles os_glk.c.
ref: tads/glk/osmisc.c:69-72,316-334, tads/tads2/cmap.c:290-315,
tads/tads2/trd.c:513-517, terps/CMakeLists.txt:111-119
files:
# -- Text fonts, data directory root --
# Loaded by name when fontconfig cannot resolve the configured families.
# Gargoyle aborts when a face is available from neither source.
- name: "Gargoyle-Mono.ttf"
description: "Gargoyle Mono regular (Go Mono)"
required: true
source_ref: "garglk/draw.cpp:491 (make_entry monor), garglk/draw.cpp:300-350 (make_font, winabort)"
- name: "Gargoyle-Mono-Bold.ttf"
description: "Gargoyle Mono bold (Go Mono)"
required: true
source_ref: "garglk/draw.cpp:492 (make_entry monob), garglk/draw.cpp:300-350 (make_font, winabort)"
- name: "Gargoyle-Mono-Italic.ttf"
description: "Gargoyle Mono italic (Go Mono)"
required: true
source_ref: "garglk/draw.cpp:493 (make_entry monoi), garglk/draw.cpp:300-350 (make_font, winabort)"
- name: "Gargoyle-Mono-Bold-Italic.ttf"
description: "Gargoyle Mono bold italic (Go Mono)"
required: true
source_ref: "garglk/draw.cpp:494 (make_entry monoz), garglk/draw.cpp:300-350 (make_font, winabort)"
- name: "Gargoyle-Serif.ttf"
description: "Gargoyle Serif regular (Charis SIL)"
required: true
source_ref: "garglk/draw.cpp:495 (make_entry propr), garglk/draw.cpp:300-350 (make_font, winabort)"
- name: "Gargoyle-Serif-Bold.ttf"
description: "Gargoyle Serif bold (Charis SIL)"
required: true
source_ref: "garglk/draw.cpp:496 (make_entry propb), garglk/draw.cpp:300-350 (make_font, winabort)"
- name: "Gargoyle-Serif-Italic.ttf"
description: "Gargoyle Serif italic (Charis SIL)"
required: true
source_ref: "garglk/draw.cpp:497 (make_entry propi), garglk/draw.cpp:300-350 (make_font, winabort)"
- name: "Gargoyle-Serif-Bold-Italic.ttf"
description: "Gargoyle Serif bold italic (Charis SIL)"
required: true
source_ref: "garglk/draw.cpp:498 (make_entry propz), garglk/draw.cpp:300-350 (make_font, winabort)"
# -- Glyph substitution fonts, data directory root --
# Tried for every face after the main fonts; a load failure is skipped.
- name: "unifont.otf"
description: "GNU Unifont, Basic Multilingual Plane glyph fallback"
required: false
source_ref: "garglk/draw.cpp:352-375 (make_substitution_fonts), garglk/draw.cpp:476-478"
note: >
Covers glyphs missing from the text fonts. Loaded directly rather than
through the system font mechanism, so it is not installed system-wide.
- name: "unifont_upper.otf"
description: "GNU Unifont, planes above the BMP"
required: false
source_ref: "garglk/draw.cpp:352-375 (make_substitution_fonts), garglk/draw.cpp:476-478"
# -- Color themes, themes subdirectory --
# Every *.json in the theme directories is parsed, keyed on its name field.
- name: "Blue.json"
path: "themes/Blue.json"
description: "Blue color theme"
required: false
source_ref: "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:524"
- name: "Breeze Darker.json"
path: "themes/Breeze Darker.json"
description: "Breeze Darker color theme"
required: false
source_ref: "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:525"
- name: "Lectrote Dark.json"
path: "themes/Lectrote Dark.json"
description: "Lectrote Dark color theme"
required: false
source_ref: "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:526"
- name: "Lectrote Sepia.json"
path: "themes/Lectrote Sepia.json"
description: "Lectrote Sepia color theme"
required: false
source_ref: "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:527"
- name: "Lectrote Slate.json"
path: "themes/Lectrote Slate.json"
description: "Lectrote Slate color theme"
required: false
source_ref: "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:528"
- name: "Pencil.json"
path: "themes/Pencil.json"
description: "Pencil color theme"
required: false
source_ref: "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:529"
- name: "Zoom.json"
path: "themes/Zoom.json"
description: "Zoom color theme"
required: false
source_ref: "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:530"
- name: "dark.json"
path: "themes/dark.json"
description: "Dark color theme"
required: false
source_ref: "garglk/theme.cpp:268-282, garglk/theme.cpp:304-316, garglk/CMakeLists.txt:80-85, garglk/CMakeLists.txt:531"
note: "Also compiled in as the built-in dark theme."
- name: "light.json"
path: "themes/light.json"
description: "Light color theme"
required: false
source_ref: "garglk/theme.cpp:268-282, garglk/theme.cpp:304-316, garglk/CMakeLists.txt:87-92, garglk/CMakeLists.txt:532"
note: "Also compiled in as the built-in light theme."