Module:BassaridianCalendar: Difference between revisions

From MicrasWiki
Jump to navigationJump to search
No edit summary
No edit summary
 
(40 intermediate revisions by the same user not shown)
Line 2: Line 2:


function p.getCurrentDate()
function p.getCurrentDate()
    -- Get the current date
     local startDate = os.time({year = 1999, month = 8, day = 6})
     local yearDay = tonumber(os.date("%j")) -- Day of the year (1-365/366)
     local secondsInDay = 86400
     local isLeapYear = (tonumber(os.date("%Y")) % 4 == 0 and (tonumber(os.date("%Y")) % 100 ~= 0 or tonumber(os.date("%Y")) % 400 == 0))
     local daysPerYear = 183
     local totalDays = isLeapYear and 366 or 365 -- Total days in the Gregorian year


    -- Bassaridian calendar constants
     local currentDate = os.time()
     local yearStart = 237 -- August 25th is Day 237 in the Gregorian calendar
     local totalDaysElapsed = math.floor((currentDate - startDate) / secondsInDay)
     local calendarDays = 183 -- Total days in the Bassaridian year
    local monthLength = 61 -- Each Bassaridian month has 61 days


     -- Adjust for Bassaridian calendar
    local yearFraction = totalDaysElapsed / daysPerYear
     local adjustedDay = yearDay - yearStart
    local psscYear = math.floor(yearFraction)
     if adjustedDay < 0 then
    local dayOfYear = math.floor((yearFraction - psscYear) * daysPerYear) + 1
         adjustedDay = adjustedDay + totalDays -- Adjust for wraparound to the previous year
 
     -- DEBUG/LOG: if you'd like to see the dayOfYear for troubleshooting
     -- mw.log("DEBUG: dayOfYear = " .. tostring(dayOfYear))
 
    ----------------------------------------------------------------------------
    -- 1) SAFETY CHECK: Ensure dayOfYear is between 1 and 183 (inclusive)
    ----------------------------------------------------------------------------
     if dayOfYear < 1 then
         -- Option A: Wrap around by adding daysPerYear until we're back in range
        dayOfYear = dayOfYear + daysPerYear
        while dayOfYear < 1 do
            dayOfYear = dayOfYear + daysPerYear
        end
 
        -- Option B (alternative) could be a modulo approach:
        -- dayOfYear = ((dayOfYear - 1) % daysPerYear) + 1
    elseif dayOfYear > daysPerYear then
        -- If for some reason it exceeds 183, wrap around or clamp
        dayOfYear = ((dayOfYear - 1) % daysPerYear) + 1
     end
     end
    local bassaridianDay = (adjustedDay % calendarDays) + 1


     -- Determine month, day within the month, and zodiac sign
     ----------------------------------------------------------------------------
     local bassaridianMonth, bassaridianMonthDay, zodiacSign
    -- 2) ZODIAC PROVERBS
     if bassaridianDay <= 61 then
    ----------------------------------------------------------------------------
         bassaridianMonth = "Atosiel"
    local zodiacProverbs = {
         bassaridianMonthDay = bassaridianDay
        Atosien  = "The first light reveals the sacred cycle of renewal.",
         if bassaridianMonthDay <= 12 then
        Eosena    = "The dawn whispers: every step is a rebirth.",
             zodiacSign = "Atosien"
        Micrasha  = "Wisdom is the balance of shadow and flame.",
         elseif bassaridianMonthDay <= 24 then
        Pyreska  = "Creation ignites in the fires of transformation.",
             zodiacSign = "Eosena"
        Indomin  = "Two paths intertwine: strength in unity, clarity in duality.",
         elseif bassaridianMonthDay <= 36 then
        Chrysen  = "Gold is the soul's test: will you hoard or share?",
             zodiacSign = "Micrasha"
        Thalassian= "The tides of Thalassiel teach patience and purpose.",
         elseif bassaridianMonthDay <= 48 then
        Nephelia  = "Dreams are stars, fleeting yet eternal in the night sky.",
             zodiacSign = "Pyreska"
        Glinaeus  = "The frost preserves what must endure.",
        Noctien  = "Night guides those who seek the unseen truths.",
        Opsithia  = "The harvest feeds not just the body, but the spirit.",
        Stygian  = "Through the Styx flows the essence of transformation.",
        Faunian  = "The forests sing of life and the balance it brings.",
        Silenian  = "Celebration is the nectar of divine abundance.",
        Catosien  = "Order shapes greatness; the straight path ascends."
    }
 
    ----------------------------------------------------------------------------
    -- 3) DETERMINE MONTH, DAY-IN-MONTH, AND ZODIAC
    ----------------------------------------------------------------------------
    local month, dayInMonth, zodiac
 
     -- Day ranges: 1..61 => Atosiel, 62..122 => Thalassiel, 123..183 => Opsitheiel
     if dayOfYear <= 61 then
         month = "Atosiel"
         dayInMonth = dayOfYear
 
        -- ZODIAC
         if dayInMonth <= 12 then
             zodiac = "Atosien"
         elseif dayInMonth <= 24 then
             zodiac = "Eosena"
         elseif dayInMonth <= 36 then
             zodiac = "Micrasha"
         elseif dayInMonth <= 48 then
             zodiac = "Pyreska"
         else
         else
             zodiacSign = "Indomin"
             zodiac = "Indomin"
         end
         end
     elseif bassaridianDay <= 121 then -- Month 2: Thalassiel
 
         bassaridianMonth = "Thalassiel"
     elseif dayOfYear <= 122 then
         bassaridianMonthDay = bassaridianDay - 61
         month = "Thalassiel"
         if bassaridianMonthDay <= 12 then
         dayInMonth = dayOfYear - 61
             zodiacSign = "Chrysen"
 
         elseif bassaridianMonthDay <= 24 then
        -- ZODIAC
             zodiacSign = "Thalassian"
         if dayInMonth <= 12 then
         elseif bassaridianMonthDay <= 36 then
             zodiac = "Chrysen"
             zodiacSign = "Nephelia"
         elseif dayInMonth <= 24 then
         elseif bassaridianMonthDay <= 48 then
             zodiac = "Thalassian"
             zodiacSign = "Glinaeus"
         elseif dayInMonth <= 36 then
             zodiac = "Nephelia"
         elseif dayInMonth <= 48 then
             zodiac = "Glinaeus"
         else
         else
             zodiacSign = "Noctien"
             zodiac = "Noctien"
         end
         end
     else -- Month 3: Opsitheiel
 
         bassaridianMonth = "Opsitheiel"
     else
         bassaridianMonthDay = bassaridianDay - 121
         month = "Opsitheiel"
         if bassaridianMonthDay <= 12 then
         dayInMonth = dayOfYear - 122
             zodiacSign = "Opsithia"
 
         elseif bassaridianMonthDay <= 24 then
        -- ZODIAC
             zodiacSign = "Stygian"
         if dayInMonth <= 12 then
         elseif bassaridianMonthDay <= 36 then
             zodiac = "Opsithia"
             zodiacSign = "Faunian"
         elseif dayInMonth <= 24 then
         elseif bassaridianMonthDay <= 48 then
             zodiac = "Stygian"
             zodiacSign = "Silenian"
         elseif dayInMonth <= 36 then
             zodiac = "Faunian"
         elseif dayInMonth <= 48 then
             zodiac = "Silenian"
         else
         else
             zodiacSign = "Catosien"
             zodiac = "Catosien"
         end
         end
     end
     end


     -- Event lookup table
     ----------------------------------------------------------------------------
     local events = {
     -- 4) SAFETY NET: If somehow dayInMonth is still nil, handle gracefully
        ["Atosiel,6"] = "Bayram al-Nur (Festival of Light) in [[List of cities in Bassaridia Vaeringheim#Vaeringheim|Vaeringheim]]",
    ----------------------------------------------------------------------------
        ["Atosiel,18"] = "Chag Or Hadash (Festival of New Light) in [[List of cities in Bassaridia Vaeringheim#Luminaria|Luminaria]]",
    if not dayInMonth then
        ["Atosiel,30"] = "Symposion Eirinis (Symposium of Harmony) in [[List of cities in Bassaridia Vaeringheim#Serena|Serena]]",
        -- Provide a fallback, e.g., default to day 1 in Atosiel
        ["Atosiel,43"] = "Alev Günü (Day of Flame) in [[List of cities in Bassaridia Vaeringheim#Pyralis|Pyralis]]",
        dayInMonth = 1
        ["Atosiel,55"] = "Tikkun Tzel (Repair of Shadows) in [[List of cities in Bassaridia Vaeringheim#Symphonara|Symphonara]]",
        month = "Atosiel"
        ["Thalassiel,67"] = "Panegyris Chrysou (Golden Gathering) in [[List of cities in Bassaridia Vaeringheim#Aurelia|Aurelia]]",
        zodiac = "Atosien"
        ["Thalassiel,80"] = "Mehtap Dalgası (Moonlit Tide) in [[List of cities in Bassaridia Vaeringheim#Vaeringheim|Vaeringheim]]",
    end
        ["Thalassiel,92"] = "Oneiro Foteino (Dream of Illumination) in [[List of cities in Bassaridia Vaeringheim#Somniumpolis|Somniumpolis]]",
 
        ["Thalassiel,105"] = "Erev Galgal (Eve of Cycles) in [[List of cities in Bassaridia Vaeringheim#Nexa|Nexa]]",
    ----------------------------------------------------------------------------
        ["Thalassiel,115"] = "Leilat al-Kamar (Night of the Moon) in [[List of cities in Bassaridia Vaeringheim#Lunalis Sancta|Lunalis Sancta]]",
    -- 5) DEFINE EVENTS WITH CORRECTED DAY ALIGNMENT AND SHORT DESCRIPTIONS
        ["Opsitheiel,128"] = "Chag Tvuah (Festival of Harvest) in [[List of cities in Bassaridia Vaeringheim#Sylvapolis|Sylvapolis]]",
    ----------------------------------------------------------------------------
        ["Opsitheiel,140"] = "Anagenesis Eirmos (Procession of Rebirth) in [[List of cities in Bassaridia Vaeringheim#Acheron|Acheron]]",
