Giter Club home page Giter Club logo

agonyforge's Introduction

Discord

Agony Forge

Build a game, not an antique.
Agony Forge is a framework for building web based Multi User Domains, or MUDs. Think Spring Boot for building a MUD. It's free and open source. The main goal for Agony Forge is to make it easy for retro gaming enthusiasts to bring the feeling of MUDs back in the 90s forward to the modern day.

Core Module

Agony Forge provides a core module that handles security, session management, server clustering, and WebSocket transport for connections between players' browsers and the MUD server. It also provides a small set of standard objects that can be pulled in as a dependency via Gradle or Maven and used to build a standard Spring Boot application.

The core module provides the basic features that most any MUD would need:

  • Framework for interpreting user commands
  • Simple menuing system
  • Basic timers
  • Messages from the server to clients
  • Colors
  • Flexible dice rolling

Demo MUD

The second module is a demo MUD to demonstrate the framework's capabilities and to guide development in useful directions. At the moment it is in early development and not hosted online, but if you're feeling adventurous you can clone it and try it out on your own computer. It's still a little challenging to set up, but this process will get easier soon.

$ git clone [email protected]:scionaltera/agonyforge.git
$ cd agonyforge
$ cp mud.EXAMPLE.env mud.env
# set up an OAuth2 application in GitHub, see wiki for details!
$ ./gradlew clean build
$ docker-compose up
# go to http://localhost:8080 to see the MUD!

Please check the Wiki for much more detailed setup instructions. If you get stuck, feel free to ask for help on our Discord by clicking the badge at the top of this README.

After it matures a little, I am excited to get it online and let people play it there. Here's what it looks like.

A screenshot of a simple Agony Forge play session

Optional Modules

As the demo MUD is built up, other optional modules will also become available. The optional modules will provide additional functionality but the core module will not depend on them, similar to the way you can pick and choose which modules to use in Spring Boot.

DynamoDB

The DynamoDB based persistence layer is for storing characters, rooms, and other game data in DynamoDB.

History

Agony Forge is not an old project, having just started in November 2022, but it has a long history. I've been writing code for over 20 years, and I've been working on 100% from-scratch MUD codebases for nearly that long. After many years of writing and rewriting due to changing technologies and changing ideas, it occurred to me that separating the framework from the game was the best path forward. That way the different games I'd like to write could all share the same foundation, and your game could too.

agonyforge's People

Contributors

dependabot[bot] avatar scionaltera avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

agonyforge's Issues

Externalize Efforts into configuration

Efforts are defined in an Effort enum but not every MUD is going to want to keep them exactly the same as ICRPG. It would be helpful to define them externally in a file that is loaded on startup instead of in code.

Finally compiled AF without warnings, but the docker container is not fully initializing.

I uploaded the logs from Docker here. https://logpaste.com/8xjM8Y5z

I do see a few error lines. There's a couple of retries/restarts by me in there.

I've gone through some hoops just to get to this point on Windows. I installed Azul Java because the latest Java doesn't compile this. I had a lot of fun getting WSL to install and update properly in order to even get Docker engine to initialize on my Windows.

I've done everything I can to get this far but I'm at a complete loss right now.

externalize pronouns into configuration

Pronouns are defined in a Pronoun enum but it's likely that different MUDs will want to support more or fewer or different pronouns. It would be helpful to define them in a file and load the file at startup so it didn't require a code change to modify them.

update cognito CloudFormation template

I tested the CloudFormation template that is included in the project and found that what it produced doesn't quite match the user pool that I'm actually using.

Migrate from Cognito to GitHub

Switch from Amazon login to GitHub social login. They basically do the same thing but GitHub wouldn't require setting up Cognito on the back end. Getting Agony Forge set up for the first time would be a lot easier without the Cognito part.

Externalize Profession into configuration

Professions ("classes" in most TTRPGs) are defined by the ProfessionLoader class where the definitions of the professions are hard coded. These definitions should be moved into configuration files so they can be changed easily without needing to change the code.

Externalize Stats into configuration

Stats are defined in a Stat enum, but not every MUD is going to want to keep the typical D&D stats. It would be helpful to define them in a configuration file that is loaded on startup instead of hard coded.

update rabbitmq to 3.11.20

AWS is now supporting and recommending 3.11.20, and the version we're using is now showing a warning that it is getting too old.

Disconnection during character creation leaves session in bad state

Sometimes there is no Question or the character is saved but doesn't have all its points allocated. Sometimes it's possible to get to the menu and delete the character to start over but sometimes you can just get stuck in a loop where it doesn't know what menu to show you, so you just get redirected back to the "Play" button repeatedly.

Externalize wear slots into configuration

Wear slots are defined in a WearSlot enum. However, not every MUD is going to want the same ones. It would be helpful to define them in a configuration file and load them on startup instead of hard coding them in an enum.

extract menus into their own module

The menu code in the core module under com.agonyforge.mud.core.cli.menu.impl is a good candidate for refactoring into its own small module. It doesn't quite belong in the demo MUD because I don't want to make everybody implement their own menus from scratch if they don't want to. But it also doesn't quite belong in core because I'd expect most MUDs that get far enough along will want to customize how their menus look and not be forced to pull these default ones into their codebase. Having them in a separate module would walk that line pretty well: a sample implementation that can be added easily as a dependency for those who want it, and replaced for those who don't.

Externalize Species into configuration

Species ("races" in most TTRPGs and "life forms" in ICRPG) are defined in the SpeciesLoader class where they are hard coded. These definitions should be loaded from a file where they can be changed easily without having to change the code.

parameterize oauth2 provider

GitHub is hard coded in several places as the OAuth2 provider, but Spring Security supports several providers. It would be best to have a configuration option in mud.env so you can choose which of the supported providers you want to use, and to parameterize all the places in the code that currently refer to GitHub so you can switch without any code changes.

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.