Search

Untrustedlife

Your window into the mind of a questionably sane queer non-binary indie horror game dev

I invented timeline anomalies in my world simulator and now I feel like Sans Undertale

So I’ve been working on Pilgrimage, my probability-first creature survival RPG/world simulator, and I’ve added something incredibly ridiculous.

Here’s how it works.

When you encounter a creature, the game doesn’t necessarily simulate its entire life beforehand. Instead, it generates the creature at the moment you encounter it and retroactively constructs its history and collapses it to one creature.

But there’s a teeny, tiny, catch.

That creature is fated to exist at the exact moment you meet it.

This is a constraint in my probability-collapse system. If you encounter a 60-year-old creature, it must have survived everything that happened during those 60 years. That creature might have already existed and been actively simulated in the world, or it might be collapsing into existence for the first time at the exact moment you encounter it, with its entire past being generated retroactively.

So the game generates decades of training, dangerous plant encounters, near-death experiences, and skill progression.

And if a survival roll determines that the creature should have died?

That timeline is ABROGATED.

The death doesn’t become part of the Canon. The creature survives because its existence at the moment of observation is already established.

But heres the funny part.

THE CREATURE STILL KEEPS THE XP FROM THE FAILED ROLL.

Which means it can gain experience from encounters that would have killed it in an alternate possible history.

And that got me thinking…

Could I find evidence of those rejected timelines by examining creatures’ stats?

So naturally, I started digging through my game’s save files like Sans Undertale investigating timeline anomalies.

AND I FOUND A SUSPECT.

Natural Great Tit.

An interface displaying the skills and experiences of a character named Natural Great Tit in a game, including skills such as Fighting, Foraging, and Learning, with experience points listed for each skill.

An otherwise unremarkable bird with 36 Escape Artist XP, despite having no relevant recorded survival events in its Canon.

Under the mechanics I’m investigating, this suggests the creature experienced a fatal encounter whose outcome was rejected because it was fated to survive. Specifically, in normal gameplay, encounters that grant Escape Artist XP ALL would generate survival events in the CANON when the creature successfully survives. Since this creature has Escape Artist XP without any corresponding survival events at level 0, that means that it failed a fatal survival check, but kept the XP from that rejected outcome anyway.

THAT MEANS THIS BIRD DIED IN A TIMELINE THAT NEVER EXISTED.

AND IT KEPT THE EXPERIENCE.

And so its name is also a dirty lie, its the least natural thing in the simulation! We spotted a jumper!

The especially ridiculous thing is that the “fate” protection only applies to the creature’s reconstructed past.

Once it actually meets the player?

All bets are off.

So a creature can spend sixty years being protected from death by fate itself, accumulating experience from discarded possibilities, only to immediately get eaten by a player-controlled flatworm.

I started out making a world simulator.

Somehow I ended up doing forensic investigations into alternate timelines.

heh, Natural Great Tit.

you’re gonna have a bad time.

A character resembling a skeleton stands in the center of a battle screen, surrounded by various ghostly figures and attack animations, with a red heart symbol indicating the player's health.

Though this mechnaic is not live in the current released version, you can download my game here: https://untrustedlife.com/pilgrimage/

Pilgrimage version 0.3.4 Released

Version 0.3.4

This is a biggen!

  • Creatures now grow as they age.
    • Both visually and in the simulation. Size determines what you can eat based on what the adult version of that species is capable of eating. So now, for example, baby Baleen Water Wogansp occupies a different ecological niche than the adults (They eat coral!).
  • Creature size is now visually represented during encounters. Your own creature gets bigger with age (depending on its block file), and encountered creatures and plants scale relative to your current physical size. and their own size and ages A Jeremite looking at something enormous relative to a jeremite now actually sees something enormous. And something young and small will actually look and behave young and small. This now affects all encounters. Even creatures that dive to fish for you use their age-appropriate size, which in turn changes what they’re capable of eating. And something huge will see everything else as appropriately tiny.
A digital game interface displaying a narrative where the player encounters an ancient lobster. Choices for the player are presented, including options to eat, chase away, escape, or ignore.