local events = {
        ["Opsitheiel,150"] = "Panagia Therizis (Holy Day of the Reaper) in [[List of cities in Bassaridia Vaeringheim#Sylvapolis|Sylvapolis]]",
    ["Atosiel,1"] = "Cricket Rise Festival [[Alperkin]] – Defining the winter-to-spring shift, this festival commemorates the crickets’ re-emergence from dormancy. Celebrated during the first full moon following their initial nocturnal song, some regions extend festivities until the whip-poor-will’s call.",
        ["Opsitheiel,165"] = "Karnavali Thysias (Carnival of Celebration) in [[List of cities in Bassaridia Vaeringheim#Erythros|Erythros]]",
    ["Atosiel,6"] = "Bayram al-Nur (Festival of Light) [Vaeringheim] – Honors Atos’s creative power with candlelit processions, tales of divine origins, and symbolic lantern releases at dusk.",
        ["Opsitheiel,175"] = "Sefar Yashar (Straight Path Celebration) in [[List of cities in Bassaridia Vaeringheim#Catonis Atrium|Catonis Atrium]]",
    ["Atosiel,18"] = "Chag Or Hadash (Festival of New Light) [Luminaria] – Dawn prayers, luminous lanterns, and sunrise ceremonies dedicated to the Lady Divine Eos.",
    }
    ["Atosiel,30"] = "Symposion Eirinis (Symposium of Harmony) [Serena] – Gatherings to share Micrasha’s wisdom through poetry, debates, and a communal harmony feast.",
    ["Atosiel,34"] = "Crösakarion [Luminaria] – Street dances and mask parades celebrating Host Star Crösacío, revered as a guiding light for travelers.",
    ["Atosiel,36"] = "Liléigostros [Somniumpolis] – Banquets by starlight to honor Host Star Liléigos, with shared dreams and prophetic storytelling.",
    ["Atosiel,43"] = "Alev Günü (Day of Flame) [Pyralis] – Ritual bonfires, fire-dancer troupes, and chanting of “Ignis Aeternum” in homage to Pyros.",
    ["Atosiel,44"] = "Orebellion [Thermosalem] – Vibrant street markets and fire-breathing displays celebrating Host Star Orebele’s energetic spirit.",
    ["Atosiel,48"] = "Day of Abandonment [Vaeringheim] – Somber vigils and dimly lit marches recalling the exile of mortals by the Old Gods.",
    ["Atosiel,54"] = "Sanashalros [Keybir-Aviv] – Mystical rites at midnight to honor Sanashalo’s zenith, often including rhythmic drums and trance dances.",
    ["Atosiel,55"] = "Tikkun Tzel (Repair of Shadows) [Symphonara] – Healing ceremonies to reconcile Indigo and Momiji’s followers, culminating in a unifying communal supper.",
    ["Atosiel,58"] = "Gahtarion [Vaeringheim] – Illuminated boat parades along canals, celebrating Host Star Gaht and blessing local waters.",
    ["Atosiel,59"] = "Agavronos [Aurelia] – Tree-planting ceremonies for Host Star Agave, where ribbons bearing hopes are tied to young saplings.",
    ["Atosiel,61"] = "Bebekarion [Akróstadium] – Communal meals in honor of Host Star Bebeakaus, each feast opening with a unifying toast.",
    ["Thalassiel,1"] = "Cicada Song Festival [[Alperkin]] – Occurring near the summer solstice, it begins after the season’s first cicada chorus. Alperkin’s most raucous festival, marking annual tribal migrations with drums, dancing, and open-air feasts.",
    ["Thalassiel,2"] = "Amaäzakar [Delphica] – A glowing lantern festival dedicated to Host Star Amaäz, believed to ward off misfortune with floating lights on rivers and ponds.",
    ["Thalassiel,6"] = "Panegyris Chrysou (Golden Gathering) [Aurelia] – A bustling trade fair under Chrysos’s blessing, featuring fortune-telling and gold-themed decorations.",
    ["Thalassiel,10"] = "Dilëtazorium [Sufriya] – Reflective day honoring Host Star Dilëtaz with quiet charity, abstaining from loud festivities.",
    ["Thalassiel,16"] = "Amazärum [Acheron] – Torchlit dances and shadow plays dramatizing the renewing power of Host Star Amazä.",
    ["Thalassiel,17"] = "Tävrosion [Thermosalem] – Contemplative meditations for Host Star Tä, often centered on sacred texts and soft chanting.",
    ["Thalassiel,18"] = "Bulhanum [Luminaria] – Ancestral rites for Host Star Bulhanu, where oral histories and offerings strengthen familial bonds.",
    ["Thalassiel,19"] = "Mehtap Dalgası (Moonlit Tide) [Vaeringheim] – Nighttime beach rituals invoking Thalassa’s lunar energy through chanted blessings and tidal sculptures.",
    ["Thalassiel,30"] = "Amáenarion [Vaeringheim] – Storytelling gatherings around bonfires, extolling the legends of Host Stars Amáenu and Pythe.",
    ["Thalassiel,31"] = "Oneiro Foteino (Dream of Illumination) [Somniumpolis] – Nephele’s dream festival, featuring guided dream-interpretation and surreal art displays.",
    ["Thalassiel,39"] = "Anniversary of victory in the New South Jangsong Campaign [Nexa] – Military parades and victory feasts celebrating the nation’s past heroes.",
    ["Thalassiel,44"] = "Erev Galgal (Eve of Cycles) [Nexa] – Glinos cycle rites with rotating chants, circle dances, and patterned floor art symbolizing renewal.",
    ["Thalassiel,45"] = "Bassaridia Festival [Somniumpolis] – A vibrant salute to Alperkin roots, featuring folk dances, drums, and ancestral legend reenactments.",
    ["Thalassiel,46"] = "Osirionos [Diamandis] – A spirited festival venerating Host Star Osiríos, concluding with pyrotechnics amid flower-draped streets.",
    ["Thalassiel,48"] = "Anniversary of victory in the Southern Lake Morovia Campaign [Somniumpolis] – Ceremonial marches, speeches, and wreaths honoring strategic triumphs.",
    ["Thalassiel,50"] = "Amaprion [Serena] – Citywide processions for Host Star Amap, adorned with floral wreaths and uplifting hymns.",
    ["Thalassiel,52"] = "Atämiorium [Catonis Atrium] – Ascension rites glorifying Host Star Atämios’s wisdom, completed by the release of floating lanterns.",
    ["Thalassiel,54"] = "Leilat al-Kamar (Night of the Moon) [Lunalis Sancta] – A moonlit vigil devoted to Noctis, marked by silent gatherings and midnight prayer.",
    ["Thalassiel,56"] = "Dranamorium [Lykopolis] – A contemplative day for Host Star Dranamos, including journaling, spiritual reading, and communal silence.",
    ["Thalassiel,58"] = "Aprobellium [Thermosalem] – Streets aglow with red lanterns honoring Host Star Aprobelle, featuring acrobats and spicy festival drinks.",
    ["Thalassiel,59"] = "Azorion [Pyralis] – A high-energy carnival lauding Host Star Azos’s fiery strength, with costumed parades and a midnight fireworks display.",
    ["Thalassiel,60"] = "Ocanarion [Tel-Amin] – Water-purification ceremonies for Host Star Ocananus, culminating in floating candles on rivers and lakes.",
    ["Thalassiel,61"] = "Taşrakah (Reverence of the Stone) [Luminaria] – Devotions to Eos and Tarsica, including stone-carving rites and anointing with fragrant oils.",
    ["Opsitheiel,1"] = "Cricket Fall Festival [[Alperkin]] – First full moon after crickets’ final song, a dark celebration honoring the dead and the Harpy Goddess of the Whip-Poor-Will. Some rituals involve necromancy, gambling, and taboo feasts as the Noctic-Rabred plant reaches peak toxicity.",
    ["Opsitheiel,6"] = "Chag Tvuah (Festival of Harvest) [Sylvapolis] – Joyous festivities praising Opsithe’s bounty with communal feasts, harvest dances, and bonfire-lit storytelling.",
    ["Opsitheiel,7"] = "Nyarion [Delphica] – Guided meditations and midnight music for Host Star Nyama, with scribes recording personal visions onto communal scrolls.",
    ["Opsitheiel,13"] = "Danassion [Diamandis] – Cemetery-side vigils and modest feasts to honor Host Star Danaß, bridging the living and the departed.",
    ["Opsitheiel,18"] = "Anagenesis Eirmos (Procession of Rebirth) [Acheron] – Dramatic Styx-themed parades symbolizing transformation, crossing bridges to echo mythic underworld journeys.",
    ["Opsitheiel,23"] = "Hazamorium [Sufriya] – Devotees ascend hills to watch the stars under Host Star Hazaméos, interpreting cloud movements as portents of fate.",
    ["Opsitheiel,28"] = "Panagia Therizis (Holy Day of the Reaper) [Sylvapolis] – Dual homage to Faun and Opsithe with seed-scattering and scythe dances that affirm life’s cyclical nature.",
    ["Opsitheiel,30"] = "The Silence [[Alperkin]] – A mid-winter festival coinciding with the solstice, observed through hushed reflections, minimal light, and introspective drumbeats—an austere contrast to the lively Cicada Song Festival.",
    ["Opsitheiel,35"] = "Häparion [[Vaeringheim]] – An art-centric celebration of Host Star Häpi, featuring live sculpting, painting contests, and open-air exhibitions.",
    ["Opsitheiel,37"] = "Anniversary of victory in the Morovian Frontier Campaign [Acheron] – Honored with night marches, wreath-laying, and recitations of epic battle poetry.",
    ["Opsitheiel,43"] = "Karnavali Thysias (Carnival of Celebration) [Erythros] – Wine-fueled revelries paying tribute to Silenus, with vivid satyr-like costumes, flutes, and dance. Karnavali Thysias also celebrates the role of the Host Spirit in Bassaridian society, the introduction of Dionysus to Micras by the Host Spirit, and the establishment of the Stripping Path in the 34th Era PSSC.",
    ["Opsitheiel,53"] = "Sefar Yashar (Straight Path Celebration) [Catonis Atrium] – Pilgrims walk a symbolic Path of Virtue and attend sermons on moral clarity in Cato’s name."
}
 
 


     -- Find the event for the current date
     ----------------------------------------------------------------------------
     local eventKey = bassaridianMonth .. "," .. bassaridianMonthDay
    -- 6) EVENT LOOKUP
    ----------------------------------------------------------------------------
     local eventKey = month .. "," .. dayInMonth
     local event = events[eventKey] or "No significant events today."
     local event = events[eventKey] or "No significant events today."


     -- Return the formatted date with a link to the Zodiac
     ----------------------------------------------------------------------------
     return bassaridianMonthDay .. ", " .. bassaridianMonth .. " (" .. "[[Reformed_Stripping_Path#Overview_of_the_Bassaridian_Zodiac|" .. zodiacSign .. "]]" .. "), 50 PSSC – " .. event
    -- 7) LOOK UP PROVERB
    ----------------------------------------------------------------------------
    local dailyProverb = zodiacProverbs[zodiac] or "No proverb found."
 
    ----------------------------------------------------------------------------
    -- 8) RETURN THE RESULT
    ----------------------------------------------------------------------------
     return dayOfYear .. ", " .. month .. " (" .. zodiac .. "), " .. psscYear
          .. " PSSC – " .. event .. " – Proverb: " .. dailyProverb
