Characters & Creatures
Every named entity in Spirit of Excalibur is driven by an FSME bytecode
VM — a tiny per-class script (one of 24 _prgm classes compiled into the
executable) that decides which frame of a shared FRML sprite sheet to draw
and for how long. Unlike Conan the Cimmerian and Warriors of Legend, where
walk/attack/death frame ranges had to be inferred from frame geometry, this
game’s segments below come directly from disassembling and hand-tracing
that VM for each of the ten hero/character classes that pair with a real
sprite — see docs/spirit/amiga/bytecode-vm.md § “Animation-frame ranges —
confirmed per character class” in the main repo (not part of this site) for
the full derivation, and src/assets/formats/spirit-frml-animations.ts for
the resulting per-class segment table this page renders.
Which named _aForces entities (or generic troop labels) actually use each
class’s sprite id, per classInfo.f2E in spirit-game-data.json, is read
straight off the real extracted entity table below — not invented for this
page: every hero/troop name is one that some real entity record carries with
this exact sprite id. Generic repeated labels (“knight”, “Men at Arm”,
“guard”) are folded into a trailing count rather than listed once per
duplicate.
The ten hero/character classes
Section titled “The ten hero/character classes”Each _aForces entity record carries an iPoseSet byte selecting one of the
game’s 24 _prgm bytecode classes; ten of those classes pair 1:1 with a real
PLAYA32A.RES/OVERA32A.RES sprite id. Click a segment pill under a card to
switch which named animation loops — walk is shown by default. Segment
confidence follows this project’s standard scale: a pill’s title attribute
(hover) shows confirmed (a real traced loop/ramp read directly off
_Anim_Draw frame arguments), rendered (a real bytecode boundary exists,
only the name is inferred), or hypothesis (neither is independently
confirmed) — see docs/spirit/amiga/bytecode-vm.md for the full evidence
behind every segment.
All FRML Resources
Section titled “All FRML Resources”Every one of the 40 confirmed FRML animation-frame resources across
PLAYA32A.RES and OVERA32A.RES — army formations, terrain-backdrop
creatures and the ten hero classes above, all decoded by
src/assets/formats/frml.ts. Every resource here also carries an
animations classification; for the 30 not covered by the confirmed
bytecode trace above, it falls back to a single whole-resource loop
(confidence: 'hypothesis') rather than asserting a walk/attack/death split
that isn’t evidenced — see classifySpiritFrmlAnimations()’s fallback in
src/assets/formats/spirit-frml-animations.ts.
OVERA32A.RES FRML #703
walk [0-3] · attack [4-7] · guard [8-9] · attack [10-14] · cast [16-18]
OVERA32A.RES FRML #708
idle [4-4] · walk [0-4] · action [5-8]
OVERA32A.RES FRML #710
action [0-15]
OVERA32A.RES FRML #902
action [0-3]
OVERA32A.RES FRML #923
action [0-3]
OVERA32A.RES FRML #924
action [0-15]
PLAYA32A.RES FRML #700
walk [0-5] · idle [6-6] · attack [7-13] · death [14-16] · guard [17-18]
PLAYA32A.RES FRML #701
walk [0-3] · attack [4-7] · guard [8-9] · attack [13-14] · cast [21-23]
PLAYA32A.RES FRML #702
walk [0-3] · guard [8-9] · action [13-20]
PLAYA32A.RES FRML #704
action [0-6]
PLAYA32A.RES FRML #705
walk [0-5] · action [6-12]
PLAYA32A.RES FRML #707
walk [0-5] · attack [6-13]
PLAYA32A.RES FRML #709
walk [0-2] · action [3-16]
PLAYA32A.RES FRML #750
action [0-28]
PLAYA32A.RES FRML #751
action [0-28]
PLAYA32A.RES FRML #752
action [0-28]
PLAYA32A.RES FRML #753
action [0-3]
PLAYA32A.RES FRML #900
action [0-4]
PLAYA32A.RES FRML #901
action [0-2]
PLAYA32A.RES FRML #903
action [0-2]
PLAYA32A.RES FRML #904
action [0-2]
PLAYA32A.RES FRML #905
action [0-3]
PLAYA32A.RES FRML #906
action [0-3]
PLAYA32A.RES FRML #907
action [0-3]
PLAYA32A.RES FRML #908
action [0-3]
PLAYA32A.RES FRML #909
action [0-2]
PLAYA32A.RES FRML #910
walk [0-3] · action [4-10]
PLAYA32A.RES FRML #911
action [0-2]
PLAYA32A.RES FRML #912
action [0-3]
PLAYA32A.RES FRML #913
action [0-3]
PLAYA32A.RES FRML #914
action [0-4]
PLAYA32A.RES FRML #915
action [0-5]
PLAYA32A.RES FRML #916
action [0-3]
PLAYA32A.RES FRML #917
action [0-3]
PLAYA32A.RES FRML #918
action [0-3]
PLAYA32A.RES FRML #919
action [0-3]
PLAYA32A.RES FRML #920
action [0-3]
PLAYA32A.RES FRML #921
action [0-3]
PLAYA32A.RES FRML #922
action [0-3]
PLAYA32A.RES FRML #925
action [0-3]