Table of Contents

Example cards

Coin Flip

A colorless Skill card that flips a coin: heads gives the player gold, tails takes it away (half as much when upgraded). Demonstrates RNG usage, dynamic variables, upgrade behavior, and custom banter text.

using MegaCrit.Sts2.Core.Commands;
using MegaCrit.Sts2.Core.Entities.Cards;
using MegaCrit.Sts2.Core.GameActions.Multiplayer;
using MegaCrit.Sts2.Core.Helpers;
using MegaCrit.Sts2.Core.Localization;
using MegaCrit.Sts2.Core.Localization.DynamicVars;
using MegaCrit.Sts2.Core.Nodes.Rooms;
using MegaCrit.Sts2.Core.Random;
using ModSmith.Models;

namespace ModTemplate;

class CoinFlip : ModSmithCardModel
{
  public CoinFlip()
    : base(1, CardType.Skill, CardRarity.Common, TargetType.Self)
  {
  }

  protected override IEnumerable<DynamicVar> CanonicalVars => [
    new GoldVar(10),
  ];

  protected override async Task OnPlay(PlayerChoiceContext choiceContext, CardPlay cardPlay)
  {
    bool heads = RunState?.Rng.Niche.NextBool() ?? Rng.Chaotic.NextBool();
    var goldValue = DynamicVars.Gold.IntValue;
    if (heads)
    {
      TalkCmd.Play(new LocString("cards", $"{base.Id.Entry}.headsBanter"), Owner.Creature, 1.5);
      NCombatRoom.Instance?.PlaySplashVfx(Owner.Creature, StsColors.green);
      await PlayerCmd.GainGold(goldValue, Owner);
    }
    else
    {
      TalkCmd.Play(new LocString("cards", $"{base.Id.Entry}.tailsBanter"), Owner.Creature, 1.5);
      NCombatRoom.Instance?.PlaySplashVfx(Owner.Creature, StsColors.red);
      goldValue = base.IsUpgraded ? goldValue / 2 : goldValue;
      await PlayerCmd.LoseGold(goldValue, Owner);
    }
  }

  protected override void OnUpgrade()
  {
    base.DynamicVars.Gold.UpgradeValueBy(2);
  }
}