end
end


return p
return p

Latest revision as of 01:16, 4 February 2025

Documentation for this module may be created at Module:BassaridianCalendar/doc

local p = {}

function p.getCurrentDate()
    local startDate = os.time({year = 1999, month = 8, day = 6})
    local secondsInDay = 86400
    local daysPerYear = 183

    local currentDate = os.time()
    local totalDaysElapsed = math.floor((currentDate - startDate) / secondsInDay)

    local yearFraction = totalDaysElapsed / daysPerYear
    local psscYear = math.floor(yearFraction)
    local dayOfYear = math.floor((yearFraction - psscYear) * daysPerYear) + 1

    -- DEBUG/LOG: if you'd like to see the dayOfYear for troubleshooting
    -- mw.log("DEBUG: dayOfYear = " .. tostring(dayOfYear))

    ----------------------------------------------------------------------------
    -- 1) SAFETY CHECK: Ensure dayOfYear is between 1 and 183 (inclusive)
    ----------------------------------------------------------------------------
    if dayOfYear < 1 then
        -- Option A: Wrap around by adding daysPerYear until we're back in range
        dayOfYear = dayOfYear + daysPerYear
        while dayOfYear < 1 do
            dayOfYear = dayOfYear + daysPerYear
        end

        -- Option B (alternative) could be a modulo approach:
        -- dayOfYear = ((dayOfYear - 1) % daysPerYear) + 1
    elseif dayOfYear > daysPerYear then
        -- If for some reason it exceeds 183, wrap around or clamp
        dayOfYear = ((dayOfYear - 1) % daysPerYear) + 1
    end

    ----------------------------------------------------------------------------
    -- 2) ZODIAC PROVERBS
    ----------------------------------------------------------------------------
    local zodiacProverbs = {
        Atosien   = "The first light reveals the sacred cycle of renewal.",
        Eosena    = "The dawn whispers: every step is a rebirth.",
        Micrasha  = "Wisdom is the balance of shadow and flame.",
        Pyreska   = "Creation ignites in the fires of transformation.",
        Indomin   = "Two paths intertwine: strength in unity, clarity in duality.",
        Chrysen   = "Gold is the soul's test: will you hoard or share?",
        Thalassian= "The tides of Thalassiel teach patience and purpose.",
        Nephelia  = "Dreams are stars, fleeting yet eternal in the night sky.",
        Glinaeus  = "The frost preserves what must endure.",
        Noctien   = "Night guides those who seek the unseen truths.",
        Opsithia  = "The harvest feeds not just the body, but the spirit.",
        Stygian   = "Through the Styx flows the essence of transformation.",
        Faunian   = "The forests sing of life and the balance it brings.",
        Silenian  = "Celebration is the nectar of divine abundance.",
        Catosien  = "Order shapes greatness; the straight path ascends."
    }

    ----------------------------------------------------------------------------
    -- 3) DETERMINE MONTH, DAY-IN-MONTH, AND ZODIAC
    ----------------------------------------------------------------------------
    local month, dayInMonth, zodiac

    -- Day ranges: 1..61 => Atosiel, 62..122 => Thalassiel, 123..183 => Opsitheiel
    if dayOfYear <= 61 then
        month = "Atosiel"
        dayInMonth = dayOfYear

        -- ZODIAC
        if dayInMonth <= 12 then
            zodiac = "Atosien"
        elseif dayInMonth <= 24 then
            zodiac = "Eosena"
        elseif dayInMonth <= 36 then
            zodiac = "Micrasha"
        elseif dayInMonth <= 48 then
            zodiac = "Pyreska"
        else
            zodiac = "Indomin"
        end

    elseif dayOfYear <= 122 then
        month = "Thalassiel"
        dayInMonth = dayOfYear - 61

        -- ZODIAC
        if dayInMonth <= 12 then
            zodiac = "Chrysen"
        elseif dayInMonth <= 24 then
            zodiac = "Thalassian"
        elseif dayInMonth <= 36 then
            zodiac = "Nephelia"
        elseif dayInMonth <= 48 then
            zodiac = "Glinaeus"
        else
            zodiac = "Noctien"
        end

    else
        month = "Opsitheiel"
        dayInMonth = dayOfYear - 122

        -- ZODIAC
        if dayInMonth <= 12 then
            zodiac = "Opsithia"
        elseif dayInMonth <= 24 then
            zodiac = "Stygian"
        elseif dayInMonth <= 36 then
            zodiac = "Faunian"
        elseif dayInMonth <= 48 then
            zodiac = "Silenian"
        else
            zodiac = "Catosien"
        end
    end

    ----------------------------------------------------------------------------
    -- 4) SAFETY NET: If somehow dayInMonth is still nil, handle gracefully
    ----------------------------------------------------------------------------
    if not dayInMonth then
        -- Provide a fallback, e.g., default to day 1 in Atosiel
        dayInMonth = 1
        month = "Atosiel"
        zodiac = "Atosien"
    end

    ----------------------------------------------------------------------------
    -- 5) DEFINE EVENTS WITH CORRECTED DAY ALIGNMENT AND SHORT DESCRIPTIONS
    ----------------------------------------------------------------------------
