The core loop of this game/experiment of mine consists of the encounter system. As the team of explorers (consisting of four members for balancing reasons, like in Arkham Horror LCG) ventures through strange new worlds, they will face encounters (psychological tests, team struggles) in the following circumstances: either the player ends the turn deliberately, or he/she moves the team to a different tile. That will trigger the code to shuffle the potentially very, very large list of encounters loaded from a TOML file, and then a complex function will determine which will be the encounter that the team of explorers will face based on numerous conditions.
The following is an example encounter from the TOML file, that gets loaded to the game on start.
encounters.toml
[[encounters]]
identifier = 1
title = “A New World”
image_path = “/resources/encounters/1.png”
description = “We have made it. Nobody believed we would manage to create a portal to a multiverse, but here we are, in this strange new world. I take a deep breath as I gaze at the field of grass.”
duration_in_turns = 1
encounter_condition = 1
psychological_test_identifier = 1
[[encounter_conditions]]
identifier = 1
requirements_biome_identifiers = [1]
requirements_feature_identifiers = [
{ AnyRequired = [] },
{ AllRequired = [] },
{ AnyExcluded = [] },
]
requirements_encounter_identifiers = [
{ AnyPreviousEncounter = [] },
{ AllPreviousEncounters = [] },
{ AnyExcludedEncounter = [] },
]
requirements_trait_identifiers = [
{ AnyRequired = [] },
{ AllRequired = [] },
{ AnyExcluded = [] },
]
team_size_requirements = [
{ MinimumTeamSize = 1 },
{ MaximumTeamSize = 6 },
]
team_overall_mental_health_requirements = [
{ MinimumTeamOverallMentalHealth = 0.0 },
{ MaximumTeamOverallMentalHealth = 100.0 },
]
team_overall_health_requirements = [
{ MinimumTeamOverallHealth = 0.0 },
{ MaximumTeamOverallHealth = 100.0 },
]
time_spent_in_alternate_earth_requirements = [
{ MinimumTimeSpentInAlternateEarth = 0 },
{ MaximumTimeSpentInAlternateEarth = 10 },
]
Each encounter is, so far, associated with a psychological test, but soon enough they will be associated with a team struggle as well. The most important part of an encounter is the conditions for it to trigger, which can be the following:
- The current biome is any of the required (obligatory: all encounters should be attached to at least one biome).
- The features associated with this exploration zone (ex. NativeInhabitants, Irradiated) are compatible with the any/all/excluded specifications.
- The list of previous encounters is compatible with the any/all/excluded specifications. This should allow for story-like threads of narrative that depend on previous “chapters” having been passed.
- The combined list of character traits (from all team members) is compatible with the any/all/required specifications.
- The team size should be between the set values, if any.
- The team’s overall mental health should be between the set values, if any.
- The team’s overall health should be between the set values, if any.
- The time spent wandering in the current exploration zone should be between the set values, if any.
This allows, for example, for encounters with mythical beasts that only inhabit certain biomes, maybe during some lunar condition (which would be a feature), and only when the team of explorers has trackers (which would be a character trait). Also, when the team’s mental health is deteriorating and their overall health is becoming dangerous, encounters about the team stopping to rest and heal could pop up.
When an encounter triggers, the user is presented with the following window:

I’m not an interface man. I need to figure out which background color would be preferable to plain black, but white and such other clear options seem too grating to me. Anyway, the photo on the upper left is the one associated with the encounter. The row of photo IDs under that is the team of explorers, starting with the player. Regarding text, there’s the title, a short description (thankfully you can program text wrapping). A blue text that you can barely distinguish from here announces that there’s a psychological test associated with the encounter, and that it tests the following psychological dimensions: cognitive abilities and interpersonal skills. Then the values of those psychological dimensions are displayed for each team member.
In the lower right you get a reminder of what biome you are currently in (in this case, a temperate grassland). The fancy button to its left is the one to trigger the psychological test. I have already written the code to gather all the results, which will appear under the description of the encounter.
Thank you Midjourney for the effortless AI images. Regarding GPT-4, I make a point of bothering it by presenting my code and asking “this represents an Outcome given [game concept]. Can you offer any suggestions and improvements?” The AI is eager to point out what I’ve done wrong, with no regard to my feelings. As such, it has proven to be an invaluable tool while programming. Also, when I suspect there’s more to squeeze out of a concept (such as psychological tests, team struggles, outcomes, etc.), I ask GPT-4 if it can come up with more features for that concept, and more often than not, it provides very valuable insight.
Anyway, I have been feeling guilty because I’m mainly a writer and I have neglected my novel for a week. I think that for the foreseeable future I will write one day, program the next. Programming is very addictive for the obsessive mind I was born with, as long as you don’t end up in some ditch of which you don’t know how to climb out.
Pingback: Interdimensional Prophets (Game Dev) #2 – The Domains of the Emperor Owl
Pingback: Interdimensional Prophets (Game Dev) #4 – The Domains of the Emperor Owl