
Game design notes for
BoneQuest: Quest for the Bone:
This doc probably doesn't contain any spoilers 🤷
Development occurred across 3 decades
- 15 years, roughly 2008-2023
- Game design (2008+)
- Early implementation (c. 2012)
- Modern Implementation (2015-2020)
- Beta 1: semi-public testing (2019)
- Upgraded from Python 2 to 3 (2020)
- Given a forever home at bonequest.gg (2022)
- Beta 2: public test (2023)
Early designs were all over the place:
- Several Macromedia Flash proof-of-concepts were made (2008)
- An early integration with IRC was scrapped
- At some point it was decided we were making a text adventure, not a graphical video game
The Numbers:
- 150 objects
- 87 rooms
- 9 actors (non-player characters)
- 30 quests
- About 250 commands are required to win the game
Designing for multiple concurrent players is, like, hard:
- Puzzles generally reset themselves after being solved
- Some puzzles require 2 players working together to solve
- Some exits are one-way, preventing new players from simply following others into forbidden areas
On Movement:
- Slightly-improved experience: "You can't go in that direction. You can go north."
- Type `EXITS` for a list of available directions
- Sometimes you can go NW, NE, SW or SE but these compass points are minimized
- Sometimes you can go UP or DOWN
- You can go into things: `GO CAVE`, `GO INTO OUTHOUSE`
Account data stored on the server:
- Allows player state (objects in inventory, current location, quests) to be saved
- Players can reconnect without losing progress
- Players have a home page and can also opt-out of any public presence with `.private` command
Instead of a game score, BoneQuest has a quest system:
- Quests are part of a chain, assigned one after another
- The game has many quest chains
- Completing all the quests wins the game
- Players can use the "QUESTS" command to view progress
Players are prevented from making a huge mess:
- Only 1 object of a type can be dropped in a location
- Only 1 object of a type be in a player's inventory
- We have a janitor
- Nothing really done to prevent objects from being shared between players
On Griefing:
- Players can't block each other from playing or progressing
- Players can't hoard objects that prevent others from winning
- Commands to mute/unmute other players are available
- Flood control is in effect
Under The Hood:
- Game code is 277,000 lines of Python 3, Markdown, JavaScript, HTML, CSS, bash and Golang
- World is built from a single configuration file
- About 90% of the game engine is generic, 10% specific to this game
- Subsystems include:
- Authentication server (codename "BORT")
- Websocket server (codename "HEN")
- NGINX front-end
- Game runs in about 30MB of memory with no players connected
Have a question?
- Discord:
discord.gg/jn7zhX4tjK
- Email: game@bonequest.com
- Thank you / for your / great pleasure
- Last updated: 22-Feb-2025 11:34
-
Play Now