A downloadable asset pack

Buy Now$12.99 USD or more

Your game already decides who wins a fight. Colosseum runs the tournament around it, and draws it.

Seed a field by rating, draw a single-elimination bracket or a round-robin league, report results from whatever combat you already have, and Colosseum carries winners forward, knocks losers out, levels the rivals who keep surviving, and renders the whole thing: a struck board, a plate for every tie, inked feed lines from round to round, a laurelled champion's plate, and a ruled league table.

And every rival carries a standard - a coat of arms generated from its own key.

  • the silhouette is one of six: heater, iberian, banner, lozenge, pennon, cartouche
  • the field is divided one of eight ways - plain, per pale, per fess, per bend, per bend sinister, quarterly, per saltire, gyronny - between a colour and a metal
  • an ordinary is laid across it in a second colour: fess, pale, bend, chevron, cross or saltire
  • a device is struck in the metal: tower, sun, crescent, spear, wheel, skull, trident, key, flame or anvil

That is 46,080 distinct coats of arms, every one built from geometry at whatever size you ask for. No sprite, no sprite sheet, no atlas, no shader, no surface kept. A rival's arms are the same on every machine and in every save, because they are hashed from the rival's own key - so you can rename a rival freely and its banner does not move.

A standard does not need a tournament either. cls_standard_from_key("house_silt") strikes arms for a guild, a town, a faction or a player's chosen house name, with no state involved. And cls_blazon() describes any of them the way a herald would - "per bend azure and or, a bend vert, a skull" - derived from the same numbers the picture is drawn from, so the words can never drift from the arms.

The whole integration is four lines

my_cup = cls_create({ title: "The Colosseum" });
cls_add_team(my_cup, "ironjaw", "Ironjaw of the Pits", 92);
cls_start(my_cup, "single");                 // or "league"
cls_board_draw(my_cup, 0, 0, gui_w, gui_h, "arena");

Rating drives the seeding and nothing else - your game decides who actually wins. A field that is not a power of two is padded with byes, and a first-round bye is resolved at the draw, so the board never shows a rival playing nobody. Nothing throws: a duplicate id, a field of one, a second draw, a rival arriving after the draw - each is kept out and reported in cls_problems(), so a half-written field still runs.

What ships

  • Pure GML. Five scripts, a demo object and a runnable demo room. No extension, no DLL.
  • Three board styles - arena, vellum and night - and a ruled league table with played, won, drawn, lost and points.
  • Raw, readable, commented source. Every public script carries a header saying what it takes, what it returns and what it refuses. Every global and macro is namespaced cls_ / CLS_, so nothing here can collide with your project.
  • A demo room you can press Play on - SPACE settles the next tie, A runs it out, R redraws, L swaps bracket for league, S cycles the styles.
  • Save and load built in: a bracket is the run, so the save carries the field and the draw.

What was actually tested

Built and tested on GameMaker runtime 2024.14.4.268.

  • A real Igor package build: exit 0, 0 errors, 0 warnings, 178 resources. The gate was proven able to fail on this package - a deliberate break took it to "NOT CLEAN, exit 1, 2 errors", and the file was restored byte-identical.
  • 75 assertions running in engine on the built executable, covering the seed order's defining properties at three field sizes, byes, elimination, levelling, the league table, save and load, and the drawing contracts no assertion normally sees: convexity of all six silhouettes, containment of all 60 device-and-shield pairs, and the colour gap across all 768 field combinations.
  • 48 more assertions in a blank project running only code copied out of the Readme, asserting INK rather than that a call returned - with the positive control checked first.
  • 104 adversarial calls (undefined, negative, huge and wrong-typed arguments) across every documented entry point: zero crashes.

Every image on this page was rendered by the package itself, through the same functions you will call.

Licence

One commercial licence, unlimited games, no attribution required. Redistributing the source as an asset is not permitted.

AI disclosure: this package's code and graphics were generated with AI assistance. There are no sound assets and no authored narrative text.

Purchase

Buy Now$12.99 USD or more

In order to download this asset pack you must purchase it at or above the minimum price of $12.99 USD. You will get access to the following files:

Colosseum_GameMaker.zip 572 kB

Development log