Automated, progress quest-inspired procedural adventuring

Overview

Tales of an Endless Journey (TEJ)

Automated, progress quest-inspired procedural adventuring

demo image

What is this project?

Journey is the result of many, many attempts at making some form of D&D inspired computer program. The scope of this project has, over the years, variously shifted from a text adventure game to a fairly faithful recreation of 5e to a full text adventure scripting engine powered by Markdown to a world simulation that also allowed you to explore it (the last is the Civsim project). It's current party-focused instantiation owes itself to inspiration from games such as Dungeon Campaign (Although its graphics are, if possible, even worse) as well as automated simulators such as Progress Quest, which has just received a CLI release. Oh, also automated roguelikes like Roguathia.

How do I "play" TEJ?

  1. Download all files.
  2. Install the pyyaml module for python using pip install pyyaml.
  3. Run main.py.
  4. Sit back and relax, the journey has begun.

Ok, but seriously, how do I "play" TEJ?

When TEJ is created, a party of random characters is generated and go through their lives before adventuring. Being strong willed adventurers, they come with minds of their own, and are naturally reluctant to follow any commands. Indeed, they will insist on making all decisions by themselves, either through collective voting or selfishly, leaving you (the player) with little to do except watch their exploits play out. You can leave the window in the background, and if (when) these adventurers fall you will receive your highscore - my current highscore is 2599.

How does TEJ work?

TEJ works using a system of markov chains containing various nodes. For example, the wilderness node can either link to itself (going from one spot in the wild to another), to a travel encounter, to a town, or to a dungeon. Each node also has an associated event, which sometimes gives the characters some control over where they end up through skill checks, voting, or similar mechanisms.

Characters can also have encounters with other creatures, which have different power levels and are not generated to be a "fair fight". Based on the power disparity between the groups and fear and aggression in the party, adventurers can choose to fight, flight, or parley. Of course, if they come to blows and adventurers die, the party is diminished. When the party is lost to traps, exhaustion, or foes, the game is over... (You can sometimes recruit party members in town, no fear, and surviving dungeons levels party members up!)

I want more biomes/monsters/unique encounters/X feature!

You're in luck! TEJ is designed to be pretty extensible, and I'm looking forward to reworking the codebase to make it even more extensible! To add a new node in the markov chain, simply edit the list of possible outcomes for each node in generic_adventure.yaml and then the function in the Adv class in generic_adventure.py. Be warned that some nodes specify what outcome they link to using special methods in the function rather than "choosing" from the markov chain options. Monsters are simply a name, a vertical bar |, and a power number added to the list in generic_encounters.yaml. If you want a monster to have special behaviour, I've written up an example of a special enemy (the venomous adder) in generic_adventure.py. Any subclasses for Enemy you add using this format are automatically detected and will replace the relevant bestiary entry. When naming the subclass, be sure to name it exactly the same as the bestiary entry, except replacing with _.

Any last words?

Have fun!

You might also like...
Your Google Recon is Now Automated
Your Google Recon is Now Automated

GRecon : GRecon (Greei-Conn) is a simple python tool that automates the process of Google Based Recon AKA Google Dorking The current Version 1.0 Run 7

Automated GitHub profile content using the USGS API, Plotly and GitHub Actions.
Automated GitHub profile content using the USGS API, Plotly and GitHub Actions.

Top 20 Largest Earthquakes in the Past 24 Hours Location Mag Date and Time (UTC) 92 km SW of Sechura, Peru 5.2 11-05-2021 23:19:50 113 km NNE of Lobuj

Track testrail productivity in automated reporting to multiple teams
Track testrail productivity in automated reporting to multiple teams

django_web_app_for_testrail testrail is a test case management tool which helps any organization to track all consumption and testing of manual and au

Automated Content Feed Curator

Gathers posts from content feeds, filters, formats, delivers to you.

Automated Birthday Wisher built using Python
Automated Birthday Wisher built using Python

Automated Birthday Wisher This Automation of wishing Birthday is achieved using Python. Never forget to wish birthday! Table of contents Overview Scre

Automated moth pictures for biodiversity research
Automated moth pictures for biodiversity research

Automated moth pictures for biodiversity research

Automated rop chain generation

This is the accompanying code to the blog post talking about automated rop chain generation. Build the test file with: make Install the dependencies:

Backups made easy, automated, monitored and SECURED with an audited encryption

Backup Controller Backups made easy, automated, monitored and SECURED with an audited encryption. Schedules backup tasks executed by Backup Maker, upl

Releases(v0.1)
Owner
null
Procedural modeling of fruit and sandstorm in Blender (bpy).

SandFruit Procedural modelling of fruit and sandstorm. Created by Adriana Arcia and Maya Boateng. Last updated December 19, 2020 Goal & Inspiration Ou

Adriana Arcia 2 Mar 20, 2022
Pdraw - Generate Deterministic, Procedural Artwork from Arbitrary Text

pdraw.py: Generate Deterministic, Procedural Artwork from Arbitrary Text pdraw a

Brian Schrader 2 Sep 12, 2022
A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!

Ubelt is a small library of robust, tested, documented, and simple functions that extend the Python standard library. It has a flat API that all behav

Jon Crall 638 Dec 13, 2022
Is a polybar module that will show you your progress in Hack The Box

HTB-Status for Polybar Is a polybar module that will show you your progress in Hack The Box indicating your current rank, global rank, points and resp

bitc0de 8 Jan 14, 2022
🏃 Python3 Solutions of All Problems in GKS 2022 (In Progress)

GoogleKickStart 2022 Python3 solutions of Google Kick Start 2022. Solution begins with * means it will get TLE in the largest data set. Total computat

kamyu 38 Dec 29, 2022
Paprika is a python library that reduces boilerplate. Heavily inspired by Project Lombok.

Image courtesy of Anna Quaglia (Photographer) Paprika Paprika is a python library that reduces boilerplate. It is heavily inspired by Project Lombok.

Rayan Hatout 55 Dec 26, 2022
Ergonomic option parser on top of dataclasses, inspired by structopt.

oppapī Ergonomic option parser on top of dataclasses, inspired by structopt. Usage from typing import Optional from oppapi import from_args, oppapi @

yukinarit 4 Jul 19, 2022
edgetest is a tox-inspired python library that will loop through your project's dependencies, and check if your project is compatible with the latest version of each dependency

Bleeding edge dependency testing Full Documentation edgetest is a tox-inspired python library that will loop through your project's dependencies, and

Capital One 16 Dec 7, 2022
An optional component handler for hikari, inspired by discord.py's views.

hikari-miru An optional component handler for hikari, inspired by discord.py's views.

null 43 Dec 26, 2022
A simple assembly- and brainfuck-inspired stack-based language

asm-stackfuck A simple assembly- and brainfuck-inspired stack-based language. The language has a few goals: Be stack-based Look like assembly Have a s

Nils Trinity 1 Feb 6, 2022