Skip to content

srwaggon/mocha

Repository files navigation

Mocha Readme

Mocha is currently a tile based game template, with simple hitbox collision.

CircleCI

Backlog

  • Remove ChunkRepository access from Grass Grows / Water Evaporates rules

Bugs

  • 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.

Stories / Epics

These represent units of work to be done.

Accounts

  • Gracefully inform registering player when the account name is already taken
  • Enable client-side specification between registering / logging-in

Items

  • Chain item prototypes together

Entities

  • Chain entity prototypes together

Inventory

  • 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.

World

  • 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.

Pets

  • There exist wild mobs.

Graphics

  • 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.

Sounds

  • 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.

Networking

  • 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

Ideas

  • 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.

Notes

About

Toy 2D Game/Engine

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages