# RoundTableXR
A simple chrome extension / bot for creating XR representations of Discord channels.
## Contents
[TOC]
## Requirements
- Discord API
- Web3 database and decentralized hosting
- Simple smart contract for recording room info
- A couple 3D voxel models to test with
## Inspirations
- Mozilla Hubs
- Spacial
- Immersed
- CryptoVoxels
## To Do (complete by 25th)
1. - [x] Create a Discord bot
2. - [x] Launch a Web2 room on `arweave` using bot
3. - [ ] Make 3D room in `babylon.js` (complete by 30th)
1. - [x] Go through docs
2. - [x] Do guided learning
3. - [x] Add full room (28th)
4. - [ ] Add random 3D model
5. - [ ] Commands for themed rooms
- Castle
- Office
- Village
7. - [ ] Add guild and channel data
4. - [ ] Write smart contract to store Discord channel info (July 16th)
5. - [ ] Combine all 4 for simple demo (July 30th)
6. - [ ] Pay for Heroku server
## Possible future development
- Could be cool if it was used to create a 3D representation of DungeonMaster
## Steps
### Discord API:
- Use Rich Presence?
- Discord [documentation](https://discord.com/developers/docs/intro)
- Use a Discord bot to send info to the 2D room: https://discord.com/developers/docs/topics/oauth2#bots
- Use `discord.js` to create bot: https://discord.js.org/#/
- Docs: https://discord.js.org/#/docs/main/stable/general/welcome
#### Commands:
1. `create`
2. `sync`
3. `delete`
4. `join`
#### Additional Features:
**Don't forget to add these features soon...**
https://discordjs.guide/command-handling/adding-features.html#command-categories
### Arweave:
- Uses `arweave.js`: https://github.com/ArweaveTeam/arweave-js
#### Data to initially display:
- Guild name
- Channel name
- Members in the channel
#### Snag: can't deploy a whole directory with `arweave-js`
Solution: copy [`arweave-deploy`](https://github.com/ArweaveTeam/arweave-deploy/blob/master/src/commands/deploy-dir.ts) or [`arkb`](https://github.com/textury/arkb/tree/051816dde5e46aae3753e619ba0cca675e7f27b9)
- Done here: https://github.com/ECWireless/roundtable-xr/blob/master/helpers/deploy.js
### Babylon.js
- Start with this walkthrough: https://www.smashingmagazine.com/2020/10/using-webxr-with-babylonjs/
- In the future, consider using a [Headless Engine](https://doc.babylonjs.com/advanced_topics/serverSide) for better client-side performance
- Documentation: https://doc.babylonjs.com/
- Need to define the states of the game
- Boilerplate FPS-style room: https://arweave.net/9xnGnLTCgBnxJBFesCYx2z4e6TlueyszNs4Z_Py5mFU
## The Tavern
- The first experience should use DungeonMaster, and be focused around tavern-like interactions
- There should be 4 ways of interacting with DungeonMaster, depending on how much processing power you are willing to use:
- Web App
- 2D MMORPG
- 3D MMORPG
- XR MMORPG
- [DungeonMaster API Docs](https://dungeon-master-api.herokuapp.com/api-docs/)
- [Version 1 of DungeonMaster UI](https://dev-dungeon-master-v1.vercel.app/)
- Mechanics:
- Allow players to view the tavern without wallet (roaming camera)
- Allow players to play in tavern once wallet is connected
- Logged in players can view randam artwork, chat with people, and view the consultation queue
- If you are a Raid Member, you can interact with the queue as a member
## Brainstorming Designs
https://www.figma.com/file/B5MgbaGkatcCqacNF4rQ3q/Raid-Guild-RPG?node-id=1%3A195
- RaidGuild Notion: notion.so/Raid-Web3-RPG-7390244ffb1b4fcab2adeab6878828af