Compare commits
17 Commits
7ae9f66a1c
...
main
Author | SHA1 | Date | |
---|---|---|---|
417885eeb7
|
|||
7380b4df57
|
|||
341be68005 | |||
d017c53b81 | |||
870511a678 | |||
ff8f27f850 | |||
f7d40ec831 | |||
ad6200f7cb | |||
2698a9df10
|
|||
9c1e9fc00c
|
|||
1a948f1d9c | |||
871bc93220 | |||
68f84d33c6 | |||
68cc57cc27 | |||
624109beda | |||
4debce853b
|
|||
2aa09e4fe9
|
@@ -1,56 +0,0 @@
|
||||
- name: Opener
|
||||
volume: p
|
||||
effect: +5 {a} if the first song in your set.
|
||||
- name: "Entr'acte"
|
||||
volume: p
|
||||
effect: +3 {a} if not the first or last song in your set.
|
||||
- name: Reprise
|
||||
volume: f
|
||||
effect: +3 {a} if in the second half in your set.
|
||||
- name: Breakup Song
|
||||
volume: ff
|
||||
effect: +3 {a}. +2 additional {a} if any band has played a <b>Love Song</b>
|
||||
blurb: You may hate yourself for loving it, but you oughta know that these songs pack a punch.
|
||||
- name: Love Song
|
||||
volume: mp
|
||||
effect: +2 {a}. +3 additional {a} if Love Song is the loudest song in your set.
|
||||
blurb: I forgot how this goes, but it's all coming back to me now.
|
||||
- name: Power Ballad
|
||||
volume: ff
|
||||
effect: +3 {a}
|
||||
- name: Call and Response
|
||||
volume: f
|
||||
effect: +2 {a} for each song before this one.
|
||||
- name: Heavy Hitter
|
||||
volume: fff
|
||||
effect: +4 {a}.
|
||||
- name: Protest Song
|
||||
volume: ff
|
||||
effect: +1 {a}. +3 {a} if the loudest song this round.
|
||||
- name: Signature Song
|
||||
volume: f
|
||||
effect: +5 {a}.
|
||||
- name: Buildup
|
||||
volume: pp
|
||||
effect: Add +2 {a} to the next song in your set.
|
||||
- name: Breakdown
|
||||
volume: mf
|
||||
effect: +2 {a} for each quieter song played this round.
|
||||
- name: Sleazy
|
||||
volume: mf
|
||||
effect: +4 {a} if not the loudest song this round.
|
||||
- name: Showstopper
|
||||
volume: fff
|
||||
effect: +5 {a} if the last song in your set.
|
||||
- name: Remix
|
||||
volume: f
|
||||
effect: Repeat the effect of the song immediately before this in your set.
|
||||
- name: Acoustic Cover
|
||||
volume: mp
|
||||
effect: Copy the effect of a song in another band's setlist.
|
||||
- name: Heavy Cover
|
||||
volume: f
|
||||
effect: Copy the effect of a song in another band's setlist.
|
||||
- name: Encore
|
||||
volume: mf
|
||||
effect: +5 {a} if the last song in your set.
|
@@ -1,36 +0,0 @@
|
||||
require 'squib'
|
||||
require 'game_icons'
|
||||
|
||||
AUDIENCE = GameIcons.get('delapouite/person').
|
||||
recolor(fg: 'black', bg: 'white', fg_opacity: 1.0, bg_opacity: 0.0).
|
||||
string
|
||||
MUSIC = GameIcons.get('delapouite/musical-score').
|
||||
recolor(fg: 'black', bg: 'white', fg_opacity: 1.0, bg_opacity: 0.0).
|
||||
string
|
||||
|
||||
data = Squib.yaml file: 'data.yml'
|
||||
|
||||
Squib::Deck.new(cards: 18) do
|
||||
use_layout file: 'economy.yml'
|
||||
use_layout file: 'layout.yml'
|
||||
background color: 'white'
|
||||
cut_zone
|
||||
safe_zone
|
||||
|
||||
text layout: :title, str: data.name
|
||||
|
||||
svg layout: :art, data: MUSIC
|
||||
|
||||
rect layout: :description
|
||||
text layout: :description, str: data.effect.zip(data.blurb).map { |e, b|
|
||||
"#{e}#{b ? "\n<i>#{b}</i>" : nil}"
|
||||
} do |embed|
|
||||
embed.svg key: '{a}', width: 32, height: 32, data: AUDIENCE
|
||||
end
|
||||
text layout: :type, markup: true, str: data.volume.map { |v| "<b><i>#{v}</i></b>" }
|
||||
|
||||
save format: :png
|
||||
save_sheet prefix: "sheet",
|
||||
columns: 5, rows: 4, trim: '0.125in', count_format: ''
|
||||
|
||||
end
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 835 KiB After Width: | Height: | Size: 835 KiB |
@@ -14,7 +14,7 @@ Draw the most fans by performing the best in each time block
|
||||
|
||||
Phase 1: Four cards are handed to each player. Players draft one card and pass the rest on until all cards are chosen.
|
||||
Phase 2: Players arrange their songs face-down in the order they'll perform in
|
||||
Phase 3: All players flip cards face-up. They resolve in order of Volume from largest to smallest
|
||||
Phase 3: All players flip cards face-up. They resolve in order of Volume from loudest to quietest
|
||||
|
||||
# Scoring
|
||||
|
BIN
setlist/back.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
19
setlist/data.csv
Normal file
@@ -0,0 +1,19 @@
|
||||
name,volume,traits,audience,effect,blurb
|
||||
Crazy Little Thing Called Love,f,l,2,+2 {A} if the first {l} song in your setlist,
|
||||
War Cry,f,a,2,+1 {A} for each song quieter than this in this time block,
|
||||
Opener,mp,j,0,+3 {A} if the first song in your set,
|
||||
Dirge,ppp,s,0,,
|
||||
Love Ballad,f,l,3,+2 {A} if in the first two songs of your setlist,
|
||||
Rage Against The Man,fff,a,2,+1 {A} for each {a} song in this time block,
|
||||
Everything Is Awesome,mf,j,3,+2 {A} if in the last two songs if your setlist,
|
||||
Tears in the Rain,p,s,2,+3 {A} if this is the quietest song in this time block,
|
||||
Breakup Song,ff,la,3,+3 {A} if another band played a {l} song in this time block,
|
||||
New Relationship,mf,lj,2,+4 {A} if there are no {l} song before this in any band's setlist,
|
||||
Brokenhearted,p,ls,3,+1 {A} if the next song in your setlist is a {l} song,
|
||||
Mixed Messages,ff,aj,2,+3 {A} if this is the loudest song in this time block,
|
||||
Betrayed,f,as,2,+3 {A} if this is immediately following a {j} song in your setlist,
|
||||
Happy To Be Sad,f,js,1,+2 {A} for each {s} song already in your setlist,
|
||||
Indignant Love,f,laj,3,,
|
||||
Unrequited Love,mp,las,3,,
|
||||
Butterflies In The Stomach,mf,ljs,3,,
|
||||
Rampage,fff,ajs,3,,
|
|
70
setlist/deck.rb
Normal file
@@ -0,0 +1,70 @@
|
||||
require 'squib'
|
||||
require 'game_icons'
|
||||
|
||||
module Icons
|
||||
|
||||
def self.getIcon(name, color = 'black')
|
||||
return GameIcons.get(name).
|
||||
recolor(fg: color, bg: 'white', fg_opacity: 1.0, bg_opacity: 0.0).
|
||||
string
|
||||
end
|
||||
|
||||
AUDIENCE = getIcon 'delapouite/person'
|
||||
MUSIC = getIcon 'delapouite/musical-score'
|
||||
|
||||
LOVE = getIcon 'skoll/hearts'
|
||||
ANGER = getIcon 'skoll/fist'
|
||||
JOY = getIcon 'lorc/delighted'
|
||||
SAD = getIcon 'lorc/tear-tracks'
|
||||
end
|
||||
|
||||
VOLUMES = {
|
||||
"ppp" => 1,
|
||||
"pp" => 2,
|
||||
"p" => 3,
|
||||
"mp" => 4,
|
||||
"mf" => 5,
|
||||
"f" => 6,
|
||||
"ff" => 7,
|
||||
"fff" => 8,
|
||||
}
|
||||
|
||||
data = Squib.csv file: 'data.csv'
|
||||
|
||||
Squib::Deck.new(cards: data.nrows) do
|
||||
use_layout file: 'economy.yml'
|
||||
use_layout file: 'layout.yml'
|
||||
background color: 'white'
|
||||
cut_zone
|
||||
safe_zone
|
||||
|
||||
text layout: :title, str: data.name, ellipsize: :autoscale
|
||||
|
||||
# svg layout: :art, data: Icons::MUSIC
|
||||
text layout: :art, align: :center, valign: :middle, str: data.traits do |embed|
|
||||
embed.svg key: 'l', width: 128, height: 128, data: Icons::LOVE
|
||||
embed.svg key: 'a', width: 128, height: 128, data: Icons::ANGER
|
||||
embed.svg key: 'j', width: 128, height: 128, data: Icons::JOY
|
||||
embed.svg key: 's', width: 128, height: 128, data: Icons::SAD
|
||||
end
|
||||
|
||||
rect layout: :description
|
||||
text layout: :description, str: data.effect.zip(data.blurb).map { |e, b|
|
||||
"#{e}#{if b then "\n<i>#{b}</i>" end}"
|
||||
} do |embed|
|
||||
embed.svg key: '{A}', width: 32, height: 32, data: Icons::AUDIENCE
|
||||
embed.svg key: '{l}', width: 32, height: 32, data: Icons::LOVE
|
||||
embed.svg key: '{a}', width: 32, height: 32, data: Icons::ANGER
|
||||
embed.svg key: '{j}', width: 32, height: 32, data: Icons::JOY
|
||||
embed.svg key: '{s}', width: 32, height: 32, data: Icons::SAD
|
||||
end
|
||||
text layout: :volume, markup: true, str: data.volume.map { |v| "<b><i>#{v} (#{VOLUMES[v]})</i></b>" }
|
||||
text layout: :audience, ellipsize: :autoscale, str: data.audience.map { |au| "{A}#{au}"} do |embed|
|
||||
embed.svg key: '{A}', width: 48, height: 48, data: Icons::AUDIENCE
|
||||
end
|
||||
|
||||
save format: :png
|
||||
save_sheet prefix: "sheet",
|
||||
columns: 5, rows: 4, trim: '0.125in', count_format: ''
|
||||
|
||||
end
|
23
setlist/feedback/2023/04/15-Jeremiah.md
Normal file
@@ -0,0 +1,23 @@
|
||||
Make sure specify time blocks
|
||||
|
||||
5 - 2
|
||||
8 - 5
|
||||
13 - 11
|
||||
18 - 16
|
||||
|
||||
More cards for fewer players - ex. start with 7 but only end up with 4
|
||||
Volume might not really be a useful mechanic
|
||||
Everything At Once, and Wildcard, might be overpowered
|
||||
- Maybe reduce the number of points it's worth
|
||||
Cards without abilities probably wouldn't get chosen
|
||||
|
||||
Screentop: make a second set of hidden containers for tracking chosen cards
|
||||
|
||||
5 - 6
|
||||
8 - 11
|
||||
12 - 15
|
||||
16 - 20
|
||||
|
||||
Once you have your set, you can choose the order as they're revealed?
|
||||
Possible to "lean into" a suit
|
||||
Focus more on volume, less on suits
|
11
setlist/layout.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
volume:
|
||||
x: 90
|
||||
y: 955
|
||||
width: 320
|
||||
height: 50
|
||||
align: left
|
||||
|
||||
audience:
|
||||
extends: volume
|
||||
x: += 329
|
||||
align: right
|