Releases: morganparadis/llamafone
Release list
v3.6 — Messages move relationships, world context, sim bios, service NPCs, OpenRouter
New
- Messages move relationships. Warm, flirty, hostile, or emotionally charged messages now nudge Sims 4's actual friendship and romance tracks — bidirectional, hard-capped, tunable. Toggle and cap under Llamafone → Settings.
- Save notes. One free-form text field per save, appended as
WORLD CONTEXTto every AI prompt. Use for challenge rulesets, custom lore, historical settings, or house rules the AI should treat as universally binding. - Sim bios. Per-sim character notes — backstory, motivations, secrets, quirks — injected into that sim's descriptor block anywhere they appear. Distinct from the Llamadate bio (dating-facing) and per-relationship contact note (scoped to one pair).
- Service NPCs stay in role. Hired butlers, maids, babysitters, nannies, gardeners, and repair techs write in their proper register. Layered detection reads live service records, active zone situations, household attributes, and career tracks so it works across pack combinations. When a hired service NPC is on shift, the prompt says "currently on shift as the household's butler" instead of the generic "at work right now" — no more contradictions when you call your live-in butler.
- Llamadate origin persists across sessions. When two sims connect via Llamadate, that fact is stored on both sides and referenced in every future prompt between them. Reconnect with a match three in-game weeks later and the AI still knows how you met. Includes mutual-friend intros (records the mutual's name too).
- Time-of-day awareness. Every prompt now carries
[CURRENT IN-GAME TIME: 7:15 PM (evening)]. No more "dinner by six" replies when it's already 7 PM. - OpenRouter provider support. Fifth provider option in
llamafone.cfg: one API key, dozens of models (Claude, GPT, Llama, Mistral, DeepSeek, etc.) viavendor/modelnaming. - Update-mod button in the startup notification. When a newer release is on GitHub, the startup popup offers "Update now / Later." Update now opens the CurseForge project page in your default browser.
Bug fixes and polish
- Llamadate matches now know your name. Fixed the bio-only privacy phrasing that occasionally made AI matches ask what your sim's name was mid-conversation.
- Llamadate initial friendship boost tuned down. Reduced from +15 to +5 on both sides at match, so subsequent messages grow the relationship naturally under the new per-message impact.
- Llamadate outreach no longer fakes IRL sightings. Cold-outreach messages used to open with "I swear I saw you at the coffee shop last week" for total strangers. Fixed — the sender stays in-character as someone who found an interesting profile online.
- Long-distance calls and texts now engage with your in-person visit proposals. The "different worlds" rule used to make sims push back three messages in a row when you proposed "come see me this weekend." Now the AI says yes, negotiates timing, or expresses excitement instead of stonewalling.
Config additions
Two new knobs in llamafone.cfg (also editable in-game under Llamafone → Settings):
message_relationship_impact_enabled = true
message_relationship_max_delta = 53.5 - Standalone app and Llamadate feature
Two headline features and a stack of bundled fixes. Drop-in over v3.4.2.
New
🦙 Standalone app on the phone. Llamafone has its own home-screen tile now, with Call, Send Text, Llamadate, and Settings all inside it. No more digging through the Social menu.
💌 Llamadate. An opt-in dating layer, per played sim.
- Every played sim gets their own opt-in toggle, gender filter, age filter, and personal bio
- Set a bio and matches see only that — not your career, engagement, aspirations, or traits. Skip it and they see the usual context.
- Browse Hinge-style profiles (LLM-generated bio + three prompt-and-answer pairs) written in each sim's own voice
- Write your own intro text — the mod never writes outbound messages
- Reply-gated relationships: only interested replies add the sim to your contacts. Rejections leave them a stranger.
- Committed sims are off-limits — married/engaged sims never appear in the pool
- Mutual-friend intros only fire when a real friendship exists between you, the sender, and the mutual (not just a bare tracker entry)
- A sim who has cold-outreached you is excluded from your future pool permanently
- Stranger-contact privacy: cold outreach and outbound intros suppress past life events, calendar events, in-person interactions, and conversation history so strangers can't reference things they wouldn't plausibly know
Bug fixes
- Breakup context finally lands in prompts. Broken engagements, bad-romance bits, cheating history, and sentiments like "Bitter Over Phone Breakup" now surface in the AI prompt with direction preserved ("you feel bitter toward them," "they cheated with you"). Previously an ex showed as "close friends" and the AI had no idea you'd broken up — you'd get a warm "great to hear from you!" reply from a sim you dumped an hour ago. Affects every text and call in the mod.
- Save-id resilience. Sims 4's persistence service occasionally reports a sentinel slot id during transient CAS/menu/interaction hooks. Prior behavior: mod created a bogus
Slot_ffffffff/folder OR silently dropped writes. Now it rejects sentinels AND falls back to the last-known-good save id while a zone is loaded — restoring journal, past-events, interactions, and dating writes during those windows. - Career switch detection. Your sim changing careers now flows into the milestone scan + prompts + journal correctly.
- Wedding scan TypeError for My Wedding Stories couples with non-standard role naming (
Host_Couple). - Journal preview cap raised (700 chars, was 220) so recent conversation context isn't truncated when the AI needs to reference it.
- Journal silent-save-failure now logs. If a per-save write drops for any reason, the log file records it so you can diagnose instead of silently losing entries.
Upgrade
Drop-in over v3.4.2. Copy the new Llamafone.ts4script and Llamafone.package into your Mods folder. Existing saves and preferences carry through unchanged; Llamadate is opt-in per sim and off by default. Don't forget to download llamafone.cfg too if it's your first save.
Installation instructions: https://morganparadis.github.io/llamafone/#install
3.4.2 - Bug fix and polish release
What's better
- Gemini users: replies come back complete. If you were on Gemini 2.5 (flash or pro) and seeing empty texts or replies that cut off mid-sentence, that's fixed. Full-length replies again.
- Sims know which wedding event they're going to. Every wedding sub-event — engagement dinner, rehearsal dinner, ceremony, reception, bachelor/bachelorette party — used to show up to the AI as the same generic "wedding event." Now they get the specific one, so a text about tomorrow's rehearsal dinner sounds like a rehearsal dinner, not a wedding. The same detection may help other packs' scheduled events (funerals, planned parties, dine-out reservations) if they follow the same tuning convention, though only weddings are directly confirmed on this release.
- Sims know when they (or you) are at work or in class. If a sim is currently on the clock or at school when the prompt is built, the AI sees it and reacts in-character — "hey, in class, catch you at lunch" or "sorry, just got to work, later?" — instead of writing a paragraph as if they're free. Covers regular work careers, active careers, part-time gigs, and schools (grade school, high school, university).
- Cleaner event and holiday names in prompts. Vanilla holidays used to read as "Premade Holidays Harvestfest"; modded holidays showed up with their author's mod prefix attached. Both cleaned up — the AI now sees "Harvestfest" and the modded holiday's actual name. Past events are similarly cleaner (no more "Custom Goals Pre Post Wedding Parties Engagement Dinner"), and when the same event was recorded through two internal paths, duplicate lines are merged.
- "How long ago" phrasing is correct now. Every "N sim days/hours ago" phrase in prompts was off by 40× because the mod's internal ticks-per-minute constant was wrong. An event from 3 sim days ago read as "86 minutes ago" and got labeled "today." Verified against live game math this time; a runtime self-check now watches for drift so this can't silently break again.
- Honored-role phrasing matches the event. "In memory of" is now reserved for funerals; weddings, birthdays, and other honored-sim events use appropriate phrasing ("for", "honoring", "X's").
Bug fixes
- Outgoing texts and calls could silently fail if a surfaced past event had honored sims (weddings, funerals, birthdays after the wedding sub-event fix). The picker would open and dispatch, then nothing happened. Fixed.
- "FAILED TO LOAD" false alarm is gone. The mod was actually loading fine — a harmless startup call was misreporting itself as a fatal error.
- Family Reunion (and similar) showed up as "today" forever. The situation-snapshot path was rewriting event start times to "now" every time it noticed the situation, so a reunion from days ago kept looking like it just happened. Now: first-write-wins on event start times, and the snapshot tries to read a real creation timestamp before falling back.
- Log file grows quietly. A homeworld-resolution diagnostic was repeating on every AI prompt for certain sims — now once per sim per session.
Notes
Existing entries in PastEvents.json recorded before v3.4.2 keep their stored data, but the corrected tick math now interprets them properly — so past-event labels ("N sim days ago") should read correctly on your very next prompt build. You don't need to do anything.
The one thing that won't backfill automatically: missing bride/groom info on wedding events recorded before this update. That's stored per-event and only populates when the event is recorded, so the couple detection will start showing up on your next wedding sub-event (ceremony, reception, next engagement, etc.) but old records stay as-is. Deleting PastEvents.json wipes all past-event memory and doesn't help retroactively — leave it alone.
v3.4.1 — Hotfix: sim-time math, household detection, prompt corrections
A hardening pass and some copy cleanup on top of v3.4.0. Drop-in over v3.4.0 — no config or save-file changes needed.
Bug fixes
Time-delta calculations were wildly wrong (600×). The mod's ticks-per-minute constant was 100 in every module that reasoned about in-game time — but Sims 4's date_and_time.py actually uses REAL_MILLISECONDS_PER_SIM_SECOND = 1000 (so 60,000 ticks per sim minute, not 100). Every "N in-game days/hours ago" phrase across contact prefs, journal, past events, and interactions was off by 600×. An in-person contact from 1 sim hour ago rendered as "25 in-game days ago". Fixed the constant across all 5 per-save modules; existing stored ticks values are unchanged (they were correct raw game time) — only the interpretation was wrong.
Household members were rendering as "we saw each other X hours ago". Siblings and other sims living in the same household see each other constantly regardless of when Sims 4 last fired a Greeted bit. Rendering "you two saw each other 6 in-game hours ago" for cohabiting sims read as absurd. Fixed by short-circuiting the in-person tag when both sims share a household id — new tag says "you two live in the same household. You see each other constantly at home."
"Your mom" phrasing when the mom is shared. The mutual-reference rule said to use family roles from the RECIPIENT's perspective ("your dad", "your mom"), which was wrong when the mutual is family of both the sender AND the recipient (Luca calling Francesca about their shared mom Vivian). Added a SHARED-FAMILY EXCEPTION to the rule: when the mutual's family role is the same from both sides (both call her Mother, both call him Brother), use "our mom / our dad / our sister" or just "mom / dad". Never "your mom" when the mom is your mom too.
Group text replies going to the wrong player-turn. When a group thread had multiple player-turns (e.g. an invite from morning + a thank-you from afternoon), the AI could respond to the older topic instead of the fresh one — so Vivian/Luca/Martha replied about "tomorrow at 5" when the player had moved on to thanking them for last night's party. Fixed by finding the most-recent player-turn in the thread and pinning it explicitly in each participant's reply prompt with a hard rule: "respond to THIS specific message, not any earlier topic in the thread even if it looks unresolved."
AI breaking frame with meta-commentary. When a contact was in "asked for space" (paused) state but had recent affectionate journal history, the AI would notice the contradiction and reply with something like "I need to pause here because the context contains a critical contradiction I can't resolve in-character..." — asking the PLAYER clarifying questions instead of writing the sim's actual message. Fixed by (a) rewording the boundary-state prompt block to remove menu-of-options language that invited deliberation, and (b) adding an explicit hard rule to the call/text/reply system prompts: never break frame, never explain, never ask the player questions, pick one interpretation silently and write ONE in-character message.
Migration save-back could nuke a good ContactPreferences.json. The write-back condition in contact_prefs._load intended to persist on-first-migration, but its guard ("_legacy_sims" in data or "pairs" in data) was always true because "pairs" got injected right before the check. Combined with a transient parse failure (partial write, encoding hiccup, antivirus file-lock), the recovery path could write an empty {"pairs":{}} back to disk, wiping real data. Fixed: only save-back when an actual "sims" → "_legacy_sims" migration happens, and refuse to write on parse failure at all — cache empty for the session, disk file left alone for recovery.
Verbiage cleanup
Dialog subtext promised behavior the mod doesn't do. The recipient picker and message-input dialogs said things like "Llamafone will craft the message once you tell it what to say" — misleading, because outgoing texts and calls send the player's typed message as-is; only the sim's reply is AI-crafted. Stripped the subtext from the sim picker, multi-select group picker, message-input, group-message-input, and reply-input dialogs.
Diagnostics
Success logging added to contact_prefs._load. Future weirdness leaves a trail: after each successful load, the log records the pair/legacy counts and filename.
Docs
README refreshed to reflect v3.4.0 features (group texts, per-relationship contact preferences, sim-world time, expanded context awareness) and the new llama.contact / llama.testconnection commands.
Upgrade: drop Llamafone.ts4script + Llamafone.package into your Mods folder as usual. Your existing llamafone.cfg, save data, and contact preferences are untouched.
v3.4.0 — Group texts, per-relationship contact preferences, and better error messages
Two big features and a lot of polish.
🎉 New features
Group texts
Send Text now uses a multi-select picker — pick 1 for a normal 1:1 text, 2–4 for a group thread. Each recipient replies in their own voice with staggered delays, and every reply sees what the others just said (so responses stay distinct instead of a chorus of "same"). The thread persists per save. A one-time briefing call (using the default model) synthesizes each participant's voice and cross-relationships, cached for every subsequent reply so per-turn cost stays sane.
- Dialog titles and reply prompts list the full roster: "Group text with Sarah, Bob, Alice, and Kate"
- Reply button fans out to the whole group — every active participant may respond
- Configurable size (default 4, hard-cap 8) and optional gentle "someone got busy" drop-off in later rounds
- Group thread history flows into 1:1 prompts between shared participants as a
SHARED GROUP TEXTexcerpt block - Restarting a group with the same people resumes the existing thread (with cached briefing intact) instead of spawning a duplicate
Per-relationship contact preferences
Mute, "asked for space" (paused), or favorite (priority), plus a freeform note field — all scoped to a specific (household sim, contact sim) pair. Alice muting her ex doesn't affect Bob's phone activity with the same sim.
- Accessible from Phone → Social → Llamafone Settings → Manage contacts (no cheat console needed) or via
llama.contact First Last muted|paused|priority|clear|note <text> - The paused state is the interesting one: instead of blocking the contact, it drops their auto-event rate to 20% and injects a boundary note into every AI prompt for that pair. A love-heavy ex ignores it and keeps calling; a decent friend apologizes; a mean one guilt-trips. The drama plays out based on who they are.
- The mod auto-detects distance signals ("leave me alone", "we're done", "need space", "back off") in both incoming and outgoing messages and applies the matching state automatically
🧠 Sim-world time everywhere
Contact preferences, in-person interactions, and journal entries all now use in-game ticks (from services.time_service().sim_now) alongside real timestamps. Shelving the game for real weeks no longer rots the state — the AI sees "you asked for space 3 in-game days ago", not "3 real weeks ago".
🛠️ Better error messages for Ollama users
The most common non-technical user issue was a raw Network error: curl exited with code 7 when Ollama wasn't running. Replaced with step-by-step guidance:
Can't reach Ollama at http://localhost:11434. Is Ollama running? On Windows, look for the llama icon in your system tray. If it's not there, open Ollama from the Start menu and wait ~10 seconds…
Plus a new llama.testconnection command that walks through the whole setup: confirms Ollama is reachable, lists installed models, verifies your configured models are downloaded (with exact ollama pull commands if not), then runs a tiny end-to-end generation to prove the pipeline works.
🐛 Notable bug fixes
- Reply crossover fixed.
_conversationsis now keyed by(anchor, contact)tuple. A second contact texting the same household member no longer clobbers the first thread — replying to Daniel stays with Daniel even if Adelheid texted after. - Group text picker fix. Initial group text implementation had a picker that wouldn't accept multi-select. Fixed by matching MCCC's
min_selectable = 0pattern. - Past interactions / Conversation-so-far duplication. Reply-chain prompts no longer show the current conversation's turns in both blocks.
- In-person interaction "3 hours ago" when they're literally standing next to each other. New same-lot-right-now detection swaps the wording. Timestamps refresh while sims are co-present on a lot, so post-parting recency is accurate.
- Today's holiday now surfaces. Holidays that started earlier today (e.g. Talk Like A Pirate Day) are surfaced as
HAPPENING TODAYinstead of being filtered as "past." - UI title wrapping. Contact prefs dialogs no longer collide with the close button on non-ultrawide displays.
- Timer + runtime state cleanup on save switch. Group text mid-round state clears alongside the reply-delay Timer cancellation when you load a different save.
- In-game interactions detected properly. Expanded the relationship-bit filter to include modern Sims 4 patch signals (Sentiment Bit, Short Term Bits) so ongoing social exchanges are captured, not just the initial
Greeted.
📦 What ships
Drop the three files into your Mods folder as before:
Llamafone.ts4scriptLlamafone.packagellamafone.cfg(only if you're a new install — existing users keep their existing config)
Existing saves auto-migrate any pre-refactor contact preference entries to the new per-pair schema on first load. Group texts JSON file is created on demand. No manual steps needed.
Full changelog: morganparadis.github.io/llamafone/#changelog
v3.3.1 — Reply chain + phone anchor hotfix
Two user-reported bugs fixed. Drop-in over v3.3.0.
What's fixed
-
Reply button now works past the first exchange. A one-character typo in v3.2.0's
generate_replywas raising aNameErroron every Reply-button reply — but the exception was being swallowed silently by an over-defensiveexcept: pass, so the mod appeared frozen after the first response instead of showing an error. First reply worked (different code path); every subsequent one just did nothing. Fixed the typo. Also replaced the silent exception handler with real error logging so the next silent-failure bug can't hide for weeks. -
Incoming calls/texts now ring the right sim's phone. Two of the five phone-dialog call paths (
send_textandsend_call) weren't passing the recipient's sim info at all — so the dialog fell through defensive fallbacks and ultimately anchored to whoever the player had selected. If a toddler was selected when this fired, the toddler's non-clickable phone appeared to ring and the message became inaccessible. Fixed both paths to pass the recipient explicitly, and removed the "fall back to whoever's selected" behavior entirely — every call path now has a deterministic recipient (from the household, the stored conversation, or the currently-played sim), so no fallback is needed. -
Timer-thread exceptions now log. The "sim is thinking" reply-delay runs on a background thread whose exceptions Python swallows silently — meaning a bug in the reply generator would make the response just never appear. Wrapped the delay callback in try/except with logging so future Timer-side bugs surface instead of vanishing.
Compatibility
Same per-save data layout as v3.3.0. Drop it in, restart Sims 4.
Download
Llamafone.ts4script + Llamafone.package below. Restart Sims 4 after copying.
NOTE: If this is your first download, make sure to download the llamafone.cfg file also.
Make sure to follow the installation instructions here: https://morganparadis.github.io/llamafone/#install
Full changelog: https://morganparadis.github.io/llamafone/#changelog
v3.3.0 — Sims remember the parties
Past-event memory is finally working end-to-end. Also fixes built-in Sims 4 holidays like Love Day silently getting dropped from prompts.
What's new
-
Sims remember the party you both attended. Throw a house party, dinner, wedding, funeral — end it, then text a guest the next sim day. The AI now sees a
Recent events you both attended:block in the prompt with the event and how long ago, so they'll open with "great party last night" or "thanks for coming to grandpa's wake" instead of generic small talk. Data lands inPastEvents.jsonin your save folder as each event ends. -
Love Day and other built-in holidays now show in upcoming events. Vanilla Sims 4 holidays (Love Day, Winterfest, Harvestfest, New Year's, etc.) were getting silently dropped because their holiday lookup returned empty for the built-in class hashes. Added class-level fallbacks — they now surface with their real names like "Love Day" instead of vanishing.
-
Prettier event names in prompts.
Situation_HousePartynow reads as "House Party" in the recent-events block. Class prefixes stripped, CamelCase split.
Compatibility
Same per-save data layout as v3.2.0. Drop it in. PastEvents.json appears in your save folder as events end.
Download
Llamafone.ts4script + Llamafone.package + llamafone.cfg below. Restart Sims 4 after copying.
Full changelog: https://morganparadis.github.io/llamafone/#changelog
v3.1.4 — Hotfix: per-save folder naming
Fixes a folder-naming bug in v3.1.2 / v3.1.3. Drop-in upgrade — no manual migration needed; your history auto-moves to the corrected folder on first load.
The bug
Sims 4 names save files using the slot id formatted as lowercase hex (e.g. Slot_00001115.save corresponds to slot id 4373 decimal — because 0x1115 == 4373). v3.1.2/v3.1.3 formatted the per-save folder name as decimal instead (Slot_00004373), so the folder didn't match the .save filename. Worse, across different play states the same save could resolve to different decimal values, leaving orphan folders behind.
The fix
- Folder names now use
Slot_<8-digit-lowercase-hex>— byte-for-byte match to theSlot_NNNNNNNN.savefilename. Same scheme WickedWhims uses for itscomplex_save_data/folder. - One-time auto-migration on first load: if a legacy decimal-formatted folder exists for your current save, the mod renames it to the correct hex name. Your journal and milestones carry over with the rename.
- The
__<save name>suffix v3.1.3 added is gone — save names are player-mutable (Save As), so they'd orphan the data folder if a player renamed.
Compatibility
- Same data layout as v3.1.2/3 inside the folder.
- v3.1.3 → v3.1.4: drop in, restart Sims 4, first load triggers the rename automatically.
- v3.1.0/3.1.1 (data still in Mods folder): no auto-migration to per-save folders — see v3.1.2 release notes for manual steps if you want to move legacy history into the new per-save structure.
Heads up about the v3.2 feature work
The interaction-awareness + past-event-memory work I'd been building is parked on a feature branch. v3.1.4 is just the hotfix; v3.2.0 with the new features comes after testing.
v3.1.3 — Stability pass
No new features, no migration steps. Same data layout as v3.1.2 — drop it in. This release is hardening from a code audit after v3.1.2 shipped: thread safety, atomic file writes, edge-case fixes. If your v3.1.2 saves are running fine you won't notice anything different; if you've ever seen a phantom event or a duplicated message log entry, those bugs are gone.
What changed
-
Journal + milestones writes are now thread-safe. The mod runs several things on background threads (auto-events, milestone scans, reply-delay timers, the AI request thread) that all read and write the same files. Added locks so concurrent writers can't race and lose entries.
-
Milestones writes are now atomic. Snapshots, the milestone log, and per-contact reference tracking now use the same write-to-
.tmp-then-rename pattern the journal already had. A crash mid-write can no longer corrupt these files. (The journal already had this safety; now everything does.) -
Phantom divorces stopped for good. v3.1.2's fix for the lazy-load relationship bug only worked when both compared snapshots had the new "spouse was actually readable" flag. Snapshots that survived from v3.1.1 didn't have the flag, so the safety check defaulted to "yes diff" — and could still fire a phantom divorce/remarriage pair on the first scan after upgrade. The default is now "no diff" until a clean snapshot exists. Cost: one missed real divorce in the worst case (on the first scan after upgrade); benefit: zero phantoms ever.
-
Reply-delay timers cancelled when you switch saves. If a sim was about to text you back in ~30 seconds and you quit to the main menu, the reply used to fire in the new save's context — wrong contact, wrong conversation, sometimes a crash. Pending timers are now cancelled when a new save loads.
-
Backfill won't misattribute ambiguous names. The opportunistic journal backfill (which stamps a sim_id onto legacy name-only entries when it learns the mapping) now refuses to backfill if two sims share a name. The legacy entries stay name-only rather than getting permanently bound to the wrong sim.
Compatibility
- Same per-save folder structure as v3.1.2 (
Documents/Electronic Arts/The Sims 4/saves/Llamafone/Slot_NNNNNNNN__<save name>/). - Same file names:
Journal.json,Milestones.json,SimSnapshots.json,MilestoneRefs.json. - Same
llamafone.cfgandLlamafone_Settings.jsonin your Mods folder. - No migration needed going from v3.1.2 to v3.1.3.
- If you're upgrading from v3.1.1 (or older), the migration steps from the v3.1.2 release notes still apply.
Download
Grab Llamafone.ts4script and Llamafone.package below. Drop both into your Mods folder. Your existing llamafone.cfg is untouched.
Full changelog: https://morganparadis.github.io/llamafone/#changelog
v3.1.2 — Per-save history, smarter replies
⚠️ Data location changed — read this before updating
Per-save data (journal, milestones, sim snapshots, milestone references) now lives in:
Documents/Electronic Arts/The Sims 4/saves/Llamafone/Slot_NNNNNNNN__<your save name>/
…instead of one shared file in your Mods folder. The new folder is created automatically the moment Sims 4's loading screen finishes for that save.
If you want to preserve your existing v3.1.1 history (recommended for active saves):
- Update the mod and launch Sims 4. Load a save and let the loading screen finish — that creates the new
Slot_NNNNNNNN__<save name>/folder. - Quit. Open
Documents/Electronic Arts/The Sims 4/saves/Llamafone/. - Copy your old files from
Mods/into that folder, dropping theLlamafone_prefix:Llamafone_Journal.json→Journal.jsonLlamafone_Milestones.json→Milestones.jsonLlamafone_SimSnapshots.json→SimSnapshots.jsonLlamafone_MilestoneRefs.json→MilestoneRefs.json
- Repeat for each save you want history preserved on.
If you skip migration: each save just starts fresh. Nothing breaks. llamafone.cfg and Llamafone_Settings.json stay in the Mods folder — those are global, not per-save.
What's new
- Per-save data folders. Multiple saves no longer share one history. Talk to Bella Goth in your legacy save, switch to your dynasty save, and a parallel Bella there starts with a clean slate. Folder appears the instant the loading screen finishes (verified hook on
Zone.on_loading_screen_animation_finished, no polling). - Journal lookups by sim_id, not name. Two sims named "Bella Goth" (Maxis premade in one world, player-created in another) no longer cross-contaminate. Legacy entries get their sim_id stamped in opportunistically as you use the mod — no migration script, the journal self-heals.
- Reply prompts brought up to parity with call/text prompts. When an AI sim replies to your message, they now get the same rules: full friendship-tier table, geography rule, Sims 4 time block, banned-filler frames, calendar event handling, aspiration name-drop ban, mutual plausibility check. Plus
[GEOGRAPHY],[SEASON],[WEATHER],[CURRENT LOCATION]tags on the user prompt. Several rules silently weren't applying on the reply path before. - Outgoing calls/texts know who's calling. When you call or text someone, the prompt now includes the player's full recipient block — mood, career, aspiration, top-3 skills. Previously only the contact was described, so the AI had no idea who they were talking to. (Bonus: outgoing-call path was using the incoming-call system prompt by mistake, which told the AI to initiate the call instead of answer it. Fixed.)
- Elder sims actually text like elders. Old age rule was a soft "Elder: formal, warm" that the AI overrode when traits like Geek + Bookworm + Programming made a sim read as a "tech nerd millennial". Hardened: elders ALWAYS use proper capitalization and complete sentences, regardless of traits. Traits are interests, not voice.
- "Been ages since we caught up" frame killed. The banned-filler list previously matched literal phrases but slipped past reworded versions ("been ages since we [verb]"). Now bans the whole frame — any opening about how long it's been since contact, including with an empty journal. (An empty journal just means recent contact wasn't logged, not that this is your first contact in months.)
- Clubs and interests don't transfer between mutuals. The AI was reading one sim's club listing ("Board") and writing "you and Bob doing that board-game stuff" to a sim who wasn't in the club. New rule explicitly states each sim's clubs/career/skills are listed individually — assume nothing transfers.
- Phantom divorce/remarriage milestones fixed. For sims outside the active household, Sims 4 loads the relationship tracker lazily — a startup scan could see zero targets and conclude "not married," then a later scan would see the real spouse and fire a "got married" event, producing phantom divorce + remarriage pairs. The detector now tracks whether each read was reliable and skips the comparison when it wasn't.
Roadmap
Past-event memory (calendar events persisting after the game forgets them) added to the public roadmap on the site.
Safety
Atomic journal writes + corrupt-file preservation from v3.1.1 are fully intact through this refactor — tmp-file → fsync → atomic rename, corrupt or wrong-type files renamed to .bak instead of overwritten.
Download: grab Llamafone.ts4script and Llamafone.package below. Drop both into your Mods folder. If you're updating, your existing llamafone.cfg is untouched.
Migration: see the section at the top.
Full changelog: https://morganparadis.github.io/llamafone/#changelog