Poorguelike (temporary name, accepting ideas)

Related tags

Games poorguelike
Overview

poorguelike (temporary name, accepting ideas)

game gif

This is my first (serious) attempt at both:

  • Making a game
  • Using Rust

I'm trying to use the least amount of dependencies possible, so for now the only lib I'm depending on is raylib via raylib-rs.

For art is using this great Kenney tileset (I'm not an artist, but I'll probably expand it further if I need more stuff): https://www.kenney.nl/assets/bit-pack

Installation

Make sure you've got rust stuff installed, CMake (on OSX: brew install cmake) and then:

git clone https://github.com/adoroburrito/poorguelike
cd poorguelike
cargo run

Tested on OSX, but should work fine on Linux. I'm not sure if Raylib works on Windows, it probably does but I haven't tested.

Commands

Pressing any button will trigger a game state update (later I'll make it so that only gameplay actions do that, and not HUD or other stuff, I hate dying when I'm messing around in some obscure menu in a game)

Movement is bound to H, J, K and L (for now)

Motivation

I get bored out of my mind by practicing leetcode/learning algorithm/data structure implementations and advanced theory, so I figured why not try making something a little bit more difficult by applying those concepts to something more tangible that I would actually enjoy coding? So here we are.

I didn't really want to use a big engine or anything since that would hide the complicated things in magic abstractions (although one could argue raylib hides the "drawing pixels/textures to a framebuffer" part, but I'm fine with that part being hidden - at the time I'm writing this it felt very hard to learn the intricacies of drawing pixels to the screen, so I just chose to use something to make that part easier) and I figured, since I want it to be as hard as possible (I will eventualy need to learn how to use those things I need to learn) let's try to do it as "vanilla" as possible.

Also I've been putting off learning Rust for a while, so why not tackle that alongside learning how to make a game? :^)

I chose to do a roguelike because 3d feels very hard to grasp right now, so I'll use this project as a stepping stone to learn 3d game building next!

Idea

