Quest Command

An Open World RPG Experienced through the Command Prompt

About

  • Inspired by Elder Scrolls, Runescape, BOTW
  • Sacrifice GUI for more varied in game interactions

Vision

  • Living world - Elder Scrolls
  • Composable AI - Oblivion, Skyrim
  • Large world with composable level of detail - Daggerfall
  • Go anywhere: climbing, swimming, gliding, teleporting - Morrowind, BOTW
  • Dynamic dialogue - Event[0]
  • Deep level of interaction - Runescape, Skyrim
  • Allow batch files to force out grinding
  • Convenient and forgiving commands
  • Start with as much interaction as possible in a single small area

Pitfalls and Concerns

  • Secret coupling
  • Mental Scope (Lack of modularity / having to understand too much of the app at once)
  • Inconsistency (string names etc)
  • Slow content addition

Code Organization

  • Lasagna vs Ravioli Packages
    • Still not happy with it
  • Monolith vs Microservices
    • Dependencies too tightly coupled
    • Not getting microservice benefits

Event Driven

  • Command
    • Parses user intent and posts an event
  • Event
    • What is happening
  • Listener
    • Many listeners can listen to events
    • Change app state
    • Output to the user
    • Post more events

Reflection

  • Commands, Events, Listeners
  • Originally used reflection at runtime
  • Then created text files to be read at runtime
  • Then created kotlin files that are compiled at compile time

Playground

  • 15 Minutes
  • Everyone plays the game on their laptop
  • Interactive QA - setup and tech support
  • Write long questions down for later

Walking through a command

  • Look (defaults to tree)
  • Look bucket (look with >1 choices)
  • Look (present options)
  • Ls

Minimum Viable Detail

  • Reasonable defaults with scalable level of detail
  • Json Inheritance and composition
  • Behavior/tag driven instead of specific methods on objects

Different ways I’ve tested

  • Unit
  • Integration
  • Performance
  • Statistics
  • Data Validations
  • Mocking and Dependency Injection debug at get-default, objects

Objects

  • Essentially a singleton
  • Super convenient for managers
  • Dangerous because they are singletons
  • Dependency Injection

Misc

  • Objects, Classes, and Pure functions - when to use each?
  • TDD - When I’ve decided to use or not use it

Feedback

Please take a minute to fill out the survey!