Skip to content

Relationship Events

Relationship events are events that occur each timeskip that are focused entirely on influencing the relationships between certain cats.

These should be fairly short, like all timeskip events. Less than 300 characters, with shorter being better, is preferred.

Usable Cat References

abbreviation use
m_c The main cat of the event. Their relationship towards other cats will be affected the most by the event.
r_c The second cat within a two-cat event. m_c's relationship towards r_c will be changing in the event.
r_c{#} If multiple cats other than m_c will be present, use this tag instead of r_c to denote them. For example "m_c avoids joining r_c1 and r_c2's conversation.". The numbering of these abbreviations should begin at 1 and increment upwards.
multi_cat If multiple cats other than m_c are present and they're all being affected in the exact same way, then you can use this tag to insert a list of their names into the event. For example "m_c spends time with multi_cat." will appear to the player as "Examplecat spends time with Blankpelt, Someclaw, and Otherfur."

Directory Structure

The relationship event directory is found in resources/lang/en/events/relationship_events.

Within this folder are 3 folders:

name use
group_interactions holds events that include 3 or more cats
normal_interactions the general 2-cat interactions that are most common in the game
joining_interactions these are special events only triggered when a new cat joins the Clan

Within normal_interactions and joining_interactions are folders for each relationship value: comfort, like, respect, romance, trust. This value will be the "main" value affected by the events inside that folder.

There's one more layer of folders after this one. These dictate the strength of the effect on the "main" value: low, medium, or high.

From there, each folder contains a negative.json and positive.json. Events the decrease the "main" value will go in negative.json and events that increase the "main" value will go into positive.json.

Altogether this might look like normal_interations/comfort/medium/negative.json.

group_interactions is unique. It skips the first layer of folders dictating relationship value as its nature in affecting many relationships at once means determining a "main" value is difficult. Instead, consider how large of a relationship change is being made and whether it's largely positive or negative.

Important

While there are other files within relationship_events beyond just the 3 interaction folders listed, these do NOT contain events using the format that will be explained in this documentation.

Relationship Event Format

Important

If you do not use a constraint, you can remove it from the event to make the JSONS less hefty and more readable. Check out the below "Minimum Required" to see what parameters are always required.

Minimum Required

The smallest amount of information you're required to include in this format.

{
    "event_id": "test",
    "strings": [
        "m_c spent time chatting with r_c."
    ]
}

Full Format

    {
        "event_id": "test",
        "location": [],
        "season": [],
        "tags": [],
        "strings": [
            "m_c spent time chatting with r_c."
        ],
        "involved_cats": {
            "m_c": {
                "status": [],
                "past_status": [],
                "age": [],
                "standing": {
                    "group": [],
                    "currently": [],
                    "past": []
                  },
                "stat": {
                    "skill": [],
                    "trait": [],
                    "must_have_both": false
                },
                "health": {
                    "working": true,
                    "condition": [],
                    "must_be_congenital": false,
                    "must_be_acquired": false
                },
                "backstory": []
            },
            "r_c": {
                "status": [],
                "past_status": [],
                "age": [],
                "standing": {
                    "group": [],
                    "currently": [],
                    "past": []
                  },
                "stat": {
                    "skill": [],
                    "trait": [],
                    "must_have_both": false
                },
                "health": {
                    "working": true,
                    "condition": [],
                    "must_be_congenital": false,
                    "must_be_acquired": false
                },
                "backstory": []
            }
        },
        "relationship_constraint": [
            {
                "cats_from": [],
                "cats_to": [],
                "mutual": false,
                "constraints": []
            }
        ],
        "relationship_changes": [
            {
                "cats_from": [],
                "cats_to": [],
                "mutual": false,
                "values": [],
                "amount": 0
            }
        ]
    }

event_id: str

A unique string used to identify the event block. Generally, the ID tries to specify the main relationship value being affected, the intensity of the affect, and the type of effect; along with any other identifiers that might indicate a unique aspect of the events contained within.

  • like_inc_med1
  • like_to_app_inc_med1
  • trust_for_leader_de_high1

location:list[str]

This controls the biome and camp the event appears in. Tagging Instructions


season: list[str]

List of seasons in which the event may occur. You can utilize exclusionary tags. You can tag with a mix of "newleaf", "greenleaf", "leaf-fall", "leaf-bare", or remove the parameter altogether to allow for any season.


poi: Dict

Used to specify which POI (Point Of Interest) a Clan must have access to in order for this event to trigger. POI Constraint Tagging


tags: list[str]

Used to dictate some odds-and-ends about event constraints: General Tags.

Note

You do not need to use the romance tag for events intended to be romantic. These are already filtered as necessary.


strings: list[str]

This is a list of events applicable to the constraints on this events block. You may include as many or as few events here as you wish, but remember that the constraints will apply to all of them.

For example:

"strings": [
        "m_c and r_c agree to be best friends forever.",
        "m_c is surprised to hear r_c express an ideal {PRONOUN/m_c/subject} can agree with.",
        "m_c and r_c heckled another Clan at the Gathering together."
]

Caution

Be careful about referencing actions only specific types of cats take! For example, if an event refers to patrolling, consider if you've adequately constrained the event to only allow cats who can go on a patrol. We don't want kittens talking about their trip to the Gathering!


involved_cats: dict[str: dict]

This dictionary holds all constraints for the cats whom we wish to reference in the event, including the main cat!

Full Involved Cat Dictionary Information

relationship_constraint: list[dict]

Constrains the event to only occur is the specified relationships exist. Multiple dictionary blocks can be added to specify multiple required configurations of relationships.

        "relationship_constraint": [
            {
                "cats_from": [],
                "cats_to": [],
                "mutual": false,
                "constraints": []
            }
        ]
cats_from:list

The cats from whom the relationship originates. Use the designations (m_c, r_c, etc.) of cats listed in involved_cats.

cats_to:list

The cats who are the target of the relationship. Use the designations (m_c, r_c, etc.) of cats listed in involved_cats.

For example

If we want to ensure that m_c trusts r_c, we would put m_c in the cats_from list and r_c in the cats_to list. The feeling of trust is going from m_c to r_c.

mutual:bool

Defaults to false. Set this to true if the constraints should be mutual between the cats_from and cats_to groups.

For example

To work off of our earlier example: if we want r_c to also trust m_c, then we would set mutual to true.

constraints:list

The list of required relationships. You can include any tags in Relationship Tiers and Interpersonal Relationships. For the purposes of tag use explanations in those references: cats_from is considered "cat1" and cats_to is considered "cat2".

For example

To work off of our earlier example: we would list trusts in our constraints

relationship_changes:list[dict[str, various]]

Optional. Indicates additional effects on cat relationships. Check Writing Relationship Changes for full parameters.

Caution

The ONLY cats_from and cats_to parameters allowed here are the ones you have defined in involved_cats. Exclusionary tags and facet tags shouldn't be used. Logs are unnecessary as we always use the chosen event string for the logs.

Caution

As noted in Directory Structure, normal_interactions and welcoming_interactions events are already categorized according the values they will affect, as well as the size of the effect. You do not need to include those effects in this dict. They are applied automatically from m_c to r_c.

So, if an event is in comfort/mid/decrease then you do not need to change the comfort amount from m_c to r_c. However, if you wish to change the comfort from r_c to m_c, then you do need to use this parameter to do so.

Events in group_interactions are exempt from this. For those you will have to dictate every single intended change to the relationships.