Project

gloomhaven

0.0
No commit activity in last 3 years
No release in over 3 years
Ruby gem to manage Gloomhaven attack modifier decks
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.0
~> 13.0
~> 3.0
~> 0.18.4
 Project Readme

Gem Version

Gloomhaven

Ruby gem for generating Gloomhaven characters and ability decks.

Installation

Add this line to your application's Gemfile:

gem 'gloomhaven'

And then execute:

$ bundle

Or install it yourself as:

$ gem install gloomhaven

Usage

Basic useage

Deck

Create a Gloomhaven::Deck @deck object to create a standard 20-Gloomhaven::Card modifier deck.

require 'gloomhaven'

@deck = Gloomhaven::Deck.new
=> #<Gloomhaven::Deck>

# shuffle the deck to start
@deck.shuffle!

@deck.cards.count
=> 20

# draw some cards
@deck.draw
=> #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>

# check the deck size, it's decreased
@deck.cards.count
=> 19

# Let's bless and curse the deck
# Note that blessing/cursing a deck will automatically reshuffle the remaining (undrawn) cards.
@deck.bless!
@deck.curse!

# confirm we added two new cards
@deck.cards.count
=> 21

# let's shuffle the deck again and return the first card we drew
@deck.shuffle!

# final count of a shuffled deck w/ 1 bless, 1 curse
@deck.cards.size
=> 22

# and let's look at the cards
@deck.cards.to_a
[
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -2", @attack=-2, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Bless", @attack=0, @crit=true, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Curse", @attack=0, @crit=false, @miss=true, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +2", @attack=2, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Null", @attack=0, @crit=false, @miss=true, @rolling=false, @shuffle=true>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="2x", @attack=0, @crit=true, @miss=false, @rolling=false, @shuffle=true>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>
]

Player

Create a Gloomhaven::Player @player object. Includes attribute tracking for player#gold, player#xp.

@player = Gloomhaven::Player.new(character_class: 'Mindthief', name: 'Ratteo')
=> #<Gloomhaven::Player @name="Ratteo" @gold=0 @xp=0>

# check / set gold
@player.gold
=> 0

@player.gold = 10
=> 10

@player.gold
=> 10

# Note: can do the same attr setting w/ @player.xp

New players have a default, 20-card attack modifier @deck object. @players can also add valid perks of class Gloomhaven::Perk to directly modify their deck.

@player.deck
=> #<Gloomhaven::Deck>

# Basic starting attack modifier deck comes with each player
@player.deck.cards.count
=> 20

# Default characters don't have any perks
@player.perks
=> []

# If we add perks, it will directly modify the deck
# Let's remove two -1 cards
@player.add_perk!(Gloomhaven::Perk.new('remove_two_minus_one_cards'))
 => [#<Gloomhaven::Perk:0x007fc6918989b0 @key="remove_two_minus_one_cards", @description="Remove two -1 cards", @adds=[], @removes=[{"card_name"=>"Attack -1", "count"=>2}]>] 

# And confirm the perks
@player.perks
=> [#<Gloomhaven::Perk:0x007fc6918989b0 @key="remove_two_minus_one_cards", @description="Remove two -1 cards", @adds=[], @removes=[{"card_name"=>"Attack -1", "count"=>2}]>] 

# Finally, the deck should have two less cards because of the perk.
@player.deck.cards.count
=> 18

# Perfect. Let's just double check the cards directly
p @player.deck.cards.to_a
[
  #<Gloomhaven::Card @name="2x", @attack=0, @crit=true, @miss=false, @rolling=false, @shuffle=true>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +0", @attack=0, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +1", @attack=1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack +2", @attack=2, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>, # <-- Note we only have 3x -1 cards now
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -1", @attack=-1, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Attack -2", @attack=-2, @crit=false, @miss=false, @rolling=false, @shuffle=false>,
  #<Gloomhaven::Card @name="Null", @attack=0, @crit=false, @miss=true, @rolling=false, @shuffle=true>
]