Mocha is currently a tile based game template, with simple hitbox collision.
- Remove ChunkRepository access from Grass Grows / Water Evaporates rules
- TileUpdates are not firing (probably because the connection isn't getting put into the mochaConnectionsByPlayerId map currently)
- The player gets a new player ID every time they connect
- The player's sprite is not centered on the screen. It is in the SE quadrant of the center.
- The player's sprite is not centered on its entity's hitbox. The right and bottom sides overhang by any difference in size.
These represent units of work to be done.
- Gracefully inform registering player when the account name is already taken
- Enable client-side specification between registering / logging-in
- Chain item prototypes together
- Chain entity prototypes together
- Pickaxe sprite.
- Pickaxes exist in the world.
- Items disappear from the world when picked up.
- A network player can send a command to pickup an item.
- Swords exist in the world.
- Swords / Pickaxes can be dropped by the player and appear in the world when dropped.
- A player can open their inventory and view its contents.
- Tiles can hold things?
- Bushes exist in the world.
- Bushes disappear when struck by a sword.
- Stones disappear when struck by a pickaxe.
- I can save and load maps to disk.
- I can persist entities and tiles to a database for loading.
- There exist wild mobs.
- Tile graphics connect across chunks.
- Graphics are layered (background, mask, foreground, sprites, particles, UI)
- Spike: Can I handle click events directly on graphical components?: Yes.
- Spike: Can I draw directly on the canvas instead of using a writable image? Yes, but it's more performant to use many canvases.
- A sound is played when an item is picked up.
- A sound is played when a pickaxe is swung.
- A sound is played when a stone is struck by a pickaxe.
- A sound is played when a sword is swung.
- A sound is played when an entity is struck by a sword.
- Issue: The client gets mad when it can't find a server: massive blood trail
- There is a game client.
- The game server responds to chunk requests with the requested chunk's data.
- The game client renders a chunk requested from the server.
- The game server responds to entities requests with the requested entities's data.
- The game client renders entities requested from the server.
- The client can distinguish entity updates from additions.
- The game server accepts proposals for moving an entities.
- The game client proposes to move an entities upon key-press.
- Server entity movements are propagated to clients.
- When a client connects, a new entity is created for that client.
- The server associates incoming packets with the sender.
- When a client disconnects, their entity is removed.
- Server sends data to clients beyond the first
- The server forgets a client when it disconnects, and does not continue to send it messages.
- If a player asks for a non-existent entity, server responds with Entity Removed
- Architect by layer
- Each layer feeds into the next.
- Input layer
- Game logic
- Physics
- Rendering
- Movement
- An entity near a corner will be able to slide left/right (relative to the entity's face) and around the corner so that they can continue forward.
- Crafting
- Have to use correct tool on correct items at proper moment.
- Using a hammer on stone creates stone chunks.
- Placing 2x stone chunks on a crafting table with 1x wood planks and hitting with a hammer creates a stone wall.
- Soft gates
- Hidden skills that improve, instead of levels that represent arbitrary milemarkers.
- Skills improve with use.
- Players need to know the recipes to craft them.
- Players are not limited to classes they select at character creation, rather by where they have invested their efforts.
- Pivoting requires starting a new tree (but does not destroy previous efforts).
- Inventory is limited to a 16-slot backpack (and 2 slots for hands), so that players have to carefully select what to carry.
- Hidden skills that improve, instead of levels that represent arbitrary milemarkers.