A downloadable asset pack

Buy Now$12.99 USD or more

Almanac is a calendar for your game that prints itself. It keeps the date - months, weekdays, seasons, the moon and yearly festivals - and draws it: every month as a printed almanac leaf (paper in the season's colours, a seasonal border device, the weekday grid, the moon's phases, festival roundels in their own cells, today ringed in ink), a date plaque for your HUD, and a roundel emblem for every festival.

Nothing is an image file. Every leaf, plaque and emblem is drawn in pure GML from the calendar you define, so your own month names, month lengths, weekdays and festivals print exactly as you wrote them. Change the calendar and the pages change with it.

What is in it

  • 2 presets: "twelve" (12 months, 365 days, 12 festivals) and "fourfold" (four 28-day seasons, the farming-sim shape, 8 festivals), or pass your own definition as a struct
  • 12 festival emblems: harvest, lantern, frost, bloom, flame, tide, star, feast, mask, bell, leaf, sun
  • 8 moon phases from a cycle length you choose, and 4 season looks for paper, ink and border
  • Time that skips cleanly: alm_advance reports every festival passed on the way, so a player who sleeps a week still hears about the fair they missed
  • Countdowns: alm_days_until and alm_upcoming for "Harvest Home in 4 days" on a HUD or a notice board
  • Save and load as one JSON string; a damaged snapshot is refused as a whole and changes nothing
  • A runnable demo room: next day, next week, browse months, switch preset, save and load

Made to drop into a game

// Create
cal = alm_calendar_create("twelve");
alm_set_date(cal, 1, 8, 19);   // year 1, Harvestide 19
// When a day passes
var _passed = alm_advance(cal, 1);   // the festivals reached
// Draw GUI
alm_draw_plaque(cal, 20, 20, 360);
var _t = alm_today(cal);
alm_draw_leaf(cal, _t.month, _t.year, 440, 20, 420, cal.day);

The calendar's whole state is one number, cal.day, so every date is derived and nothing can drift. Everything draws into the current target at the size you ask for, so a leaf works on a GUI layer, a surface, or a book object in the world.

Tested, not just compiled

The in-engine suite reported 38 of 38 assertions on the shipped build: presets, date arithmetic across month and year boundaries, weekdays, the moon cycle, festivals, countdowns, save and load, and every leaf and emblem drawing real ink. The package was imported into a blank GameMaker project and used the way the Readme documents it (14 of 14 checks), and 80 hostile calls against its documented API (undefined, negative, huge and wrong-typed arguments) crashed nothing. Every function the Readme names was checked against the package (21 of 21).

Compatibility

  • GameMaker 2024.14 or later; built and tested on runtime 2024.14.4.268 (not tested on GMRT)
  • Pure GML: no extension, no shader, no sprite. Everything is namespaced alm_, ALM_ and global.alm_
  • Two Open Sans font resources (Apache-2.0, notice included) set every printed word
  • You get the .yymps package, the full readable project, the Readme and the licence

Also from CSAF

For a farming game, Verdure grows the crops your seasons are counting toward, and Welkin draws the sky and weather above them. The same idea exists for RPG Maker MZ as Ephemeris and for Unity as Almanac - The Illustrated Year.

AI disclosure: the code and the generated artwork of this package were written with AI assistance. It contains no audio.

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:

Almanac_GameMaker.zip 531 kB

Development log

Leave a comment

Log in with itch.io to leave a comment.