Skip to content
This repository has been archived by the owner on Jun 7, 2022. It is now read-only.
/ grumpy_visitors Public archive

πŸ§™β€β™‚οΈπŸ§™β€β™€οΈ A prototype of a top-down EvilInvasion-like 2D arcade/action (with co-op!)

License

Notifications You must be signed in to change notification settings

amethyst/grumpy_visitors

Repository files navigation

Grumpy Visitors

This project is no longer being developed.

Grumpy Visitors is a top-down 2D action arcade game. It's written in Rust and running on Amethyst game engine.

This project is highly inspired by Evil Invasion game. Unfortunately its official site is no longer available, as it's quite old and not really popular, but here is some recorded demo gameplay to get the idea: https://youtu.be/bWpWJzb9JdE.

Grumpy Visitors screenshot

Planned gameplay features:

  • Campaign and survival modes
  • Character development system with persistent progress between levels
  • Co-op multiplayer (up to 4? players)

These are more like high-level goals for me, as I don't have a clearly formulated vision or design for this game. Everything's still just in my head and therefore almost anything is a subject to change.

Fetching Game Assets

Grumpy Visitors relies on git-lfs to fetch game assets (images, etc.) See git-lfs for installation instructions if you don't already have it on your system. Then:

git lfs install # if this is your first time running git lfs
git lfs pull

Building

# You can append --release flag to every command for building a better performing binary.
cargo build -p gv_server # if you want to host a server for multiplayer
cargo -Z features=itarget build -p gv_client

Please note that specifying just a binary without a package (cargo build --bin gv_server) won't work. Cargo tries to merge all the features of common dependencies among all the members of workspace, which leads the build process to fail. Feature selection in workspace depends on the set of packages compiled (cargo#4463)

Supported platforms:

  • Windows 10 (Vulkan)
  • Linux (Vulkan)
  • MacOS (Metal)

Current state

This project is in its early stage of development. There are only some very basic features implemented:

  • Multiplayer
  • Casting a spell
  • Spawning monsters
  • Monster AI (actually just randomly walking around the map and starting to chase a player if they're close enough)
  • Character moving
  • Sprite animations
  • Custom shaders (health HUD, missiles, repainting mage sprites in MP)
  • Menu states and transitions

Roadmap to 0.3

  • New spell
  • New monster type
  • Statistics server (#37)
  • Migration to Legion ECS (#47)
  • WebSocket and WASM support (#46, tbd)
  • Quality of life improvements (#44, #45)

Things I'd like to fix some day

  • The multiplayer game will eventually crash because of ExceededMaxPacketSize error
  • In multiplayer missiles are a little bit clunky when launching and sometimes desync
  • Current approach to run systems several times in 1 frame sucks (ActionSystem, I'm looking at you)

License

The code is shared under the MIT license.

All the assets are shared under the CC BY-NC 4.0 license (see assets/LICENSE and resources/assets/LICENSE).

Contributing

Every contribution is really welcome! Please feel free to submit pull requests and create your own issues. I'll also try to be open to new ideas as much as I can, though I can't make a solid promise about that... Author's vision, you know. :)

This project's scope seems to be small, but the codebase may scare you. I can't say I've made architecture decisions to be referentially good, and it's already easy to get lost in the code.

But nevertheless don't hesitate to take a look at "good first issues", so you can get a grasp of it and bring something good to this game:

GitHub pull requests

Credits

Special thanks to

  • Klaudia Jankowska for the awesome assets
  • The great Amethyst community for being extremely welcoming and helpful
  • Erlend for noticing this game, giving me motivation and useful advice