When you are a worm, everything looks like a leviathan.

  • Creature ascii art and plant ascii art now support multiple lines Also, A large portion of the creature and plant roster received new or revised ASCII art to take advantage of this, including things such as the Water Wogansp.
  • Removed old tiny flag, repalced with size similar to creature sizes. Existing plants were assigned sizes, and their encounter presentation scales relative to the player just like creatures do.
    • Plant sizes matter in gameplay aswell, hard large plants  are harder to eat for example. It also change sowe ytou escape suffocating plants.
  • Made food encounters more forgiving
  • Land fauna generation is now habitat based instead of diet based (there was  a bug in previous versions where certain creatures would always be settled even if they were supposed to be silentSettlers or powerSettlers. This is fixed.
  • Dangerous generated plants will be appropriately large when their block files imply they should be capable of trapping/killing large creatures.
  • Escaping a ghost now rewards +1 food instead of +2.
  • Jeremites are now a unit of measurement
  • The bestiary now has a fun facts section that tells you each creature’s size relative to a Jeremite. And yes, that comparison will actually change if you mod the Jeremites size.
    • An adult Jeremite is, naturally 1.00 Jeremites.
  • Procedurally generated plants can now also have multiline art.
  • Large ASCII creatures are positioned based on their actual rendered label dimensions instead of a simple font-size assumption.
  • Failing to eat a hard plant now has its own silly animation: the creature repeatedly tries to jab/eat the plant, fails,then sladly slinks back home. 
  •  Ghost encounters received more appropriate fade/attack/death animation instead of reusing animations that visually implied the wrong participant was attacking and other nonsense. 
  •  Creatures dying of old age during encounters now an appropriately honrable death animation (totally honorable, totally) . 
  •  The Character Sheet now displays your creature size versus its adult forms size.
  • A whole ton of balance changes to almost all creatures and plants.
  • Water Wogansps and Honey Wogansps received updated and very elaborate ascii art/lore
  • Existing creature descriptions and lore received various little tweaks.
  • Added more thematic ponder lines, particularly around physical scale and growth.

My original intention for this release was actually filling out land scosystems a bit, and i did get to some of this

  • Hell Turkey, carnivorous mutant turkey, with actual gobbling sfx.
  • Giant Centipede, large terrestrial predator. 
  •  Giant Diving Centipede a water-loving centipede that can dive after fish, with appropriately awful insect SFX. 
  •  Giant Cave Jeramy, an enormous blind translucent cave slime. Importantly, it is a Jeramy, not a Jeremy. Note the A.
  •  Grindylow , a long-armed aquatic shoreline predator with a collection of deeply unpleasant ambient vocalizations. 
  •  Emu, the classic large, aggressive, omnivorous, surprisingly good swimmer that booms, drums, and grunts and is great at killing rogues.
  •  Elephant Emu, a titanic Emu relative,noit so sbtly based on the extinct Elephant Bird, it is a strong swimmer and eater of plants/small animals/tall fruit,and a producer of titanic BOOOOMs. 
  •  Deer, classic large, swift herbivore with Foraging and Escape Artist skills and a meaningful plant-food size range.
  •  Carrion was also added as new edible for water things to make playng as a worm/lobster/whatever moreinteresting
  • Fixed historical creatures being born into the player’s currently selected region instead of the region they were actually supposed to be born in. The region fallback order was backwards in the previous release.
  • Fixed creature-selection tooltips being able to run off-screen. The creature selector now uses a custom wrapping tooltip. 
  •  Fixed confused players learning a creature’s identity through old-age messages. Old-age death/ancient-creature text now respects observer confusion instead of leaking the real species/name. 
  • Fixed queued sound effects surviving into the next game. 
  • Fixed bug where generated creatures from old worlds would “leak” into new ones and be just completely broken (I basiclaly had a missngNo situation)
  • Fixed silent settlers that lived outside of water always existing when they ate meat but not fish, instead of only settling based on the intended chance.
    • Non-Aquatic Creatures that ate both worked properly and non-aquatic creatures that only ate fish also worked properly, it was literally just non-aquatic creatures that only ate meat that were broken (And technically exclusive plant eaters/exclusive rot eaters aswell, but they didnt exist before this release). Anyway it was a weird one.
  • Fixed being able to issue commands while a new encounter was still resolving. In particular, this could cause weird behavior when an encountered creature immediately died of old age because the player could click a command before the death sequence completed.
  • Fixed some encounter labels near the bottom of the screen not responding to mouse hover. The bottom UI containers were intercepting mouse input.

For the next version, I’m planning to spend some time cleaning up the Canon Viewer. As the simulation has gotten more complicated, there’s also a lot more information to dig through, so I want to make it easier to actually find the interesting stuff. That means better searching, sorting, and filtering, along with some general UI cleanup so large creature entries are easier to read. And more little things on creatures an dplants that thye bestiary/canondex can ramble about.  I also want to introduce a temperament system that will have some smaller effects on creature behavior for now, but will matter a lot more later once dungeon delving and the RPG/Tile Based modes exist. A creature’s diet shouldn’t really determine its personality and a small thing should still sometimes attack you. 

There are also a bunch of smaller things and i never want to promise that a release will be about specific things becaus I might be pulled into a wonderful rabbit hole liek i did this time.

One other thing I want to tackle is making encounter logic much less mode-dependent. Right now, encounters are tightly coupled to the “King’s Sea III” mode when they really should be handled by generic resolvers that don’t care what UI or game mode is presenting them (Or whetehr its a game mode at all, hist figs should be abel to basiclaly play the game like the player does, which woud also mak ehistory way more interesting) . If I can separate those systems cleanly, it should make adding the planned “King’s Wilds” Mode much easier, and there’s a real chance it could even make it into this version, though that mode also relies on things like regional pois an dregional connectivity so, we will see.

It could even end up becoming the regional connectivity release, where I suddenly add a bunch more civilization sim, caves, pois, and related systems. So, like I said, I don’t really want to promise anything too specific beyondwhatever gets added next, I want it to be at least as cool as what made it into this version.

And this version was already pretty damn cool, like encounting a water wogansp is literally like encountering a fanatastical sea leviathan. Which is just fucking aweosme

Just Pilgrimage nonsense…

We measured god, he’s apparently 2962.96 Jeremites.

Text graphic presenting fun facts about the size of an adult Fishlord, stating it is approximately the size of 2962.96 Jeremies.

:3

Probabilistic SImulations Are The Future

Probability-first simulation might be the future of simulation games

I recently saw a video where someone simulated an entire Minecraft world primarily through probability. Instead of literally running every creature’s movement and every tiny action in the background, the simulation determines what is likely to have happened based on the state of the world at any given timestep.

I realized that I already do the same thing in Pilgrimage.

(Which you can download here btw https://untrustedlife.com/pilgrimage/)

I’ve started thinking of this as a “probability-first simulation” or a “probabalistic simulation”: rather than coding every possible action as something that must physically occur step by step, you define the conditions and probability of an event, then allow individual stories to emerge from those rules. Each timestep runs the relevant probability checks to determine what happens within the world’s constraints. To simulate a golem moving, for example, I only need to know its current location, where it can move, and the probability of it leaving the rectangle representing its current location, just like in the video i linked above, that is essentially the basis of this concept, you know the constraints, the probabilities, and the chance of something happening each year. From that, you can determine whether it happened today, within the last hour, or at any point over any timestamp.

For example, imagine starvation has a 3% chance of affecting a historical figure each year. The game can convert that annual probability into the appropriate chance for however much time the current simulation step represents. It can then evaluate that chance for every important figure, regardless of whether the simulation is currently advancing by a day, a month, or several years.

The probability can be modified by the figure’s attributes, skills, environment, species, age, and current circumstances. If the starvation actually occurs, the figure can make defensive skill rolls to survive it. One creature might forage successfully, another might endure through sheer tenacity, and another might die.

Now apply that approach to combat, disease, reproduction, migration, political upheaval, territorial disputes, the construction of monuments, or somebody becoming a legendary historical figure. (Or MINECRAFT)

You can create incredibly atomized simulations where thousands of individuals have their own lives and histories without continuously simulating every footstep they take. You’re simulating the meaningful outcomes rather than every action leading to those outcomes. This is incredibly powerful.

Probabilisitic simulation itself obviously isn’t new. Simulations have used random rolls forever. What feels newer, or at least strangely underexplored, is treating probability as the actual foundation of a detailed world simulation rather than merely using it to add randomness to existing systems.

It also works beautifully with deferred generation in my experience. The game can leave something unresolved until it becomes relevant, then choose from the remaining possibilities based on everything the simulation has already established (As constraints). Once observed, that answer can become a permanent part of the world’s history.

The result is a world that can feel as though it has been running in absurd detail the entire time, even though much of that detail only needed to become concrete when it actually mattered and most of it was similified to nealry pure probability. Which is why its so fucking brilliant.

I really do think this is one of the keys to making more advanced simulation games. The answer to deep simulation is atcually to build systems that understand what could happen, how likely each possibility is, and deal with it when the simulation actually needs to choose an answer.

You don’t need to simulate everything. You need to simulate the possibility of everything, which is much, much less hard on a persons CPU. :3

Since that video now exists, im seriously considering making my own vidoe going through my own systems for a world simulation! Stay tuned! I just need to learn how to be good at editing videos.

Also they may have used AI to help make that sim btw….

I wasn’t going to mention that but the end screneshot of their screen made me sus as hell.

Up ↑