📢 Project Notice: This repository contains the public development of the official Demo for Shapewars: The Circular Resistance. The full version of the game is planned for a commercial release on Steam and Itch.io.
📄 License: All rights reserved. The source code is public solely for educational, portfolio, and personal evaluation purposes. Commercial redistribution, creating copycat versions, or selling the code is strictly prohibited. (See LICENSE for details).
This is a fast-paced rogue-lite shoot 'em up built with Odin and Raylib. The game is inspired by Vampire Survivors, but instead of automatic attacking, the player has full control over shooting and unique abilities.
This game is the first entry into the Shapewars Saga.
The tyrannical Rectangle Empire is expanding and seeking absolute world domination over the entire universe. In The Circular Resistance, you take control of a young circle fighting back against the overwhelming rectangular forces. Will you roll with the punches, or will you be cornered?
- Active Combat: Manual aiming and shooting.
- Abilities: Different abilities that can be unlocked while playing.
- Progression: Between runs you can upgrade your weapon or ability.
- Horde Survival: Face waves of enemies with different behaviors.
- Bosses: In addition to enemies, there are also different bosses.
- Built from Scratch: Leveraging Odin and Raylib the lightweight way.
This repository marks two major milestones for me:
- Developing my very first video game from scratch.
- My introduction to Odin as my first systems programming language.
I am using this project to dive deep into game loops, collision detection, and memory management.
- First touch with shader programming (GLSL).
The project is built around a classic Core Game Loop. To keep the codebase modular and maintainable, the gameplay logic is strictly separated into three main phases executed every frame:
- Check Collisions: Evaluates physics and interactions between entities (e.g., Circles and Rectangles, interaction with NPCs and UI elements, projectiles hitting walls or targets).
- Update Game: Updates positions, timers, enemy behaviors, player inputs, and state changes based on delta time.
- Draw Game: Renders the current frame to the screen using Raylib's hardware-accelerated drawing functions.
Please note that this is a learning project. My primary focus is understanding the core mechanics of game development, getting comfortable with the Odin programming language and ecosystem, and creating my first video game.
- Function over Perfection: The priority is a working, fun game. The code is not always perfectly optimized or strictly elegant yet.
- Expanding my Paradigm Horizon: Coming from an Object-Oriented background (mainly C#), one of my main challenges and goals is learning how to think in a procedural, data-oriented way. Instead of forcing classic OOP design patterns (like the Strategy, Singleton, Decorator, etc.) where they don't fit, I want to expand my horizon and learn how to solve these architectural problems using idiomatic Odin features like composition and function pointers.
Feedback, tips, and constructive code reviews/advice are always highly appreciated!
Since the game is actively in development, there are no pre-compiled releases yet. If you want to try it out, you can easily run it from the source code.
- You need to have the Odin Compiler installed and added to your system's PATH.
- If you need help setting up Odin, check out this excellent Video Guide by Karl Zylinski
- Raylib is bundled via Odin's vendor packages, so no extra setup is required.
Clone this repository:
git clone https://github.com/Kristonen/shapewars-the-circular-resistance.gitNavigate to the source directory:
cd shapewars-the-circular-resistance/sourceRun the game using the Odin compiler:
odin run .- Move: W A S D
- Aim: Mouse
- Shoot: Left Mouse Button
- Special Ability: Spacebar
- Interaction: E
- Pause: Escape