Search

Untrustedlife

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

Tag

godotengine

I Tried to Play Ultima III and Accidentally Printed an Entire RPG Library (Also, Pilgrimage Dev Updates!)

So, I’ve been working on a lot of stuff in Pilgrimage! :3 Yesterday was mostly a mix of adding more creature sounds, cleaning up old code, and continuing my efforts to make the various game systems less dependent on the “King’s Sea III” Mode. Then I decided to play “Ultima III”, which somehow resulted in me spending several hours printing books…(More on that later. :p)

I’ve been adding and changing a bunch of creature sound effects.Giant centipedes now have a different hissing sound, and I’ve added giant scorpions, which have their own hissing and pincer-clicking sounds. They can even make a little *SNIP* noise! I’ve also been giving various other creatures more appropriate sounds. Rats and otters can make little squeaky noises, some creatures make squishing or plopping sounds, and wolves can howl. Also, Fishlords are now properly called Fishlords rather than just gods, since I intend to add other kinds of godlike creatures eventually. Ive been addoing more aggresive land creatures as i plan to start work on a new mode soon and need monsters you can fight :3

This is the main thing I’ve been working on.

I’ve been refactoring the encounter system so that the actual reactions are separate from how those reactions are presented to the player. Previously, a lot of the code assumed that the creature encountering something was the player, and that the “King’s Sea III” mode game manager would always be there to handle everything.

That IS NOT what I want for Pilgrimage. I want creatures living their lives in the world simulation to be able to encounter things and react to them using the same EXACT systems as the player does, not just an approximation. A creature should be able to encounter a strange plant, decide to eat it, potentially get poisoned or suffocated, and have the resulting events become part of its history. All without needing the “King’s Sea III” interface to exist. While this can mostly already happen. It has required two differnet implementations until now. A simulation implementation(which i made use the same underlying functions as the player encounters in the last couple updates) and an in game representation (KIngs Sea stuff). But now im slowly making the in game version (Which are called Encounters) , game manager independent, so it will become the main version used by both the actual game modes and the sim. Eventually I should be able to run the same encounter code in all contexts, and simply PRESENT differnetly based on whether its in a game mode, the life sim etc, . So I’ve been moving more of the presentation-specific stuff, such as animations, logs, and death messages, into the game manager, and making the game manager generic (So there is a BASE game manager, and a Kings Sea III manager).

The encounters themselves can then determine what happened, while the game manager handles showing it to the player when necessary, but all the actual simulation interactions can then run inside the encounter and updating teh encounter would update all palce sits used. I’ve now done this for every single plant/non-creature reaction, including chasing away plants, escaping, eating, ignoring, and pondering etc. (Thoiugh i havent done it for picking up plants yet, that should be done in the next day) So now theorheticlaly i could just hand the life sim the encounter and all possible actions and have it deal with it based on the creature doing it’s perosnality, temperment etc.

I’ve also cleaned up the handling of plant-related deaths and added historical events for creatures that survive eating something incompatible with their diet, which can now show up for both the player and AI creatures and is equally impresive since its the exact same encounter handling it. This is all part of my ongoing (And extremely time consuming and ambitious) effort to make the different game modes share the same underlying sim rather than having entirely separate implementations of everything. Once I’ve implemented this, adding new game modes will mostly be a matter of presenting what happens differently, rather than having to build an entirely new game from scratch, even if it is a tile based mode etc.

It’s a lot of tedius work, but it should make adding the other modes much easier in the future and make the simulation better and better. :3

Other little changes I made yesterday

Creature blocks are now loaded recursively rather than relying on a hardcoded list of subdirectories. That means I (And modders) can organize creature files into additional folders without having to remember to update the loading code every time. I also cleaned up the block schemas, adjusting some creature behavior, and making various other little fixes.

Also, Jeremites are no longer hardcoded as the measuring stick of the world! Instead, I’ve added a new creature block tag called sizeIsCanonicalMeasurement. The bestiary’s Fun Facts system now checks for creatures with this tag and uses them as units of measurement when comparing sizes. Jeremites now have this tag, and Fishlords do aswell! This means you can see how large other creatures are relative to both Jeremites and Fishlords. If no creatures in the world have this tag, the size comparison fun fact simply won’t be generated. I’ve also added a check to prevent silly comparisons. If a creature is so small relative to the chosen unit of measurement that the result would be something like “0 Jeremites” or “0.00 Fishlords,” that particular fun fact won’t be shown.

And now, onto the completely unrelated thing that consumed the rest of my evening…

I decided to play Ultima III.

I’ve been wanting to play some of the old Ultima games, so I installed Ultima III.

Immediately, I ran into a problem…

I couldn’t figure out how to control the main menu. The arrow keys didn’t do anything. Apparently, you just press the letters corresponding to the menu options.

Fair enough, you can do that in pilgrimage too (Though it is more obvious eg [1] [2] etc).

Then I got to character creation and realized that the game expected me to already know what races and classes were available. HOW WAS I SUPPOSED TO KNOW THAT? Well, it turns out you’re supposed to read the manual. So I figured I’d print the manual out and keep it next to me while playing, and play on my laptop downstairs instead of my multi monitor “game dev computer” or work laptop. It would be fun to have an actual manual, like people did back in the 1980s.

One problem.

My HP printer decided that printing was a privilege I needed to fight for. After renewing my HP Instant subscription and discovering that printing directly to the printer worked much better than using the HP app, I finally got everything working. And then I realized that I’d accidentally set the print quality ridiculously high.

600 DPI. Full color.

The manual was taking FOREVER to print.

But the pages looked BEAUTIFUL.

So naturally, I decided that printing just the manual wasn’t enough.

I printed the map.

Then the Cleric Spellbook.

Then the Mage Spellbook.

Then the Hint Book.

And then I found some reference cards, so I printed one of those too.

At one point, I realized it was nearly 3 AM and I was still printing Ultima III documentation.

I ended up leaving the printer running overnight.

The original books were quite small, but I’ve been printing everything on full-size sheets of paper, so all the illustrations and text are wonderfully oversized. Some of the original scans even have visible staple marks and folds printed onto the pages, which makes them look like old physical books despite being completely flat pieces of paper.

I’ve stapled the pages of each book together at the corner and put everything into a folder.

It’s basically an Ultima III dossier now.

I haven’t even properly started playing the game yet.

But heres some pretty pictures…

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

Up ↑