Giter Club home page Giter Club logo

agamari's Introduction

Agamari〔挙鞠〕

Live Demo license

Physics-based 3D Multiplayer Browser Game

Inspired by Katamari Damacy and Agar.io, this is Agamari, an online multiplayer game where players compete to roll up the largest ball on a tiny planet. Along the way they might roll up each other, or even the moon.

Live Demo

A playable online build of Agamari can be found here.

Gameplay Mechanics

Agamari is designed to be a simple-to-understand game that relies on intuitive physics for its gameplay mechanics. Players join each game as small spherical rocks with one purpose for existence: to roll up everything they can on the planet. Rocks are able to only pick up objects smaller than themselves. However, each object added increases a rock's size, allowing for larger and larger things to be rolled up as the game progresses. Items rolled up affect the mass and shape of a rock, bringing challenges and strategy to picking up different objects. Eventually, players may encounter other players, and if they are larger, can roll them up as well.

Architecture

Agamari is built on Node.js using Socket.IO for client-server interaction, Three.js for 3D graphics rendering, Cannon.js for the physics engine, React for HTML rendering, and Redux for both client and server app state and game state management.

alt text

Handling of the game logic is distributed between the client and the server. Clients run their own physics calculations to compute their next position and orientation, while the server manages and modifies the master game state according to game logic and client events such as collisions with objects or other players.

How to Play

  • Use the arrow keys (or WASD) to move your rock.
  • Roll over objects or players smaller than your rock to pick them up and grow.
  • Avoid being rolled up by larger players.
  • Hold & release the spacebar while holding down an arrow key to launch yourself in that direction.

More Tips

  • Your volume determines what you can or can not roll up. You can only roll up objects or players with less volume than yourself.
  • Objects spawn randomly across the planet. They are usually scaled to the size of the smaller players, although occasionally large spawns occur.
  • Players farther ahead in volume gain volume from objects at a slower rate. To keep their lead, hunting other players is a more efficient tactic.
  • The larger you are, the heavier and more unwieldly you become, making movement more cumbersome. Be aware of what and how you pick up different objects and players.

Running locally

The simplest way to have Agamari running locally is to have Docker. Simply do

docker compose up

and then access the game at http://localhost:8000.

Local development

To do local development, you can run Agamari on your computer without Docker, but you will need Node.js with NPM (tested on 20.5).

Once you have Node.js with NPM installed, install the game's dependencies with the following command:

npm install

Then start the server with the following command:

npm run dev

The game will then be accessible at http://localhost:8000.

Help

Create an issue if you need help.

Credits

Thanks to p0ss and LokiF for the "eating" sounds.

agamari's People

Contributors

kentywang avatar sandes93 avatar tomjschuster avatar winedarksea1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

agamari's Issues

new changes in db branch causing issues

  • chat message sometimes show up three times
  • being eaten sometimes crashes the game for client
  • sometimes no one can rejoin a room
  • player moves too fast and bounces off to orbit
  • console shows cannot read property 'nickname' of undefined

I will try and find how to reproduce these issues, but they seem to be introduced with the db changes

Players eaten sometimes respawn without size reset

I looked over some recorded footage and noticed that sometimes players eaten would respawn at the same size and volume, catapulting them into the air when they first touch the ground. This indicates that in some instances, the reset of players' size and volume is not being executed on being eaten.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.