From 9607803e76594217e42bb4cd5d904d0bfbbb66a1 Mon Sep 17 00:00:00 2001 From: Joey Wilhelm Date: Thu, 31 Dec 2020 13:42:47 -0700 Subject: [PATCH 1/7] Add initial stage 0 definition --- stages/stage0.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 stages/stage0.md diff --git a/stages/stage0.md b/stages/stage0.md new file mode 100644 index 0000000..25f70d9 --- /dev/null +++ b/stages/stage0.md @@ -0,0 +1,37 @@ +# Stage 0 - Skeleton Repository + +This is the very beginning of an implementation, before any actual development +work happens. The goal here is to get the repository set up with all of the +basic pieces needed to ensure a successful project. + +## Required Files + +A stage 0 repository MUST have all of the following files: + +* `.editorconfig` +* `.gitignore` - SHOULD be created from a GitHub template +* `CODE_OF_CONDUCT.md` - Contributor Covenant >=v1.4 +* `LICENSE` - The MIT license +* `README.md` - At this stage, no required content in this file + +## Optional Files + +A stage 0 repository SHOULD have the following files: + +* Issue templates +* Pull request templates + +## Required Config + +A stage 0 repository MUST have the following configuration set up: + +* Branch protection rules for the default branch including at least 1 required + reviewer. +* Merge commits MUST NOT be allowed +* "Automatically delete head branches" SHOULD be enabled + +## Recommended Setup + +A stage 0 repository SHOULD use a package manager appropriate for the language, +when possible. When multiple are available, every effort should be made to find +the option which will work best for our scenario, and has the largest body of community support available. From 990facab0520b755cbf937e01cc835e4ad526767 Mon Sep 17 00:00:00 2001 From: Joey Wilhelm Date: Sun, 17 Jan 2021 17:25:20 -0700 Subject: [PATCH 2/7] Add a skeleton stage1 doc --- stages/stage1.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 stages/stage1.md diff --git a/stages/stage1.md b/stages/stage1.md new file mode 100644 index 0000000..fca0327 --- /dev/null +++ b/stages/stage1.md @@ -0,0 +1,13 @@ +# Stage 1 - Basic chat server + +This is the first stage of development, standing up a basic chat server. Users +will be able to create accounts, which are saved to disk; log in to existing +account; and send chat messages which are broadcast to all connected users. + +## Required Features + +### Account Creation + +### Login + +### Echo Server From 4d0fe39a0bcce6131e2bcfcbd118d0a2dfc4b3ca Mon Sep 17 00:00:00 2001 From: Joey Wilhelm Date: Sun, 17 Jan 2021 17:25:32 -0700 Subject: [PATCH 3/7] Set up links to the stages --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 065eb7f..ab83304 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,17 @@ Facet MUD Project. Documents in this repository utilize the keywords for requirement levels lined out in [RFC 2119]: `MUST`, `MUST NOT`, `SHOULD`, `SHOULD NOT`, `MAY`. +## Development Stages + +These define the various stages of development for the implementations of the +Facet MUD project. This will help us measure and advertise the level of support +offered by them. They also help to ensure feature parity across all +implementations, as long as these are throughly defined and maintained. + +* [Stage 0](./stages/stage0.md) - Skeleton repository +* [Stage 1](./stages/stage1.md) - Basic chat server +* Stage 2 - TBD + ## Data Specifications * [Player save files](./data/players.md) From 269ef5f2c98d18d5dee9c896671b1ad643597e89 Mon Sep 17 00:00:00 2001 From: Joey Wilhelm Date: Sat, 8 Jan 2022 16:39:52 -0700 Subject: [PATCH 4/7] Add a recommendation for a pre-commit config --- stages/stage0.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stages/stage0.md b/stages/stage0.md index 25f70d9..d0b89b6 100644 --- a/stages/stage0.md +++ b/stages/stage0.md @@ -20,6 +20,8 @@ A stage 0 repository SHOULD have the following files: * Issue templates * Pull request templates +* `.pre-commit-config.yaml` - Set up pre-commit to run appropriate checks + before git commits. ## Required Config From 6b780bccf46563213bf8ea5f3ff97e6c090e5dbb Mon Sep 17 00:00:00 2001 From: Joey Wilhelm Date: Sat, 8 Jan 2022 16:40:20 -0700 Subject: [PATCH 5/7] Start fleshing out the actual needs for a stage 1 implementation --- features/telnet.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++ stages/stage1.md | 15 +++++++++++-- 2 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 features/telnet.md diff --git a/features/telnet.md b/features/telnet.md new file mode 100644 index 0000000..7f78bc1 --- /dev/null +++ b/features/telnet.md @@ -0,0 +1,52 @@ +# Telnet + +The telnet protocol and a telnet server are at the heart of MUDs, as they are +how a user communications with the game, and vice versa. As such, as we need +specific pieces of the protocol implemented in order to make the game function. + +A developer implementing the telnet protocol for a particular Facet +implementation SHOULD use a pre-existing external library. This not only helps +avoid too much [yak shaving], but abstracts the complexities of the protocol out +of the game engine. If a pre-existing library is not available, or if none of +the available options can be modified to suit our purposes, then a developer MAY +create a new library for the purpose. This library MUST be external to the game +implementation itself, but MAY be hosted in the FacetMUD organization. + +Below are the most essential parts of the protocol and when they MUST be +implemented in the development of a game engine. + +## Stage 1 - Basic Chat Server + +For the beginning implementation of a game engine, a developer must include +support for the following: + +* [RFC 854] - Telnet Protocol Specification
+ + This is the core telnet protocol, and thus the entire protocol MUST be + supported in order to build upon for the future stages. +* [RFC 857] - Telnet Echo Option + + This allows the server to either echo, or stop echoing, input back to the + client. This option is key for when a user is entering their password. By + using this option, said password is not echoed back to the user when entered. + +## References + +* [RFC 854] - Telnet Protocol Specification +* [RFC 855] - Telnet Option Specifications +* [RFC 856] - Telnet Binary Transmission +* [RFC 857] - Telnet Echo Option +* [RFC 858] - Telnet Suppress Go Ahead Option +* [RFC 859] - Telnet Status Option +* [RFC 860] - Telnet Timing Mark Option +* [RFC 861] - Telnet Extended Options: List Option + +[RFC 854]: https://datatracker.ietf.org/doc/html/rfc854 +[RFC 855]: https://datatracker.ietf.org/doc/html/rfc855 +[RFC 856]: https://datatracker.ietf.org/doc/html/rfc856 +[RFC 857]: https://datatracker.ietf.org/doc/html/rfc857 +[RFC 858]: https://datatracker.ietf.org/doc/html/rfc858 +[RFC 859]: https://datatracker.ietf.org/doc/html/rfc859 +[RFC 860]: https://datatracker.ietf.org/doc/html/rfc860 +[RFC 861]: https://datatracker.ietf.org/doc/html/rfc861 +[yak shaving]: http://joi.ito.com/weblog/2005/03/05/yak-shaving.html diff --git a/stages/stage1.md b/stages/stage1.md index fca0327..440db03 100644 --- a/stages/stage1.md +++ b/stages/stage1.md @@ -1,13 +1,24 @@ # Stage 1 - Basic chat server This is the first stage of development, standing up a basic chat server. Users -will be able to create accounts, which are saved to disk; log in to existing -account; and send chat messages which are broadcast to all connected users. +are able to create accounts, which are saved to disk; log in to existing +accounts; and send chat messages which are broadcast to all connected users. ## Required Features +The following set of features MUST be implemented fully in order for the Facet +implementation to be considered complete for Stage 1. + +### Telnet Server + +The implementation MUST provide a way to start a telnet server which remains +open at a specified port number. This telnet server MUST support the parts of +the telnet protocol specified in [Telnet - Stage 1]. + ### Account Creation ### Login ### Echo Server + +[Telnet - Stage 1]: ../features/telnet.md From dc5d4e51e086d7ee46e79c88eada36f35b4e8818 Mon Sep 17 00:00:00 2001 From: "Thomas L. Martin" Date: Tue, 22 Aug 2023 01:17:50 -0700 Subject: [PATCH 6/7] Rearrangement of the different early stages, as well as added some additonal context and information. --- stages/stage0.md | 2 ++ stages/stage1.md | 23 +++-------------------- stages/stage2.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 20 deletions(-) create mode 100644 stages/stage2.md diff --git a/stages/stage0.md b/stages/stage0.md index d0b89b6..705f818 100644 --- a/stages/stage0.md +++ b/stages/stage0.md @@ -37,3 +37,5 @@ A stage 0 repository MUST have the following configuration set up: A stage 0 repository SHOULD use a package manager appropriate for the language, when possible. When multiple are available, every effort should be made to find the option which will work best for our scenario, and has the largest body of community support available. + +Build tools and build configuration are also setup at this stage and a minimalist "hello world" should be created to test the build tools. diff --git a/stages/stage1.md b/stages/stage1.md index 440db03..7612c3c 100644 --- a/stages/stage1.md +++ b/stages/stage1.md @@ -1,24 +1,7 @@ -# Stage 1 - Basic chat server +# Stage 1 - Echo Server -This is the first stage of development, standing up a basic chat server. Users -are able to create accounts, which are saved to disk; log in to existing -accounts; and send chat messages which are broadcast to all connected users. +This is first stage of development and acts as a test for whatever networking library is used for this version of the MUD. ## Required Features -The following set of features MUST be implemented fully in order for the Facet -implementation to be considered complete for Stage 1. - -### Telnet Server - -The implementation MUST provide a way to start a telnet server which remains -open at a specified port number. This telnet server MUST support the parts of -the telnet protocol specified in [Telnet - Stage 1]. - -### Account Creation - -### Login - -### Echo Server - -[Telnet - Stage 1]: ../features/telnet.md +The echo server needs to have a listening socket that can be connected to via either a mud or telnet client. It will then accept connections on said listening socket and wait for a user to connect. It will then create a new connection/player object for that user to send and receive data on. Until the user closes their connection any data sent to the listening socket will be outputed on the listening sockets side as well as being echoed back to the sending connection. \ No newline at end of file diff --git a/stages/stage2.md b/stages/stage2.md new file mode 100644 index 0000000..10c2945 --- /dev/null +++ b/stages/stage2.md @@ -0,0 +1,44 @@ +# Stage 2 - Basic chat server + +This is the second stage of development, standing up a basic chat server. Users +are able to create accounts, which are saved to disk; log in to existing +accounts; and send chat messages which are broadcast to all connected users. + +## Required Features + +The following set of features MUST be implemented fully in order for the Facet +implementation to be considered complete for Stage 1. + +### Required Commands + +Other than what is required to log into an account the only other input that needs to be handled to meet this Stage are these commands. + +* `say`or `chat` \ - sends a message to all other connected accounts as well as the sender. Formats as follows: + +> self: You say/chat: + +> others: self.name says/chats: + +* `quit` - quits the mud causing the player's account to be saved to disk, all remaining output to be sent be written to the player's connection, and then the closing of the player's connection. Optionally + +### Telnet Server + +The implementation MUST provide a way to start a telnet server which remains +open at a specified port number. This telnet server MUST support the parts of +the telnet protocol specified in [Telnet - Stage 1]. + +### Login + +On login a user should be greated with some kind of welcome message, be it an ascii banner or just a simple line of text. They will then be asked if they would like to log into an exisiting account or a make a new account. + +If they want to log into an existing account, they will be asked for the account username and then the account password. The MUD will then try to find an account by that username. If the account does not exist the player will be informed that the password did not match and be disconnected. Otherwise they will be logged into the MUD. + +### Account Creation + +If the previously mentioned user wanted to make a new account, they will be asked what username they would like to use, this username will be checked against existing accounts. If the name is already in use the player will be informed that the name is not available and please try another. If after another two tries they have still not been able to secure an unused account username they will receive a message of condolence and be disconnected. + +They will then be asked to confirm if this username is the one they want and if not they will start over the previous process of choosing a username. + +Otherwise they will then be asked to choose a password that is at least 8-12 characters in length and then asked to confirm that password. If the confirmation matches, an account will be made using that username and password combination and logged into the MUD just as if they already had an account and succesfully logged in. Otherwise they will receive a condolence message and be disconnected. + +[Telnet - Stage 1]: ../features/telnet.md From 19e46018511ab497e8dbf2e687ea7525fa9e6e88 Mon Sep 17 00:00:00 2001 From: "Thomas L. Martin" Date: Thu, 24 Aug 2023 12:45:50 -0700 Subject: [PATCH 7/7] Not really related to stage-1 but piggybacking to add placeholder files for some of the data specifications that hadn't been added before --- data/items.md | 0 data/npcs.md | 0 data/rooms.md | 21 +++++++++++++++++++++ 3 files changed, 21 insertions(+) create mode 100644 data/items.md create mode 100644 data/npcs.md create mode 100644 data/rooms.md diff --git a/data/items.md b/data/items.md new file mode 100644 index 0000000..e69de29 diff --git a/data/npcs.md b/data/npcs.md new file mode 100644 index 0000000..e69de29 diff --git a/data/rooms.md b/data/rooms.md new file mode 100644 index 0000000..bbedabb --- /dev/null +++ b/data/rooms.md @@ -0,0 +1,21 @@ +# Room Definition Failes +Room definition files MUST be stored in the [TOML] format and contain the following variables: + +| Key | Data type | Optional | Notes | +| --- | --------- | -------- | ----- | +| room_id | integer | No | | +| short_desc | string | No | | +| long_desc | string | No | | +| sights | map | Yes | | +| sounds | map | Yes | | +| smells | map | Yes | | +| exits | map | Yes | | + +## Variable Description +room_id: a unique integer used to identify the room within the game system +short_desc: a short descriptor used as a title in verbose mode and as the description of the room in compact mode. +log_desc: an indepth description of the room used in verbose mode. +sights: a list of things that the players can look at, along with their associated descriptions. +sounds: a list of things that the players can listen to, along with their associated descriptions. +smells: a list of things that that players can smell, along with their associated descriptions. +exits: a list of exits from this room by their exit commands, along with the room they are attached to.