Wizarding Almanac

Fantasy calendar system tracking in-game dates. Custom month names (15 total: Narglenar, Fizzwick, Dragotune, Hexober, etc.) and absurd weekday names (10 total: Moonday, Spellstide, Thirstrange, Oopsday, Againday, etc.). Advances at newday. Displays in village description and newday message. Admin-configurable days/months. Your wizard needs to know what day it is in Chronoquance.

The Fantasy Calendar

Month Names (15 total):

  • 1. Narglenar (probably named after annoying magical pests)
  • 2. Fizzwick (sounds like a failed spell)
  • 3. Wiztember (September for wizards, obviously)
  • 4. Toadsday (an entire month dedicated to toads)
  • 5. Dragotune (dragon month? dragon songs? who knows)
  • 6. Snidgetsun (Quidditch ball got a whole month)
  • 7. Grimblewatch (ominous surveillance period)
  • 8. Hippogust (hippogriffs are gusty, apparently)
  • 9. Boggletide (the month when boggarts are most active)
  • 10. Hexober (October but with more hexing)
  • 11. Mufflemourne (quietly mourning something)
  • 12. Charmuary (January but charming)
  • 13. Thestralius (death horse month)
  • 14. Oblivionth (the month you forget existed)
  • 15. Chronoquance (time-related. quivering?)

Weekday Names (10 total):

  • 1. Moonday (Monday but magical)
  • 2. Spellstide (tide of spells)
  • 3. Whiznesday (Wednesday for wizards)
  • 4. Thirstrange (Thursday? Strange thirst? Both?)
  • 5. Flextay (flexible Friday vibes)
  • 6. Snoreday (lazy Saturday)
  • 7. Wanderday (Sunday wandering)
  • 8. Oopsday (the day mistakes happen)
  • 9. Againday (Groundhog Day the weekday)
  • 10. Nebuladay (cosmic Tuesday?)

How It Tracks Time

Daily Advancement:

  • newday-runonce hook increments day counter
  • When day > dayspermonth (default 50): Increment month, reset day to 1
  • When month > monthsperyear (default 15): Increment year, reset month to 1
  • Weekday cycles independently through daysperweek (default 10)

Current Date Storage:

  • curDay: Numerical day of month (1-50)
  • curMonth: Numerical month (1-15)
  • curMonthName: Text name (e.g., "Hexober")
  • curWkday: Numerical weekday (1-10)
  • curWkdayName: Text name (e.g., "Oopsday")
  • curYear: Year counter (starts random 1-3000)

Where You See It

Village Description:

  • Portrait near alley mutters current date
  • Default: "It's `Whiznesday`, `15 Hexober` of the year `2847`." (then goes back to sleep)
  • Customizable via village-desc hook template

Newday Message:

  • "The enchanted calendar unrolls to reveal: `Oopsday`, `3 Chronoquance`, Year `2848`."
  • Displayed during newday sequence
  • Reminds you what fictional date it is today

Admin Configuration

Customizable Settings:

  • monthsperyear: How many months (range 1-15, default 15)
  • dayspermonth: Days per month (range 20-50, default 50)
  • daysperweek: Weekdays in cycle (range 1-10, default 10)
  • curMonth/curDay/curYear/curWkday: Manually set current date

Random Initialization:

  • On first install: Random month (1-13), random day (1-30), random year (1-3000), random weekday (1-8)
  • Creates unique timeline per server
  • Admin can override to specific date if desired

Practical Use (or Lack Thereof)

Cosmetic Feature:

  • No gameplay mechanics tied to calendar
  • Doesn't affect events, spawns, or bonuses
  • Purely for worldbuilding/immersion

Potential Event Integration:

  • Custom modules could check current month for seasonal events
  • E.g., "Grimblewatch Festival" activates during month 7
  • E.g., "Oopsday" weekday = higher accident rate
  • Not implemented by default (requires custom coding)

Roleplay Value

For RP Communities:

  • Reference dates in character commentary/YOM
  • "Happy Oopsday! Let's meet in the inn during Hexober."
  • Track in-character timelines ("We've been married for 3 Chronoquances!")
  • Adds flavor to world narrative

For Everyone Else:

  • Mostly ignored
  • Sleepy portrait in village tells you it's Thirstrange
  • You shrug and go fight trolls

Technical Details

Hooks Used:

  • newday-runonce: Increment date counters
  • newday: Display calendar message
  • village-desc: Show date in village
  • changesetting: Update month/weekday names when numerical values change

Name Generation:

  • calendar_month($month): Returns month name for numerical month
  • calendar_weekday($weekday): Returns weekday name for numerical weekday
  • Names hardcoded in switch statements (no i18n)

Historical Note

Month/weekday names are delightfully absurd mashups of:

  • Real calendar parodies (Wiztember, Hexober, Charmuary)
  • Harry Potter creatures (Nargles, Snidgets, Thestrals)
  • Temporal concepts (Chronoquance, Oblivionth, Againday)
  • Pure nonsense (Fizzwick, Mufflemourne, Nebuladay)

Whoever named these was having a *great* time.

Limitations

  • No Leap Years: Every year is exactly the same length
  • No Seasons: Month names don't correspond to seasonal changes
  • No Moon Phases: Separate moon module handles that
  • Arbitrary Length: 15 months × 50 days = 750-day year (vs Earth's 365)

Wizarding Almanac: where you track the passage of time using month names like "Toadsday" and "Oblivionth" (the month everyone forgets) and weekdays like "Oopsday" (for mistakes) and "Againday" (for when Oopsday happens twice). Your server's been running for 2,847 years according to this calendar, which in real time is probably like 3 months, but who's counting when it's Snoreday in Chronoquance?