diff --git a/src/assets/images/survivors/amy.jpg b/src/assets/images/survivors/amy.jpg deleted file mode 100644 index 2eb6f73..0000000 Binary files a/src/assets/images/survivors/amy.jpg and /dev/null differ diff --git a/src/assets/images/survivors/ben.jpg b/src/assets/images/survivors/ben.jpg deleted file mode 100644 index 4a0aa29..0000000 Binary files a/src/assets/images/survivors/ben.jpg and /dev/null differ diff --git a/src/assets/images/survivors/clara.png b/src/assets/images/survivors/clara.png new file mode 100644 index 0000000..7f29d0d Binary files /dev/null and b/src/assets/images/survivors/clara.png differ diff --git a/src/assets/images/survivors/debra.png b/src/assets/images/survivors/debra.png new file mode 100644 index 0000000..948066c Binary files /dev/null and b/src/assets/images/survivors/debra.png differ diff --git a/src/assets/images/survivors/doug.jpg b/src/assets/images/survivors/doug.jpg deleted file mode 100644 index b96e67a..0000000 Binary files a/src/assets/images/survivors/doug.jpg and /dev/null differ diff --git a/src/assets/images/survivors/duke.png b/src/assets/images/survivors/duke.png new file mode 100644 index 0000000..fbbf197 Binary files /dev/null and b/src/assets/images/survivors/duke.png differ diff --git a/src/assets/images/survivors/josh.jpg b/src/assets/images/survivors/josh.jpg deleted file mode 100644 index 34dfc3f..0000000 Binary files a/src/assets/images/survivors/josh.jpg and /dev/null differ diff --git a/src/assets/images/survivors/mary.jpg b/src/assets/images/survivors/mary.jpg deleted file mode 100644 index fc69457..0000000 Binary files a/src/assets/images/survivors/mary.jpg and /dev/null differ diff --git a/src/assets/images/survivors/ned.jpg b/src/assets/images/survivors/ned.jpg deleted file mode 100644 index 051a909..0000000 Binary files a/src/assets/images/survivors/ned.jpg and /dev/null differ diff --git a/src/assets/images/survivors/phil.jpg b/src/assets/images/survivors/phil.jpg deleted file mode 100644 index a6fb2a8..0000000 Binary files a/src/assets/images/survivors/phil.jpg and /dev/null differ diff --git a/src/assets/images/survivors/ruiz.png b/src/assets/images/survivors/ruiz.png new file mode 100644 index 0000000..83e65e3 Binary files /dev/null and b/src/assets/images/survivors/ruiz.png differ diff --git a/src/assets/images/survivors/tommy.png b/src/assets/images/survivors/tommy.png new file mode 100644 index 0000000..6fce157 Binary files /dev/null and b/src/assets/images/survivors/tommy.png differ diff --git a/src/assets/images/survivors/wanda.jpg b/src/assets/images/survivors/wanda.jpg deleted file mode 100644 index c0245f1..0000000 Binary files a/src/assets/images/survivors/wanda.jpg and /dev/null differ diff --git a/src/components/NewGame/styles.js b/src/components/NewGame/styles.js index 6ba0885..19269b3 100644 --- a/src/components/NewGame/styles.js +++ b/src/components/NewGame/styles.js @@ -58,6 +58,27 @@ export const CharacterArea = styled.div` return null; }} } + + @media all and (min-width: 1600px) { + ${({ number }) => { + if (number >= 8) { + return css` + top: 200px; + display: grid; + grid-template-columns: repeat(10, 1fr); + grid-template-rows: repeat(auto-fill, 100px); + `; + } + if (number) { + return css` + display: grid; + width: 90%; + grid-template-columns: repeat(${number}, 1fr); + `; + } + return null; + }} + } `; CharacterArea.displayName = 'CharacterArea'; @@ -80,6 +101,10 @@ export const CharacterImage = styled.img` css` ${activeImage} `} + +@media all and (min-width: 1600px) { + margin: 0 -20px; + } `; CharacterImage.displayName = 'CharacterImage'; @@ -145,6 +170,14 @@ export const CharacterName = styled.h1` font-size: 2rem; `} } + + @media all and (min-width: 1600px) { + top: unset; + bottom: 0; + left: -40%; + font-size: 2.4rem; + color: rgba(255, 255, 255, 0.8); + } `; CharacterName.displayName = 'CharacterName'; diff --git a/src/setup/abilities.js b/src/setup/abilities.js index e3e135c..da76bfe 100644 --- a/src/setup/abilities.js +++ b/src/setup/abilities.js @@ -67,7 +67,7 @@ const MOVE_ACTION = { effect: ([gen, mov, att, sea, bon]) => [gen, mov + 1, att, sea, bon] }; const SEARCH_ACTION = { - name: '+1 free Search Action ', + name: '+1 free Search Action', description: 'The Survivor has one free extra Search Action. This Action may only be used to Search and the Survivor can still only Search once per turn.', effect: ([gen, mov, att, sea, bon]) => [gen, mov, att, sea + 1, bon] @@ -191,7 +191,7 @@ const TOUGH = { 'The Survivor ignores the first Attack he receives from a single Zombie every Zombies’ Phase' }; const TRICK_SHOT = { - name: 'Trick shot ', + name: 'Trick shot', description: 'When the Survivor is equipped with Dual Ranged weapons, he can aim at targets in different Zones with each weapon in the same Action.' }; @@ -236,7 +236,7 @@ export const ABILITIES_S1 = { }; const ACTION_MELEE = { - name: '+1 free Melee Action ', + name: '+1 free Melee Action', description: 'The Survivor has one extra free Melee Combat Action. This Action may only be used for Melee Combat.', effect: ([gen, mov, att, sea, bon]) => [ @@ -249,7 +249,7 @@ const ACTION_MELEE = { }; const ACTION_RANGED = { - name: '+1 free Ranged Action ', + name: '+1 free Ranged Action', description: 'The Survivor has one extra, free Ranged Combat Action. This Action can only be used for Ranged Combat.', effect: ([gen, mov, att, sea, bon]) => [ @@ -261,9 +261,30 @@ const ACTION_RANGED = { ] }; +const SUPER_STRENGTH = { + name: 'Super strength', + description: + 'Consider the Damage value of Melee weapons used by the Survivor to be 3.' +}; + +const WEBBING = { + name: 'Webbing', + description: + 'All equipment in the Survivor’s inventory is considered equipped in hand.' +}; + +const ZOMBIE_LINK = { + name: 'Zombie link', + description: + 'The Survivor plays an extra turn each time an extra activation card is drawn in the Zombie pile.' +}; + export const ABILITIES_MALL = { ACTION_MELEE, - ACTION_RANGED + ACTION_RANGED, + SUPER_STRENGTH, + WEBBING, + ZOMBIE_LINK }; const BLITZ = { @@ -271,6 +292,11 @@ const BLITZ = { description: 'Each time your Survivor kills the last Zombie of a Zone, he gets 1 free Move Action to use immediately' }; +const BLOODLUST_MELEE = { + name: 'Bloodlust: Melee', + description: + 'Spend one Action with the Survivor: He moves up to two Zones to a Zone containing at least one Zombie (or rival Survivor). He then gains one free Melee Action' +}; const REAPER_COMBAT = { name: 'Reaper: Combat', description: @@ -289,12 +315,24 @@ const REAPER_RANGED = { 'Use this Skill when assigning hits while resolving a Ranged Action. One of these hits can freely kill an additional identical Zombie in the same Zone. Only a single additional Zombie can be killed per Action when using this Skill.', effect: ({ combat, melee, ranged }) => ({ combat, melee, ranged: ranged + 1 }) }; - +const TAUNT = { + name: 'Taunt', + description: + 'The Survivor can use this Skill, for free, once during each of his Activations. Select a Zone your Survivor can see. All Zombies standing in the selected Zone immediately gain an extra Activation: They try to reach the taunting Survivor by any means available. Taunted Zombies ignore all other Survivors. They do not attack them and cross the Zone they stand in if needed to reach the taunting Survivor.' +}; +const TACTICIAN = { + name: 'Tactician', + description: + 'The Survivor’s turn can be resolved anytime during the Players’ Phase, before or after any other Survivor’s turn. If several teammates benefit from this Skill at the same time, the team’s players choose their activation order.' +}; export const ABILITIES_S2 = { BLITZ, + BLOODLUST_MELEE, REAPER_COMBAT, REAPER_MELEE, - REAPER_RANGED + REAPER_RANGED, + TAUNT, + TACTICIAN }; const HIT_N_RUN = { @@ -302,14 +340,28 @@ const HIT_N_RUN = { description: 'The Survivor can use this Skill for free, just after he resolved Melee or Ranged Combat Action resulting in at least a Zombie kill (or a rival Survivor kill). He can then resolve a free Move Action. The Survivor does not spend extra Actions to perform this free Move Action if Zombies are standing in his Zone.' }; - +const SEARCH_PLUS_ONE = { + name: 'Search: +1 card', + description: 'Draw an extra card when Searching with the Survivor.' +}; export const ABILITIES_S3 = { - HIT_N_RUN + HIT_N_RUN, + SEARCH_PLUS_ONE +}; + +const CANT_BE_THAT_UNLUCKY = { + name: "Can't be THAT unlucy", + description: + 'Unlucky with dice results? Not anymore... Re-roll once any 1 on dice rolls.' +}; +export const NIGHT_SHIFT = { + CANT_BE_THAT_UNLUCKY }; export const ALL_ABILITIES = { ...ABILITIES_S1, ...ABILITIES_MALL, ...ABILITIES_S2, - ...ABILITIES_S3 + ...ABILITIES_S3, + ...NIGHT_SHIFT }; diff --git a/src/setup/characters.js b/src/setup/characters.js index e35f9bc..b81d69a 100644 --- a/src/setup/characters.js +++ b/src/setup/characters.js @@ -1,28 +1,46 @@ /* eslint-disable no-unused-vars */ import Amy from '../assets/images/survivors/amy.png'; import Ben from '../assets/images/survivors/ben.png'; +import Clara from '../assets/images/survivors/clara.png'; +import Debra from '../assets/images/survivors/debra.png'; +import Doug from '../assets/images/survivors/doug.png'; +import Duke from '../assets/images/survivors/duke.png'; +import Josh from '../assets/images/survivors/josh.png'; import Mary from '../assets/images/survivors/mary.png'; import Ned from '../assets/images/survivors/ned.png'; import Phil from '../assets/images/survivors/phil.png'; +import Ruiz from '../assets/images/survivors/ruiz.png'; +import Tommy from '../assets/images/survivors/tommy.png'; import Wanda from '../assets/images/survivors/wanda.png'; -import Josh from '../assets/images/survivors/josh.png'; -import Doug from '../assets/images/survivors/doug.png'; + import AmyFace from '../assets/images/survivors/amy-face.png'; import BenFace from '../assets/images/survivors/ben-face.png'; +import ClaraFace from '../assets/images/survivors/clara-face.png'; +import DebraFace from '../assets/images/survivors/debra-face.png'; +import DougFace from '../assets/images/survivors/doug-face.png'; +import DukeFace from '../assets/images/survivors/duke-face.png'; +import JoshFace from '../assets/images/survivors/josh-face.png'; import MaryFace from '../assets/images/survivors/mary-face.png'; import NedFace from '../assets/images/survivors/ned-face.png'; import PhilFace from '../assets/images/survivors/phil-face.png'; +import RuizFace from '../assets/images/survivors/ruiz-face.png'; +import TommyFace from '../assets/images/survivors/tommy-face.png'; import WandaFace from '../assets/images/survivors/wanda-face.png'; -import JoshFace from '../assets/images/survivors/josh-face.png'; -import DougFace from '../assets/images/survivors/doug-face.png'; + import SelectorAmy from '../assets/images/selectors/selector-amy.png'; import SelectorBen from '../assets/images/selectors/selector-ben.png'; +import SelectorClara from '../assets/images/selectors/selector-clara.png'; +import SelectorDebra from '../assets/images/selectors/selector-debra.png'; +import SelectorDoug from '../assets/images/selectors/selector-doug.png'; +import SelectorDuke from '../assets/images/selectors/selector-duke.png'; +import SelectorJosh from '../assets/images/selectors/selector-josh.png'; import SelectorMary from '../assets/images/selectors/selector-mary.png'; import SelectorNed from '../assets/images/selectors/selector-ned.png'; import SelectorPhil from '../assets/images/selectors/selector-phil.png'; +import SelectorRuiz from '../assets/images/selectors/selector-ruiz.png'; +import SelectorTommy from '../assets/images/selectors/selector-tommy.png'; import SelectorWanda from '../assets/images/selectors/selector-wanda.png'; -import SelectorJosh from '../assets/images/selectors/selector-josh.png'; -import SelectorDoug from '../assets/images/selectors/selector-doug.png'; + import { FEMALE, MALE } from '../constants'; import { ALL_ABILITIES } from './abilities'; @@ -30,46 +48,54 @@ const { ACTION, ACTION_MELEE, ACTION_RANGED, + ALL_YOUVE_GOT, + AMBIDEXTROUS, BLITZ, + BLOODLUST_MELEE, + BORN_LEADER, + CANT_BE_THAT_UNLUCKY, + COMBAT_ACTION, DAMAGEMELEE, DAMAGE_RANGED, + DESTINY, DICE_ROLL_COMBAT, DICE_ROLL_MEELEE, DICE_ROLL_RANGED, DIE_COMBAT, DIE_MELEE, DIE_RANGED, - COMBAT_ACTION, - HIT_N_RUN, - MOVE_ACTION, - SEARCH_ACTION, - MAX_RANGE, - ZONE_PER_MOVE, - RE_ROLL, - TWO_COCKTAILS, - TWO_ZONES_MOVE, - AMBIDEXTROUS, - BORN_LEADER, - DESTINY, GUNSLINGER, - HEARD, + HOARD, + HIT_N_RUN, HOLD_YOUR_NOSE, - ALL_YOUVE_GOT, LOCK_IT_DOWN, LOUD, LUCKY, MATCHING_SET, + MAX_RANGE, MEDIC, + MOVE_ACTION, NINJA, REAPER_COMBAT, REAPER_MELEE, REAPER_RANGED, + RE_ROLL, + SEARCH_ACTION, + SEARCH_PLUS_ONE, SLIPPERY, SNIPER, STARTS_WITH, + SUPER_STRENGTH, SWORDMASTER, + TACTICIAN, + TAUNT, TOUGH, - TRICK_SHOT + TRICK_SHOT, + TWO_COCKTAILS, + TWO_ZONES_MOVE, + WEBBING, + ZOMBIE_LINK, + ZONE_PER_MOVE } = ALL_ABILITIES; export const CHARACTERS_S1 = { @@ -255,7 +281,7 @@ export const CHARACTERS_KOPINSKI = { noise: 0, player: null, promotions: { - blue: ACTION_RANGED, + blue: BLITZ, yellow: ACTION, orange: [DICE_ROLL_RANGED, DIE_MELEE], red: [COMBAT_ACTION, MOVE_ACTION, SLIPPERY] @@ -283,12 +309,123 @@ export const CHARACTERS_KOPINSKI = { player: null, promotions: { blue: REAPER_RANGED, - yellow: ACTION_MELEE, + yellow: ACTION, orange: [ACTION_RANGED, BLITZ], red: [DICE_ROLL_COMBAT, DIE_COMBAT, MOVE_ACTION] }, selector: SelectorMary, voice: FEMALE, wounded: false + }, + Duke: { + abilities: [], + abilitiesUsed: [], + actions: [3, 0, [0, 0, 0], 0, 0], + actionsLeft: [3, 0, [0, 0, 0], 0, 0], + bonusDice: { combat: 0, melee: 0, ranged: 0 }, + color: '#537c6f', + experience: 0, + face: DukeFace, + img: Duke, + inReserve: [null, null, null], + inHand: [null, null], + location: null, + movement: 'confident', + name: 'Duke', + noise: 0, + player: null, + promotions: { + blue: SUPER_STRENGTH, + yellow: ACTION, + orange: [TAUNT, HOARD], + red: [REAPER_MELEE, COMBAT_ACTION, ALL_YOUVE_GOT] + }, + selector: SelectorDuke, + voice: MALE, + wounded: false + }, + Ruiz: { + abilities: [], + abilitiesUsed: [], + actions: [3, 0, [0, 0, 0], 0, 0], + actionsLeft: [3, 0, [0, 0, 0], 0, 0], + bonusDice: { combat: 0, melee: 0, ranged: 0 }, + color: '#3e4c84', + experience: 0, + face: RuizFace, + img: Ruiz, + inReserve: [null, null, null], + inHand: [null, null], + location: null, + movement: 'normal', + name: 'Ruiz', + noise: 0, + player: null, + promotions: { + blue: WEBBING, + yellow: ACTION, + orange: [SEARCH_PLUS_ONE, BORN_LEADER], + red: [DIE_RANGED, TACTICIAN, BLOODLUST_MELEE] + }, + selector: SelectorRuiz, + voice: MALE, + wounded: false + } +}; + +export const CHARACTERS_NIGHT_SHIFT = { + Duke: { + abilities: [], + abilitiesUsed: [], + actions: [3, 0, [0, 0, 0], 0, 0], + actionsLeft: [3, 0, [0, 0, 0], 0, 0], + bonusDice: { combat: 0, melee: 0, ranged: 0 }, + color: '#537c6f', + experience: 0, + face: DukeFace, + img: Duke, + inReserve: [null, null, null], + inHand: [null, null], + location: null, + movement: 'confident', + name: 'Duke', + noise: 0, + player: null, + promotions: { + blue: SUPER_STRENGTH, + yellow: ACTION, + orange: [TAUNT, HOARD], + red: [REAPER_MELEE, COMBAT_ACTION, ALL_YOUVE_GOT] + }, + selector: SelectorDuke, + voice: MALE, + wounded: false + }, + Ruiz: { + abilities: [], + abilitiesUsed: [], + actions: [3, 0, [0, 0, 0], 0, 0], + actionsLeft: [3, 0, [0, 0, 0], 0, 0], + bonusDice: { combat: 0, melee: 0, ranged: 0 }, + color: '#3e4c84', + experience: 0, + face: RuizFace, + img: Ruiz, + inReserve: [null, null, null], + inHand: [null, null], + location: null, + movement: 'normal', + name: 'Ruiz', + noise: 0, + player: null, + promotions: { + blue: WEBBING, + yellow: ACTION, + orange: [SEARCH_PLUS_ONE, BORN_LEADER], + red: [DIE_RANGED, TACTICIAN, BLOODLUST_MELEE] + }, + selector: SelectorRuiz, + voice: MALE, + wounded: false } };