Git Product home page Git Product logo

Here are descriptions of recent software projects I'm allowed to discuss (i.e. non-professional work.)

GM Trainer

GM Trainer is a sandbox environment for RPG Game Masters (GMs) to realistically practice spontaneous creativity. It uses LLMs to simulate human players' responses to the GM's descriptive narration, giving GMs a training ground to exercise critical skills like improvising descriptions, decisively answering player questions, and giving logical game-world responses to player actions.

screenshot

Master's Thesis: The Computer-Driven, Human-Controlled TTRPG

For my MSc research thesis, I researched, designed, and programmed ROLEPLAYINGGAME1, the first tabletop-RPG companion app to support runtime editing of game rules and content without stopping gameplay. My aims were to:

  1. Combine the flexibility of traditional RPGs with the complex, real-time processing of videogames by enabling game worlds and game rules to grow and change during use.
  2. Assess the viability of an all-in-one platform not only for playing and GMing RPGs, but also for designing them, because game designers' needs aren't met by existing apps.

ROLEPLAYINGGAME is a web application. To target the browser, I needed a way to evaluate game rules on the backend and frontend alike, for server-side validation and rule-sensitive UIs respectively. I avoided code duplication by implementing ROLEPLAYINGGAME in Clojure, which has production-grade compilers to both Java and JavaScript. This made >95% of my backend code portable to the frontend.

To efficiently make game state available to frontend clients, whenever a user action changed the game state, I sent a diff from the server to all clients. Having game state available on clients was necessary to keep information-rich UIs up to date. One of those UIs is shown below.

The GM's Inspector, with a command and one parameter specified.

The Inspector, part of the Game Master's UI, affords rapid, context-aware interaction with all game entities.

In this screenshot, a GM is using the Inspector: a context-sensitive menu for dispatching commands on in-game entities. For each command (like dislocate), the parameters for which the character Arvak can slot into (like target-entity) are dynamically discovered by introspection on Clojure functions. The GM can click any entity on any main UI screen to add it to the Inspector2.

Computational TTRPG Tools

My master's thesis grew out of my long-standing interest in implementing tabletop RPG systems in software. Before starting my MSc, I had already developed several Python tools for my own custom game system, including a pricing simulator for over 1,000 17th-century items, a program that generates characters' life stories based on their stats, and CLI tools for rapidly updating the game world during live gameplay.

One vendor from a market price table from my homemade RPG app.

One of the tables created by the pricing simulator.

The pricing simulator brings depth, granularity, and logic to an aspect of RPGs that has never progressed beyond numbers made up on the spot. As an example of my dedication, here's an explanation of how it works.

The simulator inputs are encyclopedia data on the relative abundance of raw materials at real-life cities. Every city "exports" some fraction of its resources everywhere else, using an all-pairs shortest path network. We then determine raw material prices for each city: the more abundant, the cheaper the unit price.

Tens of thousands of calculations specify how raw materials transform into purchasable tradegoods, specifying quantities like the length and radius of a spear haft, the thickness of a clay pot, and the amount of wood needed to build a half-timbered house. Each tradegood is defined by a "recipe," which I create by researching 17th-century manufacturing. A recipe consists of raw materials and other, simpler recipes, so the set of recipes forms a directed forest. Summing the prices of a recipe's components gives the tradegoods's final player-facing price3.

Ryan Quest

I made the text adventure Ryan Quest as a surprise birthday present for my best friend from college, Ryan Wright. The player controls Ryan in a parody of his real life. After doing all the writing, coding, and user testing, I flew out to surprise him with the game in person.

Ryan Quest was written in Inform 7, an unusual programming language which is laser-focused on being good for creating interactive fiction.

Footnotes

  1.  An acronym for RPG Operation, Learning, and Execution Platform Laden with Advantages for Yielding Infinitely Nitty-Gritty Games that Allow Malleable Evolution.

  2. For instance, the exploration hex grid (partially shown above) would let the GM operate on characters, items, and individual hexes just by clicking.

  3. This explanation glosses over some complexities relevant to game design, but not to engineering; I'd be happy to discuss my work (and yours!) in more detail by email.

Maxwell Joslyn's Projects

Maxwell Joslyn doesn’t have any public repositories yet.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.