-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
James Picone
committed
Apr 11, 2021
1 parent
3a5d56a
commit 59b74f3
Showing
17 changed files
with
1,200 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,214 @@ | ||
{ | ||
"name": "Jessica Yamada", | ||
"kind": "Hero", | ||
"initialCardIdentifiers": [ "JessicaYamadaInstructions" ], | ||
"initialOffToTheSideCardIdentifiers": [ "JessicaYamadaCharacter" ], | ||
"cards": [ | ||
{ | ||
"identifier": "JessicaYamadaCharacter", | ||
"title": "Jessica Yamada", | ||
"count": 1, | ||
"body": "Therapy", | ||
"gameplay": "If every other hero is incapacitated, incapacitate Jessica Yamada", | ||
"icons": [], | ||
"powers": [ "Another player either regains 2 HP or draws a card" ], | ||
"character": true, | ||
"backgroundColor": "ffffff", | ||
"openingLines": { | ||
"default": "blargh" | ||
}, | ||
"complexity": 1, | ||
"incapacitatedAbilities": [ | ||
"1 player draws 1 card", | ||
"1 player plays 1 card", | ||
"1 player regains 2 HP" | ||
] | ||
}, | ||
{ | ||
"identifier": "JessicaYamadaInstructions", | ||
"title": "Jessica Yamada", | ||
"count": 1, | ||
"isReal": false, | ||
"character": true, | ||
"body": "Team Psychologist", | ||
"flippedBody": "Retired Psychologist", | ||
"gameplay": [ | ||
"If this didn't exist Jessica Yamada would start the game incapacitated.", | ||
"Handleabra don't think it's a bug." | ||
], | ||
"icons": [], | ||
"flippedIcons": [] | ||
}, | ||
{ | ||
"identifier": "AMomentOfReflection", | ||
"title": "A Moment of Reflection", | ||
"keywords": [ "one-shot" ], | ||
"body": [ | ||
"Another player may search their deck for a card, put it into their hand, and then shuffle their deck" | ||
], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Weaver", | ||
"text": "I got a chance to talk stuff through. More of a sense of why they were putting obstacles in my way." | ||
} | ||
], | ||
"flavorReference": "Weaver, Drone 23.4", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "AHelpfulSuggestion", | ||
"title": "A Helpful Suggestion", | ||
"keywords": [ "one-shot" ], | ||
"body": [ | ||
"Another player may play a card and use a power, in any order" | ||
], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "I could, for example, talk to the warden about you getting a chance to run in the mornings, testifying that it'd be a good, healthy release." | ||
} | ||
], | ||
"flavorReference": "Jessica, Drone 23.4", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "PsychologicalTraining", | ||
"title": "Psychological Training", | ||
"keywords": [ "ongoing" ], | ||
"body": [ | ||
"At the end of your turn, reveal the top card of your deck. If it's a One-Shot, put it into your hand. Otherwise, return it to the top of the deck" | ||
], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "Give it a try. It's sometimes easiest if you start with the underlying emotion. I feel, followed by the emotion, then talk about why." | ||
} | ||
], | ||
"flavorReference": "Jessica, Drone 23.4", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "TimeToThink", | ||
"title": "Time to Think", | ||
"keywords": [ "ongoing", "limited" ], | ||
"body": [ | ||
"Whenever a player plays no cards during their play phase, they may draw a card", | ||
"Whenever a player uses no powers during their power phase, they may draw a card", | ||
"Whenever a player skips a phase, they may draw a card" | ||
], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Weaver", | ||
"text": "A break can be nice, whether it's from school or saving the world." | ||
} | ||
], | ||
"flavorReference": "Weaver, Drone 23.4", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "HelpNoMatterTheCost", | ||
"title": "Help, No Matter the Cost", | ||
"keywords": [ "one-shot" ], | ||
"body": [ | ||
"Discard any number of cards. Another player draws X cards, where X is the number of cards discarded + 2" | ||
], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "I'm here because I was invited, and because I want to help people. I'd like to help you." | ||
} | ||
], | ||
"flavorReference": "Jessica, Teneral e.1", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "ComfortableOffice", | ||
"title": "Comfortable Office", | ||
"keywords": [ "equipment", "limited" ], | ||
"body": [ | ||
"At the start of your turn, a player regains 3 HP" | ||
], | ||
"flavorText": "Weld closed the door and settled in the reinforced chair she'd brought into her office in anticipation of the appointment.", | ||
"flavorReference": "Interlude 18", | ||
"count": 2 | ||
}, | ||
{ | ||
"identifier": "SupportAndStability", | ||
"title": "Support and Stability", | ||
"body": [ | ||
"The first time each turn a hero would deal themselves damage, you may prevent that damage" | ||
], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "I'm not so sure I like the word 'judge'. Evaluate is a better word. Listen is better still. I want to listen to you, because I can't help you if I don't understand you, and I want my understanding of you to come from <em>your</em> words" | ||
} | ||
], | ||
"flavorReference": "Jessica, Teneral e.1", | ||
"count": 2, | ||
"keywords": [ "ongoing", "limited" ] | ||
}, | ||
{ | ||
"identifier": "Clarity", | ||
"title": "Clarity", | ||
"body": [ | ||
"Each player reveals the top card of their deck. They may either discard it or return it to the top of their deck" | ||
], | ||
"keywords": [ "one-shot" ], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "I almost always recommend relaxation exercises and meditation to my patients with control issues. There's almost always a degree of improvement." | ||
} | ||
], | ||
"flavorReference": "Jessica, Drone 23.4", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "NothingIsLost", | ||
"title": "Nothing is Lost", | ||
"body": [ | ||
"Each player may search their trash for a card and put it into their hand" | ||
], | ||
"keywords": [ "one-shot" ], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "Just like that. Believe it or not, I've handled worse things than a young woman torn between fatalism and wanting to help her friends stick together." | ||
} | ||
], | ||
"flavorReference": "Jessica, Interlude 18", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "ResilienceAndRespect", | ||
"title": "Resilience and Respect", | ||
"body": [ | ||
"Reduce psychic damage dealt to hero targets by 1" | ||
], | ||
"keywords": [ "ongoing" ], | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "What we do here is up to you. I've had patients who enjoy this kind of verbal jousting. Many walk into a first session with preconceived ideas, that they'll be forced to lie on a couch and bare their vulnerabilities while I pry at them with questions. A debate gives them their power back." | ||
} | ||
], | ||
"flavorReference": "Jessica, Teneral e.1", | ||
"count": 4 | ||
}, | ||
{ | ||
"identifier": "StrategyAndSuggestion", | ||
"title": "Strategy and Suggestion", | ||
"count": 4, | ||
"body": "Another player reveals cards from their deck until they reveal an Ongoing. They may either put it into play or into their hand. Shuffle the other revealed cards back into their deck", | ||
"flavorQuotes": [ | ||
{ | ||
"identifier": "Jessica", | ||
"text": "You're allowed to say you don't know the answer, Ciara. If it comes down to that, then I can suggest an answer and we can explore it together." | ||
} | ||
], | ||
"flavorReference": "Jessica, Teneral e.1", | ||
"keywords": [ "one-shot" ] | ||
} | ||
] | ||
} |
117 changes: 117 additions & 0 deletions
117
Mod/Heroes/JessicaYamada/Cards/AHelpfulSuggestionCardController.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
| ||
using Handelabra.Sentinels.Engine.Controller; | ||
using Handelabra.Sentinels.Engine.Model; | ||
using System; | ||
using System.Collections; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using System.Text; | ||
|
||
namespace Jp.ParahumansOfTheWormverse.JessicaYamada | ||
{ | ||
class AHelpfulSuggestionCardController : CardController | ||
{ | ||
public AHelpfulSuggestionCardController(Card card, TurnTakerController turnTakerController) | ||
: base(card, turnTakerController) | ||
{ | ||
} | ||
|
||
public override IEnumerator Play() | ||
{ | ||
// Another player may play a card and use a power, in any order | ||
var selectedPlayerList = new List<SelectTurnTakerDecision>(); | ||
var e = GameController.SelectHeroTurnTaker( | ||
HeroTurnTakerController, | ||
SelectionType.PlayCard, | ||
optional: false, | ||
allowAutoDecide: false, | ||
storedResults: selectedPlayerList, | ||
heroCriteria: new LinqTurnTakerCriteria(tt => tt != TurnTaker), | ||
cardSource: GetCardSource() | ||
); | ||
if (UseUnityCoroutines) | ||
{ | ||
yield return GameController.StartCoroutine(e); | ||
} | ||
else | ||
{ | ||
GameController.ExhaustCoroutine(e); | ||
} | ||
|
||
var selectedPlayer = GetSelectedTurnTaker(selectedPlayerList); | ||
if (selectedPlayer == null) { yield break; } | ||
|
||
var selectedPlayerController = FindTurnTakerController(selectedPlayer) as HeroTurnTakerController; | ||
if (selectedPlayerController == null) { yield break; } | ||
|
||
e = SelectAndPerformFunction( | ||
selectedPlayerController, | ||
new[] { | ||
new Function(selectedPlayerController, "Play a card", SelectionType.PlayCard, () => PlayCardFunc(selectedPlayerController)), | ||
new Function(selectedPlayerController, "Use a power", SelectionType.UsePower, () => UsePowerFunc(selectedPlayerController)) | ||
}, | ||
associatedCards: new[] { Card } | ||
); | ||
if (UseUnityCoroutines) | ||
{ | ||
yield return GameController.StartCoroutine(e); | ||
} | ||
else | ||
{ | ||
GameController.ExhaustCoroutine(e); | ||
} | ||
} | ||
|
||
public IEnumerator PlayCardFunc(HeroTurnTakerController httc, bool powerUsed = false) | ||
{ | ||
var e = SelectAndPlayCardFromHand(httc); | ||
if (UseUnityCoroutines) | ||
{ | ||
yield return GameController.StartCoroutine(e); | ||
} | ||
else | ||
{ | ||
GameController.ExhaustCoroutine(e); | ||
} | ||
|
||
if (! powerUsed) | ||
{ | ||
e = UsePowerFunc(httc, true); | ||
if (UseUnityCoroutines) | ||
{ | ||
yield return GameController.StartCoroutine(e); | ||
} | ||
else | ||
{ | ||
GameController.ExhaustCoroutine(e); | ||
} | ||
} | ||
} | ||
|
||
public IEnumerator UsePowerFunc(HeroTurnTakerController httc, bool playUsed = false) | ||
{ | ||
var e = GameController.SelectAndUsePower(httc, cardSource: GetCardSource()); | ||
if (UseUnityCoroutines) | ||
{ | ||
yield return GameController.StartCoroutine(e); | ||
} | ||
else | ||
{ | ||
GameController.ExhaustCoroutine(e); | ||
} | ||
|
||
if (! playUsed) | ||
{ | ||
e = PlayCardFunc(httc, true); | ||
if (UseUnityCoroutines) | ||
{ | ||
yield return GameController.StartCoroutine(e); | ||
} | ||
else | ||
{ | ||
GameController.ExhaustCoroutine(e); | ||
} | ||
} | ||
} | ||
} | ||
} |
Oops, something went wrong.