This project was born from my experience of our DND group failing to meet up due to scheduling conflicts. I decided to make a text-based adventure app so that we could keep the story going.
A DM account can create games and add players / descriptions to those games. Games can then be given non-combat encounters which will be given randomized initiative orders based on the players included in the current encounter. The encounter will display whose turn it is as well as give players and the DM unique prompts based on if their turn has come. On each players turn they can pass or take an action which they describe in text. The DM can end the encounter, skip players, add comments etc.
Player account profiles show the games that their account has been added to.
All accounts can view all games as well as the contact information of the DMs and players in those games.
Link to project: https://notthisweek.herokuapp.com/
Tech used: React, Socket.io, Formik, HTML, CSS, JavaScript, Node.js, Express, Passport, MVC, Flash, Cloudinary, Heroku, MongoDB
-
Build in character Models
- Tie Characters to users marked players
- Display character on users page
- Make feed for all user characters
- Incorporate characters into games vs players
-
Add skill rolling to the encounters
- Rolls to be based upon random d20 & character attributes from sheets
- DM needs option to pass initiative back to character
- Flow to be:
- Character describes desired action
- DM assesses the roll required
- DM passes initiative back to player
- Player rolls
- Flow to be:
- Rolls to be recorded in encounter flow
-
Add saving throw rolling to the encounters
-
Add in advantage / disadvantage to rollss
-
Add combat to the game
-
Add basic inventory to each player character
One Off necessaries / Improvements:
- DM to be able to remove characters / players from a game
- DM to be able to edit their games
- DM to be able to edit their encounter
- DM to be able to edit their individual encounter rounds
- DM to be able to toggle their turn status
Major Overhaul:
- Convert to React
- Open pages as react project
- Incorporate socket.io
- Convert Forms to Formik
Cool concepts
- The ability to hide / unhide encounters / games
- This will allow for DM's to create games / sessions in advance
- Ability to copy encounters / games
- Long term it would be ideal to be able to make templates that other DM's can copy. This would allow for new players / dms to try out the game in a structured manner.
- Make encounters able to intentionally only open / visible for players who were members
- Allows for "hidden" information
- Make rounds able to intentionally only visible for players who were members
- Allows for "hidden" information
- Allow DM to set auto timeout to skip user turns if they haven't responded in some time
General / vague improvements:
- General styling update
- It feels like I'm making too many calls to my database on the backend and feel there has to be a way to improve this.
- Convert to React
- Use something like socket.io to update each players page and eliminate the need for constant refreshing
- Got some good practice with MVC workflow. The project was initially made without react but this resulted in a user experience that would require multiple page refreshes. Upon conversion I also started learning more about web sockets using socket.io to push changes to user clients upon the actions of other users. This resulted in a more seamless play style.
npm install
- Create a
.envfile in config folder and add the following askey = value- PORT = 2121 (can be any port example: 3000)
- DB_STRING =
your database URI - CLOUD_NAME =
your cloudinary cloud name - API_KEY =
your cloudinary api key - API_SECRET =
your cloudinary api secret
npm start
Attributes:
Favicon: Dice icons created by Freepik - Flaticon
Front Page Image: Image by Freepik