Giter Club home page Giter Club logo

cave_lords's Introduction

RSpec

Welcome to Cave Lords!

Orky

This is a community learning project for game dev in Ruby. We'll be using DragonRuby, lots of POROs, and doing TDD with RSpec. I'm a complete n00b at game dev, so if nothing else, you'll get to see me struggle live! ;)

What Kind of Game is This?

The game will attempt to be a top down, sprite-based, deep colony sim (like Dwarf Fortress, Rimworld, Prison Architect, etc.) except we'll be the "bad guys" in this one! Our citizens will be orcs/goblins/somekindanasties instead of those weirdo hooman creatures (because that's just boring)!

Initially, I'm planning to divide the code into two major parts: procedural world generation and game play. No idea how to do either, so we'll learn together!

But Chris, WHY are you doing this?

  1. Because game dev is a very different way of thinking from web dev and this will stretch the programming muscles
  2. Because I'm a big gamer and I've always wanted to understand better how this stuff works.
  3. Because it seemed like folks were interested in this, so it should make for an entertaining show.
  4. Because I keep wanting to play this game, but nobody's made it yet! So we will!
  5. Because I want to, so there!

Concepts we'll dig into (not exhaustive)

  • game development (duh!)
  • learn new Ruby programming paradigms and patterns (otuside of web apps)
  • observer patterns
  • state machines
  • array/hash wizardry
  • loop efficiencies (games are loops within loops within loops. Efficiency is super important!)
  • efficient in-memory data structures
  • serializing/deserializing efficiently (game save/load)
  • learning how to test game operation

How Do I Run This Locally?

  1. clone the repo
  2. cd into the project root
  3. ./dragonruby
  4. have fun!

Chris, this is awesome! I want to play too! How?

There are lots of ways to contribute to this project! And most of them don't cost a thing! Here are a few:

  • test the game and create bug tickets if you break something!
  • suggest improvements to the game or the code. Throw an enhancement ticket in!
  • pick a ticket and fix it with a PR you freakin' genius! (make sure you branch from "develop")
  • join me on the live stream on YouTube or Twitch every Tuesday at 3pm EST and be part of the discussion! Snarky comments, sarcasm and Dad Jokes are welcome!
  • Invite your friends to come with you!
  • Tweet about what awesome, fun times you have hanging out with us so other people will know!
  • join me on Discord and hang out in the cave-lords-pond!
  • follow me on Twitter cause it makes me feel loved!
  • subscribe on YouTube cause it makes me feel loved!
  • follow me on Twitch cause it makes me feel...wait a tick, I sense a pattern here!

Participation DOs and DON'Ts

  • DO be vocal (not rude) about ideas! All ideas are good ideas. Not ALL ideas can be included, but every idea will teach us something!
  • DO submit tickets if you find/notice bugs, or have ideas for improvements or features!
  • DO make a quick scan to see if your bug/idea has already been ticketed
  • DO feel free to pick a ticket and give a PR a shot, you awesome coder you! (if you're a new programmer, try this search to find good first PRs)
  • DO write RSpec tests for your PRs! PRs must have passing RSpec proofs if at all possible. If you're not sure how to test something, hop in the Discord and ask. We'll help!
  • DO try to give newer devs a chance to work on issues labelled "good first issue"
  • DO think hard about single responsibility and separation of concerns. These things are important to keep game code clean and understandable. It can quickly turn nasty if these things aren't front-of-mind!
  • DO review others' PRs to learn and share your insights! (I only have one brain and limited time so I'll need some community backup!)
  • DO feel free to fork this repo and get as far ahead of the show as you like (you do you baby)! Just make sure to read the license section below so you don't do something naughty!
  • DON'T get ahead of the show in the PRs. Only work on PRs that are relevent to the current state of the game and things we've talked about on the show. Otherwise, I'll get very confused.
  • DON'T write spaghetti code! It's full of carbs! And I'm on keto!
  • DON'T sell, package or redistribute this code. It's other people's work, given to the community freely. Taking advantage of that is a dick move. (though using concepts and learnings from this to write your own game is HIGHLY encouraged! I'll want to play it!)

Where can I find you if I want to hang with the cool kids?

You're so sweet! Here are the places I hang out the most:

Licensing

This repository and it's code will be governed by the RSALV2 license agreement. (Thanks @mediafinger for the suggestion!)

Please read the license, but basically, what I'm trying to accomplish is:

  • you can use this code to learn from, contribute to, and spread knowledge (that's the whole point of this project)
  • you can't sell it or make money from it.

I personally promise: If this work DOES ever get monitized as a product in some way (like for some reason people buy it on itch.io or something), the TOTALITY of any monitary gains will be donated, in full, to reputable charities that serve disadvantaged and/or sick children.

cave_lords's People

Contributors

terrainoob avatar leviongit avatar

Stargazers

Leon Vogt avatar  avatar Nathaniel Watts avatar  avatar Cameron Gose avatar  avatar Josh Fike avatar zzJZzz avatar Edwin J Fernandez avatar Josh Powell avatar Igor Zubkov avatar Marco Roth avatar Rafael de Paula Barbosa avatar Collin Jilbert avatar  avatar Drew Bragg avatar

Watchers

 avatar James Cloos avatar Cameron Gose avatar

Forkers

leviongit kbrock

cave_lords's Issues

Make perlin_noise.rb shuffle run in both mruby and ruby 2.7

currently, the shuffle call in this line:

@p = (0...([@width, @height].max)).to_a.shuffle(random: Random.new(seed)) * 2

has to be changed to

@p = (0...([@width, @height].max)).to_a.shuffle(Random.new(seed)) * 2

to run in mruby.

We need an implementation that can run in both environments. Shuffling the array quickly is necessary but how we accomplish that is open to suggestions.

Create Pawn People

Need to create a pawn class that will spawn the colonists and contain their stats

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.