I really like the following ideas of roguelikes:

  • A new game (almost) never looks like the previous one
  • Permadeath
  • Complex systems of:
    • Combat
    • Allies
    • Items
    • There are a lot of complex systems on cool roguelikes!
  • Simple graphics (I chose to use tiles here because ascii although charming (for me) is not very approachable if I want to show this to my non-programmer friends that might not have played roguelikes before

Plan

  • Make the game basics work
    • Input
      • Get user input
      • Segregate user input from game actions/actors
      • Trigger state changes/game loop on user action
    • Graphics
      • Draw grid
      • Render text symbols in grid
      • Implement simple movement and collision
      • Figure out how to render tiles
      • Add mouse interaction (for future inspection of tiles)
      • Implement fog of war
    • Map generation
    • Spawns
    • Combat
    • Equipment/Items
  • Learn about advanced architecture/algorithms
    • Pathfinding
    • ECS
    • Figure out how to make rendering efficient (right now I'm using brute force tactics in almost everything)

Contribute

I'm accepting ideas for the game! If you enjoy roguelikes like I do, feel free to open an issue on this repo with a suggestion for the game. If you want to help me make my code less bad, also feel free to open a PR! I'll accept anything that has a good description of what is being refactored and why (if you also teach me something in the process, I'll be forever grateful <3), just make sure it doesn't make the game less fun, harder to manage (code-wise) or it's not related at all.

You might also like...
A temporary repo for ETH connector to be used by EVM

ETH connector for Rainbow bridge Definitions bridgedETH - NEP-141 fungible-token representation of ETH inside Near. nETH - native ETH inside Near EVM.

A CLI tool that allow you to create a temporary new rust project using cargo with already installed dependencies
A CLI tool that allow you to create a temporary new rust project using cargo with already installed dependencies

cargo-temp A CLI tool that allow you to create a new rust project in a temporary directory with already installed dependencies. Install Requires Rust

Automatically deleted async I/O temporary files in Rust

async-tempfile Provides the TempFile struct, an asynchronous wrapper based on tokio::fs for temporary files that will be automatically deleted when th

🦀 Temporary repository for the rewrite of Smoothie in Rust

Warning As with a lot of projects, this one is also a WIP, expect broken code 👍 smoothie-rs Temporary repository hosting the code for Smoothie's futu

Temporary files and directories with UTF-8 paths.

camino-tempfile A secure, cross-platform, temporary file library for Rust with UTF-8 paths. This crate is a wrapper around tempfile that works with th

Simplify temporary email management and interaction, including message retrieval and attachment downloads, using Rust.

Tempmail The Tempmail simplifies temporary email management and interaction, including message retrieval and attachment downloads, using the Rust prog

Toolkit for simple calculations related to Data Comunication and Networks (only available in Spanish temporary)

CDR Toolkit Un toolkit creado para la asignatura Comunicación de Datos y Redes, cursada en la UIB. Es una potente y rápida CLI que ayuda a realizar lo

Temporary elevated access management as a self-hosted service
Temporary elevated access management as a self-hosted service

💻🔐☁️ S A T O U N K I Temporary elevated access management as a self-hosted service Overview Satounki is a self-hosted service which brings visibilit

Temporary repository for Kind2's refactor based on HVM2

Kind2 WIP Kind1 has been developed in JavaScript, which wasn't meant to be a long-term solution, but allowed us to explore self-types. Recently, we st

Find files (ff) by name, fast!
Find files (ff) by name, fast!

Find Files (ff) Find Files (ff) utility recursively searches the files whose names match the specified RegExp pattern in the provided directory (defau

ZeroNS: a name service centered around the ZeroTier Central API

ZeroNS: a name service centered around the ZeroTier Central API ZeroNS provides names that are a part of ZeroTier Central's configured networks; once

The official DAW application of the RustyDAW project (name in progress)
The official DAW application of the RustyDAW project (name in progress)

rusty-daw-application The official DAW application of the RustyDAW project (name in progress) Take a look at the design doc. Join our community at the

A small tool to clone git repositories to a standard location, organised by domain name and path.

A small tool to clone git repositories to a standard location, organised by domain name and path. Runs on BSD, Linux, macOS, Windows, and more.

Combine simple building blocks to create smooth cameras: first-person, chase, orbit, look-at, you name it!

🎥 dolly Combine simple building blocks to create smooth cameras: first-person, chase, orbit, look-at, you name it! Camera rigs made with dolly are en

Push BYCEPS ticket sale stats to Discord (as channel name)

Push BYCEPS Ticket Sale Stats to Discord A tool to fetch ticket sale stats for a specific LAN party from a BYCEPS installation and show that as the na

Implementation of algorithms for Domain Name System (DNS) Cookies construction

DNS Cookie RFC7873 left the construction of Server Cookies to the discretion of the DNS Server (implementer) which has resulted in a gallimaufry of di

Smart Contract for Terra Name Service

TERRA NAME SERVICE CONTRACTS Terra Name Service is to create easy-to-remember names for your Terra address like ‘dokwon.ust’ instead of ‘terra1...whez

🧠 A command-line utility for switching git branches more easily. Switch branches interactively or use a fuzzy search to find that long-forgotten branch name.
🧠 A command-line utility for switching git branches more easily. Switch branches interactively or use a fuzzy search to find that long-forgotten branch name.

git-smart-checkout A git command extension for switching git branches more efficiently. About Interactively switch branches or fuzzy search for that f

You can name anonymous Future from async fn without dyn or Box!

rename-future You can name anonymous Future from async fn without dyn or Box! PLEASE READ THIS THIS PROJECT NOT YET WELL TESTED! DON'T USE THIS IN PRO

Owner
André Nogueira
Software developer
André Nogueira
WIP: A program for switching Dygma layouts based on window name or exe name.

Dygma Layer Switcher Config On the first run of dygma-layer-switcher the config.yml will be generated. --- # Toggle logging. logging: false # Port of

Matthew Wilding 5 Nov 11, 2023
A hackable, minimal, fast TUI file explorer, stealing ideas from nnn and fzf.

xplr A hackable, minimal, fast TUI file explorer, stealing ideas from nnn and fzf. [Quickstart] [Features] [Plugins] [Documentation] [Upgrade Guide] [

Arijit Basu 2.6k Jan 1, 2023
Extending mincaml with "fun" PL ideas.

wowcaml This is a fork of this Rust implementation of mincaml - a compiler for a call-by-value ML-like language, updated to recent versions of craneli

McCoy R. Becker 4 Jul 14, 2022
Algebraic structures, higher-kinded types and other category theory bad ideas

Algar Algebric structures, higher-kinded types and other category theory bad ideas. Yes, you'll have generalized functors, applicatives, monads, trave

Stefano Candori 3 Jan 31, 2023
A mobile application platform for tertiary students to communicate, collaborate and share ideas with each other

Qreeket (pronounced "cricket") A mobile application platform for tertiary students to communicate, collaborate and share ideas with each other. As the

Quabynah Bilson Jr. 3 May 15, 2023
Ideas => Creations, a multi-language CMS(Content Management System) based on Rust Web stacks, with long-term upgrade and maintenance.

Ideas => Creations 中文 RustHub: Rust ideas yesterday, shining creations today! This repository holds source code used to run https://rusthub.org, it's

rusthub.org 4 May 9, 2023
A hobby operating system written in Zig & C that reimagines classic UNIX ideas for modern technology

zorroOS is a hobby operating system written in Zig, currently targeting x86_64 PCs. Building Building zorroOS is simple. First, ensure that you have t

TalonFox 34 Jul 5, 2023
Temporary directory management for Rust

tempdir A Rust library for creating a temporary directory and deleting its entire contents when the directory is dropped. Documentation Deprecation No

null 132 Jan 7, 2023
Temporary file library for rust

tempfile A secure, cross-platform, temporary file library for Rust. In addition to creating temporary files, this library also allows users to securel

Steven Allen 782 Dec 27, 2022
Temporary edit external crates that your project depends on

rhack You want to quickly put a sneaky macro kind of like dbg! into external crates to find out how some internal data structure works? If so rhack is

Ryo Nakao 119 Nov 3, 2022