Awesome
Gamercade Console Workspace
The ultimate WASM powered Fantasy Console.
Learn more about Gamercade.
Features
- Simple and Powerful - 2d Rendering, Input, and Audio all included.
- Language Agnostic - Write in your favorite language and compile to WebAssembly.
- Tool Agnostic - Build assets using your favorite tools. Bundle them with the Editor.
- Seamless Multiplayer - Built-in p2p rollback lets you get multiplayer "for free."
- Collaboration Friendly - Save work-in-progress as JSON, for easy collaboration.
- Free and Open Source - Free to build, use, and play, forever.
Motivation
Gamercade aims to solve the "I'm a small team/solo developer and I want to make a multiplayer game" problem. In order to have a successful game, these small projects need to have multiple successes:
- Building a project which correctly handles the complexities of online multiplayer.
- Marketing to a big enough playerbase to shorten wait times.
- Setting up server hosting, and the associated costs to keep them running well after release.
- Making a game which is actually fun to play.
With Gamercade, the first 3 requirements are removed. This creates a more modern development environment which lets game developers do what they do best: Make exciting games!
Project Goals
Every feature and function of Gamercade and its related tools are built with the goals of achieving the following:
- Effortless Multiplayer - The main priority is developing a top-notch multiplayer experience for both players and developers. This means providing an easy-to-use networking solution for developers, and also one which is robust and high performant.
- Empower Creatives - Gamercade is a platform for all kinds of people, of different backgrounds and experience levels. Programmers, designers, artists, and are all welcome. Gamercade should empower creators and allow them to always do their best work.
- "Neo Retro" Game Development - Project scoping is important. Retro consoles are cool, but also constrained and complex. Gamercade provides the balance between retro and modern development. Games are limited by content, but creativity is unlimited.
Related Projects:
- gamercade_site - Project landing page and documentation.
- Bindings and Example Projects
- rust_template - Rust example project, making use of the
gamercade_rs
helper crate. - nelua-gamercade - Bindings and example game in the Nelua programming language. By Andre-LA.
- zig-template - Bindings and starter project for the Zig programming language.
- gamercade-as - Bindings and starter project for the AssemblyScript programming language. By NEARworld.
- Gamercade.c3 - Bindings and starter project for the C3 programming language. By Kenta.
- rust_template - Rust example project, making use of the
Community
Currently, the community is mostly active on Discord.
FAQ
We recommend reading the FAQ on our home page.
For Developers
Follow these steps to get your first game project up and running. See the included resources for more information. Also consider making yourself comfortable with the Api Reference.
Building, Bundling, and Running A Game
Building, bundling, and running games requires a few different steps, which all depend on eachother. Below are steps on how to accomplish this using the editor through the GUI. Alternatively, a more efficient way can be done via the gccl
tool. See the gamercade_cli
folder for more information about how to invoke and use gccl
.
Building A Game (in Rust) - How to build a .wasm file
A template example project is available at: rust_template
- If you don't already have it, install the
wasm target
by runningrustup target add wasm32-unknown-unknown
. - Write your game logic following the spec mentioned.
- Build the game as a
.wasm
library. This can be done withcargo build --target=wasm32-unknown-unknown
. - The file will be output in
./target/wasm32-unknown-unknown/debug/project_name.wasm
.
Bundling A Game with the Editor - How to create a .gcrom file
- With your game
.wasm
already built from the previous steps... - Run the editor. This can be done from source via
cargo run --bin editor
- On the File menu, click "Select game .wasm." Find and locate your previously exported
.wasm
file. - On the File menu, click "Export game" and export.
- Save the
.gcrom
file in the location of your choice.
Running a Game with the Console - How to run a .gcrom file
- With a
.gcrom
available to play from the previous steps... - Run the console. This can be done from source via
cargo run --bin console
- The console will run with the Main Menu already opened. You can open and close it with the
Spacebar
. - Press the "Select Game" button to open the file dialog.
- Select the
.gcrom
file you wish to run, and click open. - Launch the game by pressing the "Launch Game" button.
Running a Game as raw .wasm
If you are not using any custom assets, or are okay with the default color palettes, you can also run the raw .wasm
files directly from the console. This can be done by following the steps outlined in "Building a Game" section above, or whatever workflow your programming language of choice requires for outputting a .wasm
binary.
For Contributors
This is the main workspace crate. Consider viewing the inner crates for more information about the project. Each of them has their own README.
gamercade_app
- For the user-facing platform app.gamercade_audio
- For all gamercade audio related things.gamercade_cli
- Thegccl
tools for development.gamercade_console
- The console used to run & play games.gamercade_core
- Core shared types and functionality.gamercade_editor
- The editor used to bundle WASM code with assets.gamercade_fs
- File System management, loading, saving etc.gamercade_interface
- Interface definitions between app and platform.gamercade_rs
- A safe wrapper around the raw Api.gamercade_sound_engine
- Closely related to gamercade_audio, responsible for actual sound output.gamercade_tools
- Useful assorted tools.
Minimum Supported Rust Version
Gamercade runs on Stable Rust 1.66 or later.
Requirements
- When building from source, you may need to install
protoc
https://protobuf.dev/
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.