local events = {
    ["Atosiel,1"] = "Cricket Rise Festival [[Alperkin]] – Defining the winter-to-spring shift, this festival commemorates the crickets’ re-emergence from dormancy. Celebrated during the first full moon following their initial nocturnal song, some regions extend festivities until the whip-poor-will’s call.",
    ["Atosiel,6"] = "Bayram al-Nur (Festival of Light) [Vaeringheim] – Honors Atos’s creative power with candlelit processions, tales of divine origins, and symbolic lantern releases at dusk.",
    ["Atosiel,18"] = "Chag Or Hadash (Festival of New Light) [Luminaria] – Dawn prayers, luminous lanterns, and sunrise ceremonies dedicated to the Lady Divine Eos.",
    ["Atosiel,30"] = "Symposion Eirinis (Symposium of Harmony) [Serena] – Gatherings to share Micrasha’s wisdom through poetry, debates, and a communal harmony feast.",
    ["Atosiel,34"] = "Crösakarion [Luminaria] – Street dances and mask parades celebrating Host Star Crösacío, revered as a guiding light for travelers.",
    ["Atosiel,36"] = "Liléigostros [Somniumpolis] – Banquets by starlight to honor Host Star Liléigos, with shared dreams and prophetic storytelling.",
    ["Atosiel,43"] = "Alev Günü (Day of Flame) [Pyralis] – Ritual bonfires, fire-dancer troupes, and chanting of “Ignis Aeternum” in homage to Pyros.",
    ["Atosiel,44"] = "Orebellion [Thermosalem] – Vibrant street markets and fire-breathing displays celebrating Host Star Orebele’s energetic spirit.",
    ["Atosiel,48"] = "Day of Abandonment [Vaeringheim] – Somber vigils and dimly lit marches recalling the exile of mortals by the Old Gods.",
    ["Atosiel,54"] = "Sanashalros [Keybir-Aviv] – Mystical rites at midnight to honor Sanashalo’s zenith, often including rhythmic drums and trance dances.",
    ["Atosiel,55"] = "Tikkun Tzel (Repair of Shadows) [Symphonara] – Healing ceremonies to reconcile Indigo and Momiji’s followers, culminating in a unifying communal supper.",
    ["Atosiel,58"] = "Gahtarion [Vaeringheim] – Illuminated boat parades along canals, celebrating Host Star Gaht and blessing local waters.",
    ["Atosiel,59"] = "Agavronos [Aurelia] – Tree-planting ceremonies for Host Star Agave, where ribbons bearing hopes are tied to young saplings.",
    ["Atosiel,61"] = "Bebekarion [Akróstadium] – Communal meals in honor of Host Star Bebeakaus, each feast opening with a unifying toast.",
    ["Thalassiel,1"] = "Cicada Song Festival [[Alperkin]] – Occurring near the summer solstice, it begins after the season’s first cicada chorus. Alperkin’s most raucous festival, marking annual tribal migrations with drums, dancing, and open-air feasts.",
    ["Thalassiel,2"] = "Amaäzakar [Delphica] – A glowing lantern festival dedicated to Host Star Amaäz, believed to ward off misfortune with floating lights on rivers and ponds.",
    ["Thalassiel,6"] = "Panegyris Chrysou (Golden Gathering) [Aurelia] – A bustling trade fair under Chrysos’s blessing, featuring fortune-telling and gold-themed decorations.",
    ["Thalassiel,10"] = "Dilëtazorium [Sufriya] – Reflective day honoring Host Star Dilëtaz with quiet charity, abstaining from loud festivities.",
    ["Thalassiel,16"] = "Amazärum [Acheron] – Torchlit dances and shadow plays dramatizing the renewing power of Host Star Amazä.",
    ["Thalassiel,17"] = "Tävrosion [Thermosalem] – Contemplative meditations for Host Star Tä, often centered on sacred texts and soft chanting.",
    ["Thalassiel,18"] = "Bulhanum [Luminaria] – Ancestral rites for Host Star Bulhanu, where oral histories and offerings strengthen familial bonds.",
    ["Thalassiel,19"] = "Mehtap Dalgası (Moonlit Tide) [Vaeringheim] – Nighttime beach rituals invoking Thalassa’s lunar energy through chanted blessings and tidal sculptures.",
    ["Thalassiel,30"] = "Amáenarion [Vaeringheim] – Storytelling gatherings around bonfires, extolling the legends of Host Stars Amáenu and Pythe.",
    ["Thalassiel,31"] = "Oneiro Foteino (Dream of Illumination) [Somniumpolis] – Nephele’s dream festival, featuring guided dream-interpretation and surreal art displays.",
    ["Thalassiel,39"] = "Anniversary of victory in the New South Jangsong Campaign [Nexa] – Military parades and victory feasts celebrating the nation’s past heroes.",
    ["Thalassiel,44"] = "Erev Galgal (Eve of Cycles) [Nexa] – Glinos cycle rites with rotating chants, circle dances, and patterned floor art symbolizing renewal.",
    ["Thalassiel,45"] = "Bassaridia Festival [Somniumpolis] – A vibrant salute to Alperkin roots, featuring folk dances, drums, and ancestral legend reenactments.",
    ["Thalassiel,46"] = "Osirionos [Diamandis] – A spirited festival venerating Host Star Osiríos, concluding with pyrotechnics amid flower-draped streets.",
    ["Thalassiel,48"] = "Anniversary of victory in the Southern Lake Morovia Campaign [Somniumpolis] – Ceremonial marches, speeches, and wreaths honoring strategic triumphs.",
    ["Thalassiel,50"] = "Amaprion [Serena] – Citywide processions for Host Star Amap, adorned with floral wreaths and uplifting hymns.",
    ["Thalassiel,52"] = "Atämiorium [Catonis Atrium] – Ascension rites glorifying Host Star Atämios’s wisdom, completed by the release of floating lanterns.",
    ["Thalassiel,54"] = "Leilat al-Kamar (Night of the Moon) [Lunalis Sancta] – A moonlit vigil devoted to Noctis, marked by silent gatherings and midnight prayer.",
    ["Thalassiel,56"] = "Dranamorium [Lykopolis] – A contemplative day for Host Star Dranamos, including journaling, spiritual reading, and communal silence.",
    ["Thalassiel,58"] = "Aprobellium [Thermosalem] – Streets aglow with red lanterns honoring Host Star Aprobelle, featuring acrobats and spicy festival drinks.",
    ["Thalassiel,59"] = "Azorion [Pyralis] – A high-energy carnival lauding Host Star Azos’s fiery strength, with costumed parades and a midnight fireworks display.",
    ["Thalassiel,60"] = "Ocanarion [Tel-Amin] – Water-purification ceremonies for Host Star Ocananus, culminating in floating candles on rivers and lakes.",
    ["Thalassiel,61"] = "Taşrakah (Reverence of the Stone) [Luminaria] – Devotions to Eos and Tarsica, including stone-carving rites and anointing with fragrant oils.",
    ["Opsitheiel,1"] = "Cricket Fall Festival [[Alperkin]] – First full moon after crickets’ final song, a dark celebration honoring the dead and the Harpy Goddess of the Whip-Poor-Will. Some rituals involve necromancy, gambling, and taboo feasts as the Noctic-Rabred plant reaches peak toxicity.",
    ["Opsitheiel,6"] = "Chag Tvuah (Festival of Harvest) [Sylvapolis] – Joyous festivities praising Opsithe’s bounty with communal feasts, harvest dances, and bonfire-lit storytelling.",
    ["Opsitheiel,7"] = "Nyarion [Delphica] – Guided meditations and midnight music for Host Star Nyama, with scribes recording personal visions onto communal scrolls.",
    ["Opsitheiel,13"] = "Danassion [Diamandis] – Cemetery-side vigils and modest feasts to honor Host Star Danaß, bridging the living and the departed.",
    ["Opsitheiel,18"] = "Anagenesis Eirmos (Procession of Rebirth) [Acheron] – Dramatic Styx-themed parades symbolizing transformation, crossing bridges to echo mythic underworld journeys.",
    ["Opsitheiel,23"] = "Hazamorium [Sufriya] – Devotees ascend hills to watch the stars under Host Star Hazaméos, interpreting cloud movements as portents of fate.",
    ["Opsitheiel,28"] = "Panagia Therizis (Holy Day of the Reaper) [Sylvapolis] – Dual homage to Faun and Opsithe with seed-scattering and scythe dances that affirm life’s cyclical nature.",
    ["Opsitheiel,30"] = "The Silence [[Alperkin]] – A mid-winter festival coinciding with the solstice, observed through hushed reflections, minimal light, and introspective drumbeats—an austere contrast to the lively Cicada Song Festival.",
    ["Opsitheiel,35"] = "Häparion [[Vaeringheim]] – An art-centric celebration of Host Star Häpi, featuring live sculpting, painting contests, and open-air exhibitions.",
    ["Opsitheiel,37"] = "Anniversary of victory in the Morovian Frontier Campaign [Acheron] – Honored with night marches, wreath-laying, and recitations of epic battle poetry.",
    ["Opsitheiel,43"] = "Karnavali Thysias (Carnival of Celebration) [Erythros] – Wine-fueled revelries paying tribute to Silenus, with vivid satyr-like costumes, flutes, and dance. Karnavali Thysias also celebrates the role of the Host Spirit in Bassaridian society, the introduction of Dionysus to Micras by the Host Spirit, and the establishment of the Stripping Path in the 34th Era PSSC.",
    ["Opsitheiel,53"] = "Sefar Yashar (Straight Path Celebration) [Catonis Atrium] – Pilgrims walk a symbolic Path of Virtue and attend sermons on moral clarity in Cato’s name."
}



    ----------------------------------------------------------------------------
    -- 6) EVENT LOOKUP
    ----------------------------------------------------------------------------
    local eventKey = month .. "," .. dayInMonth
    local event = events[eventKey] or "No significant events today."

    ----------------------------------------------------------------------------
    -- 7) LOOK UP PROVERB
    ----------------------------------------------------------------------------
    local dailyProverb = zodiacProverbs[zodiac] or "No proverb found."

    ----------------------------------------------------------------------------
    -- 8) RETURN THE RESULT
    ----------------------------------------------------------------------------
    return dayOfYear .. ", " .. month .. " (" .. zodiac .. "), " .. psscYear
           .. " PSSC – " .. event .. " – Proverb: " .. dailyProverb
end

return p