Grumpy Visitors 2D Rust game for code reference and learning

Grumpy Visitors is a top-down 2D action arcade game

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:

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:


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)


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


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:


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

Collection of the latest Issues



Comment Icon1

I wanted to give this project a try, but the client throws errors in the build. It seems like I need to install some libraries, would be nice if you could provide a full list of dependencies.



Comment Icon0


GET /statistics


  • player
    • type: string
    • required: false


  • If player parameter is present, return top 10 of all players ordered by score, 4 players before the best player score
  • If player parameter is absent, return top 20 of all players ordered by score


POST /statistics


  • player
    • type: string
    • required: true
  • score
    • type: number
    • required: true


  • If player isn't present in the DB, create a new record
  • If player is already present in the DB and the submitted score is higher, update the score


good first issue
Comment Icon0

There are some systems that are good candidates for introducing a separate SystemData struct for them: such systems require a lot of resources and pass them around their helper functions (making those functions' argument list really huge).

Some examples of bad systems: bins/client/src/ecs/systems/ bins/client/src/ecs/systems/

Some examples of good systems: libs/game/src/ecs/systems/monster/

Note that you shouldn't refactor all the systems in one pull request. As it's a "good first issue", just look through the systems and pick the one which you think will be feasible for you to tackle. But nothing stops you to make more than one PR, of course. :)


Find the latest versions by id

v0.2.4 - Oct 11, 2020

Upgraded to Amethyst 0.15.3

v0.2.3 - Aug 02, 2020

Fixed the rare blank screen bug for some of Intel GPU users. Thanks to @sunwukonga for finding the fix

v0.2.2 - Jul 27, 2020

Special thanks to @henryksloan for fixing the most of the issues for this release

  • Improved the algorithm of looking for resources folder (#54)
  • Made configuration of window action bindings possible (#55)
  • Fixed a rare bug of the game starting without a player spawned in multiplayer (#56)
  • Fixed all the errors reported by Vulkan validation layers (#57)

v0.2.1 - May 31, 2020

Fixed default menu screen to MainMenu

v0.2.0 - May 31, 2020


  • A lot of polishing of multiplayer (#36)
  • Fixed some bugs (#40, #41, #42, #43)

Visuals and UI

  • Mages are now painted into different colours in multiplayer (#26)
  • New spell missle graphics, now with shaders and particles (#27)
  • Reworked UI, added modal windows and screen transitions (#31, #36)
  • Death animations (#35)
  • Toggleable healthbars for monsters (#38)
  • Network state imgui window (also #38)


  • Toggleable profiler (#39)

Information - Updated Jan 25, 2022

Stars: 80
Forks: 14
Issues: 6

Arsenal 2D retro Rust Game engine

Katharos Technology is focused on producing our first game prototype, bevy game engine and our own Katharos...

Arsenal 2D retro Rust Game engine

Rust Game Remake

Remake in rust of a game I made during the here

Rust Game Remake

A 3d rust game using OpenGl and Emscripten to build for the wasm32-unknown-emscripten

It can also run standalone, developed and tested on Linux but will

A 3d rust game using OpenGl and Emscripten to build for the wasm32-unknown-emscripten

Rust Game of Life

This is a simulator of Conway's Game of Life in Rust, using SDL2 to render the game graphically

Rust Game of Life

INOX - Rust Game engine integrated in Blender

It's a Game Engine written in Rust with some bindings for external libs and with Blender as editor

INOX - Rust Game engine integrated in Blender

Rust GameBoy Advanced Emulator

Building this project on linux requires cmake and gtk3

Rust GameBoy Advanced Emulator

A Rust Game Engine

In an effort to learn the Rust language (because I am a nut), I am building a game engine

A Rust Game Engine

A Rust GameBoy emulator!

TetrisZelda: Link's Awakening

A Rust GameBoy emulator!

Another Rust game engine

It's started as a rust version of the tutorial from

Another Rust game engine
Facebook Instagram Twitter GitHub Dribbble