Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/repcomm/yarr

A proof of concept MMO w/ pocketbase
https://github.com/repcomm/yarr

3d blender customization game mmo multiplayer penguin pocketbase preact realtime typescript wip yarr

Last synced: about 2 months ago
JSON representation

A proof of concept MMO w/ pocketbase

Awesome Lists containing this project

README

        

# yarr

![img](./example.png)
![img](./example1.png)
![img](./example2.png)
![img](./example3.png)
![img](./example4.png)
![img](./example5.png)

## Implemented
- `/` - home, character selector
- `/play` - main gameplay here
- characters
- profile cards
- player w/ items attached
- equipped items
- floating name
- click-to-walk
- waddle anim
- room join/leave by updating character.room in db
- Clickable callbacks (raycasting)

### Rooms
- Coffee Shop
- Town model (incomplete)

### GLTF userData (blender custom props):
- `obj.userData["spawn-from"]` - DbRoom.label
- obj is spawn position if previous room.label is this value
- `mesh.userData["goto-room"]` - DbRoom.label
- mesh is clickable, joins room with this value
- `material.userData.emission` - float
- emissiveIntensity of material, when included, emission property of material defaults to white instead of black
- `mesh.userData.invis` - "true"|"false"
- when true sets mesh.visible = false
- `material.userData.toon` - "true"|"false"
- when set to "false" skips toon material conversion

- Rooms, Items, Assets fully from database uploads, no code required to create new ones

## running
- `npm install`: Installs dependencies

- `npm run dev`: Run a development, HMR web server

- `npm run build`: Production-ready client build

- `npm run db` : uses `pocketbase` as a top level command, you'll want to add it to your path, or run it differently - the 'backend' as it were
Pocketbase is configured in package.json to host the /build directory, which is generated by `npm run build`

## database
pocketbase is used to:
- serve the web client
- serve game assets for rooms and items
- do realtime client updates via pub/sub

The schema can be loaded from pb_schema.json

- users
- name - display name for account
- characters - multiple characters per player
- inventory - items the player owns
- equipped - items the player has equipped (subset of inventory)
- x,y,z - position
- rx,ry,rz - euler rotation
- name - name of the character
- room - set this to handle all room updates
- items
- definition - item_defs entry
- owner - who owns this item
- count
- item_defs
- wearable - boolean
- wearable_bone_name - string
- obj.name attach point
- asset - DbAsset
- label - string
- description - string
- rooms
- model_placements - DbModelPlacements
- occupants - DbCharacters[]
- label - string
- description - string
- model_placements
- asset - what model to show
- placements - JSON array of {x,y,z}