tools-gamedev

Tools > Guides > Roman legion 8-direction sample

Roman soldier sprites that read in 8 directions

Short answer: run the 10-second grid check (8 labeled rows S–SW), play the demo across all facings (arrows + 1–5 + C), then slice on the 64×64 grid and name clips char_action_dir (for example hastatus_walk_se) for Godot 4, Unity or RPG Maker. Takes about 10 minutes. The worked example is Roman — telling a hastatus, a centurion and an archer apart at 64px is the hard case — and the free hastatus sample below is byte-identical to the paid files.

Guide date: 2026-09-28. Engines covered: Godot 4.x, Unity 2D, RPG Maker MZ/MV. Engine docs: AnimatedSprite2D · Unity Sprite Editor. Worked-example facts are our own pack files at products/character-animation-studio/roman-legion-vol3/ (slug: roman-legion-vol3; judge PASS 2026-09-28); the recipe works on any seller's sheets cut to the same grid. Buyer search words: "roman soldier sprite", "8 direction sprite", "godot historical character".

Cover of Roman Legion Vol 3: labeled 8-direction hastatus walk grid (rows S SE E NE N NW W SW) plus a three-legionary idle strip and Godot, Unity and RPG Maker engine lines
The real cover (630×500, vendored from the pack's preview/cover.png). Cover the S..SW labels, guess each row's facing from the sprites alone, then uncover — 7/8 or better and you can shop any 8-dir pack by sight.

The 3-step recipe

  1. The 10-second grid check: rows tell you everything. Open the pack's cover or hero image. An honest 8-direction pack shows a labeled walk grid: 8 rows, one per facing, in S SE E NE N NW W SW order top to bottom. Then: (1) count the rows — 8 rows is true 8-direction, 4 rows plus "flip for the rest" is mirrored 4-direction; (2) check the facing order matches the exporter's assumption or diagonals play the wrong facing; (3) compare adjacent diagonals — SE vs E vs NE must actually differ (a scutum, a transverse crest, a bow never mirror cleanly); (4) look for the attack tell — a pilum thrust / gladius cut / arrow-loose that reads at tiny sizes (ours runs at 10fps, hurt at 4fps); (5) demand per-action frame counts — walk 4 / run 6 / attack 4 / idle 2 / hurt 2 per direction is this pack's contract, and any seller that won't state counts is selling a surprise. Honest limit: extended weapon poses clip at the 64px canvas edge on some frames — check the hero close-ups before buying.
  2. The playable-demo test: play the pack before you pay. Grids can lie; a playable demo can't. The full pack ships preview/index.html: arrows switch direction (all 8), keys 1–5 switch action (walk/run/attack/idle/hurt), C switches legionary — 120 anims (3 legionaries × 5 actions × 8 dirs) behind eight keys. Test in two minutes: walk through all 8 facings (no marching-in-place means rows map correctly); press attack and confirm the thrust fires on every facing; press hurt and confirm it reads; press C twice and confirm three visibly distinct legionaries (galea + scutum vs transverse crest + cape vs bow + quiver). No demo from a seller? Ask for the free sample slice instead.
  3. The slice-grid recipe: drop any honest pack into your engine. Every sheet here slices on a 64×64 grid — verify it first with our free Sprite Sheet Slicer & Packer (runs 100% in your browser, no upload). Name every clip <char>_<action>_<dir>, for example hastatus_walk_se. Godot 4: copy sheets to res://rome/, attach assets/godot_roman.gd to an AnimatedSprite2D, call load_sheets("res://rome") then play_action("hastatus","walk","se") (Nearest filtering; honest note: Godot is not installed on our build PC, so the exporter is file-based code verified by selftest plus the HTML5 demo — the in-engine render is your 5-minute check). Unity: Texture Type Sprite (2D and UI), Filter Mode Point, Compression None, slice Multiple on the 64×64 grid per the table, see assets/unity_roman.cs. RPG Maker MZ/MV: drop sheets in img/characters/, event note <ROMAN: hastatus walk>, see assets/rpgmaker_roman.js.
Slice grid for the Roman 64×64 8-direction sheets (exact pack sizes)
SheetCols (frames)Rows (dirs)CellSheet pxStart fps / loop
walk_8dir48 (S,SE,E,NE,N,NW,W,SW)64×64256×5128 / loop
run_8dir6864×64384×5128 / loop
attack_8dir4864×64256×51210 / once
idle_8dir2864×64128×5124 / loop
hurt_8dir2864×64128×5124 / loop
Real hastatus walk spritesheet: 4 columns by 8 rows (S SE E NE N NW W SW top to bottom), 64x64 cells, 256 by 512 pixels
The real free-sample sheet (hastatus_walk_8dir.png, 256×512, vendored byte-identical from the pack's sample/sheets/). Drop it into the Sprite Sheet Slicer with 4 cols × 8 rows and each cell should hold one clean pose — that is the whole grid check, on real files.

Free helper: Roman clip-name calculator

Pick a legionary, action and facing. The helper shows the clip name, the sheet size, and a copy-paste Godot 4 snippet. Everything runs locally — nothing leaves your device.